/*============================================================//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没坏) 谢谢
此帖出自小平头技术问答
一周热门 更多>