设计功能
(1)主要采用51单片机+最小系统、LCD1602显示屏显示、红外避障传感器、按键、蜂鸣器及电源组成。
(2)显示屏设备采用1602液晶,使用两个红外光电传感器,分别对进入和出去的人进行检测,通过统计进入和出去的人数,算出当前的总人数并进行显示;其计数范围为0-9999。
(3)一旦总人数大于或等于设置的人数上限值时,进行声光报警。
(4)可通过按键设置人数上限报警值;按键从左边第一个起,设置键、加键/清零键、减键。单独一个控制为复位按键;按下复位按键,清零计数;
原理图:
原理图绘制软件采用AD2013。
红外计数传感器的原理是红外发射管发射红外线,红外接收管接收红外线,并且接收管当有红外线照射的时候,电阻比较小,当无线外线照射的时候电阻比较大,这样就可以通过一个电压比较器和一个基准电压进行对比,当有光照的时候,红外接收管电阻比较小,那么和其串联的电压分压就会增大,所以电压比较器将会输出一高电平;
当无光照射的时候,红外接收管的电阻比较大,这样电压比较器就会输出一个低电平。这个便是外部计数电平信号,这个电平信号送入51单片机进行计数控制,在经过扩展、显示驱动完成最后的显示过程。两个红外传感器分别检测进入的人和出去的人。
其总体硬件原理图如图所示。
程序设计
程序采用C作为编程语言,使用Keil5作为编程软件;
/******************主程序**********************/
void main()
{
beep = 0; //开机蜂鸣器叫一声
delay_1ms(100);
P0 = P1 = P2 = P3 = 0xff; //初始化IO口
time_init();
init_1602(); //lcd1602初始化
while(1)
{
key(); //按键扫描函数
if(key_can < 10)
{
key_with(); //按键执行函数
}
hw_jin_dis(); //红外计数
hw_chu_dis(); //红外计数
if(menu_1 == 0) //扫描显示倒计时数
{
if(flag_500ms == 1)
{
flag_500ms = 0;
if(num >= set_num)
beep = ~beep; //报警
else
{
beep = 1;
}
}
}
}
}
/*************定时器0中断服务程序***************/
void time0_int() interrupt 1
{
static uint value;
TH0 = 0xd8;
TL0 = 0xf0; // 10ms
value ++;
if(value >= 50)
{
value = 0;
flag_500ms = ~flag_500ms;
}
}
关注公众号-单片机实例设计,发送“计数器”获取资料;