超声波 1602显示

2019-07-18 17:47发布

                                  
/*============================================================
//HC-SRO4 超声波测距模块 程序
使用12M或11.0592M晶振,实测使用11.0592M TX信号触发 RX信号回响
=============================================================*/

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit  RX = P2^0;
sbit  TX = P2^1;
sbit rs=P2^4;
sbit rw=P2^5;
sbit e=P2^6;

                          
uint  i, timerH,timerL,time=0;
unsigned long S=0;
uint disbuff[]={0,0,0};

//************************************************
//延时函数,在12MHz的晶振频率下
//大约50us的延时
//************************************************
void delay_50us(uint t)
{
        uchar j;
        for(;t>0;t--)
        for(j=19;j>0;j--);
}

//************************************************
//延时函数,在12MHz的晶振频率下
//大约50ms的延时
//************************************************
void delay_50ms(uint t)
{
        uint j;
        for(;t>0;t--)
        for(j=6245;j>0;j--);
}

void write_com(uchar com)
{
        e=0;
        rs=0;
        rw=0;
        P0=com;
        delay_50us(10);
        e=1;
        delay_50us(20);
        e=0;
}

void write_data(uchar dat)
{
        e=0;
        rs=1;
        rw=0;
        P0=dat;
        delay_50us(10);
        e=1;
        delay_50us(20);
        e=0;       
}

void init(void)
{
        delay_50us(300);
        write_com(0x38);
        delay_50us(100);
        write_com(0x38);
        delay_50us(100);
        write_com(0x38);
        write_com(0x38);
        write_com(0x08);
        write_com(0x01);
        write_com(0x06);
        write_com(0x0c);
}

/********************************************************/
    void Conut(void)
        {
         time=timerH*256+timerL;       
         S=time*0.0172;     //算出来是CM
             if(S<=999)         
                 {
                  disbuff[0]=S/100;
                  disbuff[1]=S%100/10;
                  disbuff[2]=S%100%10;
                  }
                  write_com(0xc0);       
                  for(i=0;i<3;i++)
                   {
                         write_data(disbuff[i]);
                         delay_50us(20);
                     }                             
        }

     void  StartModule()                          //启动模块
  {
          TX=1;                                            
          delay_50us(1);
          TX=0;
  }                                 
                                 
/*********************************************************/
void main(void)
{       
         init();            //LCM初始化                       
         TMOD=0x01;                   //设T0为方式1
         TH0=0;
         TL0=0;         
         ET0=1;             //允许T0中断
         EA=1;                           //开启总中断        */                       
         while(1)
          {
             StartModule();
             while(!RX);                //当RX为零时等待
             TR0=1;                            //开启计数
             while(RX);                        //当RX为1计数并等待
             TR0=0;                                //关闭计数
         Conut();                        //计算
          }
}

void t0() interrupt 1
{
TH0=0;
TL0=0;
timerH=TH0;
timerL=TL0;
}

自己写的程序,请大家帮帮忙,为什么1602显示是3个乱码,(1602没坏)  谢谢


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。