久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1181|回復: 2
打印 上一主題 下一主題
收起左側

我的單片機小車總程序,但1602最多只能顯示4CM,求指點

[復制鏈接]
跳轉到指定樓層
樓主
ID:494908 發表于 2019-4-18 12:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long

sbit IN1=P3^0;
sbit IN2=P3^1;
sbit IN3=P3^2;
sbit IN4=P3^3;

sbit RS=P2^6;
sbit RW=P2^5;
sbit E=P2^7;  
sbit trig=P3^4;
sbit echo=P3^5;
sbit BELL=P2^4;

sbit PWM=P2^1;
bit  flag = 0;
long SL,SR,S3;
uchar count,time=0;
unsigned long S = 0;
unsigned char code ASCII[13] = "0123456789.-M";
unsigned char disbuff[4] = { 0,0,0,0};

void delayms(zms)
{
uint x,y;
for(x=zms;x>0;x--)
  for(y=110;y>0;y--);
}

void wc(com,com1)
{
E=0;
  RS=0;
  RW=0;
  P0=com;
  delayms(2);
  E=1;
  delayms(2);
  E=0;
  }

  void wd(dat)
  {
  E=0;
  RS=1;
  RW=0;
  P0=dat;
  delayms(2);
  E=1;
  delayms(2);
  E=0;
  delayms(2);
  }

  void init(void)              
{
  wc(0x38,0);
delayms(5);
  wc(0x38,0);
delayms(5);
  wc(0x38,0);
delayms(5);
  wc(0x38,1);
  wc(0x01,1);
  wc(0x06,1);        
  wc(0x0E,1);
}

void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
        Y &= 0x1;
        X &= 0xF;
        if (Y) X |= 0x40;
        X |= 0x80;
        wc(X, 1);
    wd(DData);
        }

void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
{
        unsigned char ListLength;

  ListLength = 0;
        Y &= 0x1;
        X &= 0xF;
        while (DData[ListLength]>0x19)
                {
                        if (X <= 0xF)
                                {
                                        DisplayOneChar(X, Y, DData[ListLength]);
                                        ListLength++;
                                        X++;
                                }
                }
}

void measure(void)
{
{
                time=TH0*256+TL0;  
     TH0=0;  
     TL0=0;  

     S=(time*1.7)/100;     
     if((S>=7000)||flag==1)
     {     
      flag=0;  
          DisplayOneChar(0, 1, ASCII[11]);  
      DisplayOneChar(1, 1, ASCII[10]);  
      DisplayOneChar(2, 1, ASCII[11]);  
      DisplayOneChar(3, 1, ASCII[11]);  
      DisplayOneChar(4, 1, ASCII[12]);
     }  
     else  
     {  
      disbuff[0]=S%1000/100;  
      disbuff[1]=S%1000%100/10;  
      disbuff[2]=S%1000%10%10;  
      DisplayOneChar(0, 1, ASCII[disbuff[0]]);  
      DisplayOneChar(1, 1, ASCII[10]);   
      DisplayOneChar(2, 1, ASCII[disbuff[1]]);  
      DisplayOneChar(3, 1, ASCII[disbuff[2]]);  
      DisplayOneChar(4, 1, ASCII[12]);  
        }
         }
         }

void zd0() interrupt 2
{      
    flag=1;                          
}

void StartModule()
{
      trig = 1;                                 
      _nop_();   
      _nop_();   
      _nop_();   
      _nop_();   
      _nop_();   
      _nop_();   
      _nop_();   
      _nop_();   
      _nop_();   
      _nop_();   
      _nop_();   
      _nop_();   
      _nop_();   
      _nop_();   
      _nop_();   
      _nop_();   
      _nop_();  
      _nop_();   
      _nop_();   
      _nop_();   
      _nop_();  
     trig=0;  
}  


void timer0() interrupt        1
{
  TH0=(65536-100)/256;
  TL0=(65536-100)%256;
  time++;
  if(time<count)  //5 左轉90度,15歸中,25右轉90度
  PWM=1;
  else  PWM=0;
   if(time==200)         
  time=0;
  }

              void run(void)
{
   IN1=0; IN2=1; IN3=1; IN4=0;
}

        void back(void)
{
  IN1=1; IN2=0; IN3=0; IN4=1;
}

        void stop(void)
{
   IN1=0; IN2=0; IN3=0; IN4=0;
}

        void right(void)
{
  IN1=0; IN2=1; IN3=0; IN4=1;
}

        void left(void)
{
  IN1=1; IN2=0; IN3=1; IN4=0;
}


void avoid()
{
  count=5;
  delayms(400);
  StartModule();
  measure();
  SL=S;                  
  count=25;
  delayms(400);
  StartModule();
  measure();
  SR=S;
  count=15;
  delayms(100);
  StartModule();
  measure();
  S3=S;
  if(SL<20||SR<20||S3<20)
  {
   back();
   delayms(500);
   }
   if(SL<20&&SR<20&&S3<20)
   {
    back();
        delayms(500);
        }
        if(SL<SR)
        {
         right();
         delayms(400);
         }
         else
         {
          left();
          delayms(400);
          }
        }

        void main()
{                  
   init();
   while(1)
   {
   TMOD=0x01;         
    TH0=0;  
    TL0=0;     
    ET0=1;            
    EA=1;                             
        while(1)
        {
   StartModule();
   while(!echo);
   TR0=1;
   while(echo);
   TR0=0;
  measure();
        delayms(50);        
          if(S<300)
          {   
           stop();
           avoid();
           }
           else
           if(S>400)
           run();
           }
}
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:308437 發表于 2019-4-18 15:46 | 只看該作者
“1602最多只能顯示4CM”請問這句是什么意思?
請說清楚哈,真的看不懂
回復

使用道具 舉報

板凳
ID:280876 發表于 2019-4-25 20:56 | 只看該作者
兄dei,你是拿尺子量出4CM的嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本网站免费在线观看 | 中文字幕在线观看一区 | 中文字幕91av| 一区二区国产精品 | 久久国产一区二区三区 | 日韩高清av | h小视频 | 久久小视频| 午夜视频大全 | 国产精品成人久久久久 | 56pao在线| 中文字幕乱码亚洲精品一区 | heyzo在线| 久久精品国产久精国产 | 欧美在线观看一区 | 欧美一级二级在线观看 | 在线国产99 | 亚洲一二视频 | 成人精品一区二区三区中文字幕 | 成人欧美一区二区三区在线观看 | 亚洲视频中文 | 91在线播| 水蜜桃久久夜色精品一区 | 国产精品视频专区 | 亚洲成av人片在线观看 | xxxcom在线观看 | 久久久99精品免费观看 | 九九九色 | 色播99 | 国产一区二区在线免费观看 | 亚洲精品自拍视频 | 成年男女免费视频网站 | 欧美精品在线一区二区三区 | 中文字幕在线一 | 天天狠狠 | 欧美日韩精品一区二区 | 9久9久 | 中文字幕亚洲欧美 | 亚洲精品一区在线 | 日韩欧美在线观看视频网站 | 成人av播放 |