超声波测距lcd1602显示,大神帮忙看看哪错了屏幕不显示呢

2019-07-15 18:55发布

  #include<intrins.h>
   #define uint unsigned int
   #define uchar unsigned char
   sbit trig=P3^3;
    //发射
   sbit echo=P3^2; //接收
   sbit lcde=P2^7; //e
   sbit wr=P2^5;   
   sbit rd=P2^6;
   void delay(uint z);
   void com(uchar com);
   void writedata(uchar date);
    void display(uchar temp);
   uchar num,i;
   uchar table1[3];      
   int time,distance,succeedflag;  
   void lcdinit();
      void main()
   {
       EA=1;
      TMOD=0X01;
      ET0=1;
     
              while(1)
     {   
          succeedflag=0;
          trig=1;
          delay(10);
       trig=0;
       while(!echo);
       TR0=1;
       TH0=0;
       TL0=0;
       while(echo);
       TR0=0;
       succeedflag=1;
         delay(40);
       }
     if(succeedflag==1)
      {
        time=TH0*256+TL0;
      distance=time*0.0172;    //cm
        display(distance);
      
      }
     if(succeedflag==0)
       {
          distance=0;
             }
        
     
   }
      void delay(uint z)         //延时函数
   {
     uint x,y;
     for(x=z;x>0;x--)
        for(y=110;y>0;y--);
   }
    void  com(uchar com)         //lcd命令
    {
        
      rd=0;
      wr=0;
      P0=com;
      delay(5);
      lcde=1;
      delay(5);
      lcde=0;
    }
    void writedata(uchar date)        //lcd数据
    {
      rd=1;
    wr=0;
    P0=date;
    delay(5);
    lcde=1;
    delay(5);
    lcde=0;
    }
    void lcdinit()       //lcd命令
    {     
         com(0x38);
    com(0x0c);
    com(0x06);
    com(0x01);
    com(0x80);
   
    }
      void display(uchar temp)                 //记数
    {   
        uchar bai,shi,ge,i,j;
      bai=temp/100;
      shi=temp%100/10;
      ge=temp%10;
      table1[0]=bai+'0';
      table1[1]=shi+'0';
      table1[2]=ge+'0';
      lcdinit();           
        for(i=0;i<3;i++)
        {
          writedata(table1[i]);
      
         }
   
      
   
     }
        void timer0() interrupt 1        //定时器0中断
    {
        TH0=0;
      TH0=0;
   
    }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
yanxinzou
1楼-- · 2019-07-16 00:28
有没有大神出来出来看看呢?
ntmusic
2楼-- · 2019-07-16 00:35
做项目或小制作不是一股脑把程序写好的,应该由底层到上层写起。比如你用1602进行测距显示,你构建程序的顺序应该是:
1.写个引脚电平跳变程序,检验单片机是否能正常工作
2.在1的基础上写1602的驱动程序,确保1602能进行显示,留出显示程序接口
3.在2的基础上验证定时器是否正常工作
4.在2和3都正常的情况下,编写测距程序
不要说我为什么不直接给你指出错误,我只希望各位电子爱好者不光能写程序,还要写好程序
zycheng
3楼-- · 2019-07-16 03:10
ntmusic 发表于 2014-9-3 13:38
做项目或小制作不是一股脑把程序写好的,应该由底层到上层写起。比如你用1602进行测距显示,你构建程序的顺 ...


恩恩,知道啦,谢啦!

一周热门 更多>