/*============================================================
//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没坏) 谢谢
一周热门 更多>