51单片机车速检测程序
时间: 2023-11-28 11:06:02 浏览: 29
以下是一个简单的51单片机车速检测程序:
```
#include <reg52.h>
sbit IR = P1^0; // 红外传感器输入引脚
sbit BUZZER = P1^1; // 蜂鸣器输出引脚
unsigned int time; // 时间计数器
unsigned int speed; // 车速计数器
void delay(unsigned int t) // 延时函数
{
unsigned int i;
while(t--)
{
for(i=0; i<120; i++);
}
}
void timer0_init() // 定时器0初始化
{
TMOD |= 0x01; // 16位自动重装载模式
TH0 = 0x00; // 定时器计数值高位
TL0 = 0x00; // 定时器计数值低位
ET0 = 1; // 开启定时器0中断
EA = 1; // 开启总中断
TR0 = 1; // 启动定时器0
}
void main()
{
IR = 1; // 红外传感器输入引脚初始化
BUZZER = 0; // 蜂鸣器输出引脚初始化
time = 0; // 时间计数器初始化
speed = 0; // 车速计数器初始化
timer0_init(); // 定时器0初始化
while(1)
{
if(speed > 0) // 如果有车经过
{
BUZZER = 1; // 蜂鸣器响起
delay(500); // 延时500毫秒
BUZZER = 0; // 蜂鸣器停止响起
speed = 0; // 车速计数器清零
}
}
}
void timer0() interrupt 1 // 定时器0中断服务函数
{
TH0 = 0x3C; // 定时器计数值高位
TL0 = 0xB0; // 定时器计数值低位
time++; // 时间计数器加1
if(!IR) // 如果红外传感器检测到有车经过
{
speed++; // 车速计数器加1
}
if(time == 1000) // 如果时间计数器达到1秒
{
time = 0; // 时间计数器清零
speed = speed * 3; // 车速计数器乘以3,得到车速(单位为公里/小时)
}
}
```
这个程序使用一个红外传感器来检测车辆经过,每秒钟计算车辆经过的次数,最后乘以3得到车速(假设红外传感器每次检测到车辆经过时,车辆已经行驶了3米)。如果检测到车辆经过,蜂鸣器会响起,持续500毫秒。需要注意的是,这个程序只适用于单车道,双车道需要使用两个红外传感器来检测。