基于C251单片机的水位测量程序,有水灯亮
时间: 2024-03-08 20:46:08 浏览: 15
好的,针对您的问题,以下是一份基于C251单片机的水位测量程序,当水位高于一定程度时,会点亮水灯。
```c
#include <STC12C5A60S2.h>
sbit trig = P1^0; //定义触发引脚
sbit echo = P1^1; //定义回响引脚
sbit led = P1^2; //定义水灯引脚
unsigned int distance; //定义距离变量
void delay(unsigned int us) //延时函数
{
unsigned int i, j;
for(i = us; i > 0; i--)
for(j = 112; j > 0; j--);
}
void main()
{
TMOD = 0x01; //定时器T0工作方式1
TH0 = 0; //定时器T0初始值
TL0 = 0;
TR0 = 1; //启动定时器T0
ET0 = 1; //打开定时器T0中断
EA = 1; //打开总中断
while(1)
{
trig = 1; //触发超声波发送脉冲
delay(10); //延时10us
trig = 0;
while(!echo); //等待回响引脚跳变
TH0 = 0; //清零定时器T0计数器
TL0 = 0;
while(echo); //等待回响引脚跳变
distance = (TH0 << 8) + TL0; //计算距离
if(distance < 20) //如果距离小于20cm,则点亮水灯
led = 1;
else
led = 0;
}
}
void timer0_isr() interrupt 1 //定时器T0中断服务函数
{
TH0 = 0; //重新赋初值
TL0 = 0;
}
```
该程序通过超声波测距模块测量距离,当距离小于20cm时,点亮水灯。其中,trig和echo分别为超声波模块的触发引脚和回响引脚,led为水灯引脚,delay函数用于延时,timer0_isr为定时器T0中断服务函数,用于定时器计时。