超声波测距C语言程序

#include
#define uchar unsigned char
#define uint unsigned int
uchar distance[]="THE DISTANCE IS:";
uchar cm[]="CM";
uchar dis[3];//距离数组,本超声波模块为HC—SR04,测量距离为2CM--400CM ,故只定义三位
sbit tirg=P1^0; //发射端
sbit echo=P1^1; //接收端
sbit lcdrs = P2^4;
sbit lcdrw = P2^5;
sbit lcden = P2^6;
uchar num;
int s; //不可为浮点型,因为,浮点型数不可以进行取模运算“%”
void delay(uint z)
{
uint x,y;
for(x=z;z>0;z--)
for(y=110;y>0;y--);
}
void TIM0init(void)
{

TMOD= 0x01;//定时器0工作方式1
TH0=0x00;
TL0=0x00;
EA=1;
ET0=1;
TR0=1;

}
void write_com(uchar com)
{
lcdrs=0;
lcdrw=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar dis)
{
lcdrs=1;
lcdrw=0;
P0=dis;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void lcdinit()
{
delay(5);
write_com(0x38);
delay(5);
write_com(0x38);
delay(5);
write_com(0x38);
delay(5);
write_com(0x0c);
write_com(0x06);
write_com(0x01); //清屏
}
void main()
{
lcdinit();
TIM0init();

while(1)
{
tirg=1; //触发信号是高电平脉冲,宽度大于10us
delay(12);
tirg=0;
while(!echo); //等待高电平
TR0=1;
while(echo); //等待低电平
TR0=0;
s=TH0*256+TL0;//取出定时器值高8位和低8位合并
s=s*1.7/100; //距离单位为cm
TH0=0;
TL0=0;
dis[0]=s%1000/100+0x30; //百位数
dis[1]=s%1000%100/10+0x30; //十位数
dis[2]=s%1000%10%10+0x30; //个位数

write_com(0x80);
for(num=0;num<16;num++)
{
write_data(distance[num]);
delay(5);
}
write_com(0x80+0x40 );
for(num=0;num<3;num++)
{
write_data(dis[num]);
delay(5);
}
write_com(0x80+0x44 );
for(num=0;num<2;num++)
{
write_data(cm[num]);
delay(5);
}

delay(300);
}
}




相关文档
最新文档