1、用HCSR04超声波传感器测量距离,测量范围0~170cm,精确到小数点后一位。
2、用LCD1602显示测量到的距离:显示屏第一行显示“distance:***.*cm”。
3、当距离大于120cm时,绿色LED灯亮;
当距离在50-120cm之间,蜂鸣器间断发声“滴 滴 滴 ”提示,黄色LED灯亮。
当距离低于50cm时,蜂鸣器持续报警,红色LED灯亮,并在LCD1602第二行显示“warning”并闪烁。
4、临界值默认50和120cm,可以用按键调节临界值,需满足下限值<上限值。
void Conut(void)
{
StartModule();
while(!Echo); //当RX为零时等待
TR0=1; //开启计数
while(Echo); //当RX为1计数并等待
TR0=0; //关闭计数
time=TH0*256+TL0;
TH0=0;
TL0=0;
DIstance =(time*1.7)/100; //算出来是CM
S = DIstance+1;
if((S>=170)||flag==1) //超出测量范围显示“-”
{
flag=0;
DisplayOneChar(0, 1, '0');
DisplayOneChar(1, 1, '.'); //显示点
DisplayOneChar(2, 1, '0');
DisplayOneChar(3, 1, '0');
DisplayOneChar(4, 1, 'C'); //显示C
DisplayOneChar(5, 1, 'M'); //显示M
}
else if(S>=50 && S<170)
{
DisplayListChar(0,1,"normal-");
DisplayOneChar(9, 0, (char)(S/100+'0')); //百位
//DisplayOneChar(1, 1, '.'); //显示点
DisplayOneChar(10, 0, (char)(S/10%10+'0')); //十位
DisplayOneChar(11, 0, (char)(S%10+'0')); //个位
DisplayOneChar(12, 0, '.'); //显示点
DisplayOneChar(13, 0, '0'); //显示点
DisplayOneChar(14, 0, 'C'); //显示C
DisplayOneChar(15, 0, 'M'); //显示M
}
else
{
DisplayOneChar(9, 0, (char)(S/100+'0')); //百位
//DisplayOneChar(1, 1, '.'); //显示点
DisplayOneChar(10, 0, (char)(S/10%10+'0')); //十位
DisplayOneChar(11, 0, (char)(S%10+'0')); //个位
DisplayOneChar(12, 0, '.'); //显示点
DisplayOneChar(13, 0, '0'); //显示点
DisplayOneChar(14, 0, 'C'); //显示C
DisplayOneChar(15, 0, 'M'); //显示M
}
if(S <= L)
{
delay_ms(100);
DisplayListChar(0,1,"warning");
//LcdWriteCom(0x01); //清屏
LEDGREEN = 1;
LEDYELLOW = 1;
delay_ms(100);
DisplayListChar(0,1," ");
LEDRED = 0; //红灯亮
BUZZER = 0; //蜂鸣器响
}
else if(S>L && S<= H)
{
LEDYELLOW = 0; //黄灯亮
LEDGREEN = 1;
LEDRED = 1;
BUZZER = 1;
delay_ms(100);
BUZZER = 0; //蜂鸣器 嘀~嘀~嘀
delay_ms(100);
BUZZER = 1;
delay_ms(100);
}
else if(S > H)
{
LEDGREEN = 0 ; //绿灯亮
LEDYELLOW = 1;
LEDRED = 1;
BUZZER = 1; //蜂鸣器
}
}
void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围
{
flag=1; //中断溢出标志
}
void Sr04_Init()
{
TMOD=0x01; //设T0为方式1,GATE=1;
TH0=0;
TL0=0;
ET0=1; //允许T0中断
EA=1; //开启总中断
}
void main()
{
BUZZER = 1; //蜂鸣器不运转
Sr04_Init();
LcdInit();
DisplayListChar(0,0,"distance:");
while(1)
{
key_set();
Conut();
}
}
请点击这里