超声波+1602显示
/*============================================================ //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没坏) 谢谢
|