超声波+1602显示

2019-03-24 19:23发布

 /*============================================================//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); 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没坏)  谢谢                 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。