一.硬件方案
本设计的主要原理为:红外发射管发射红外线,红外接收管接收红外线,并且接收管当有红外线照射的时候,电阻比较小,当无线外线照射的时候电阻比较大,这样就可以通过一个电压比较器和一个基准电压进行对比,当有光照的时候,红外接收管电阻比较小,那么和其串联的电压分压就会增大,所以电压比较器将会输出一高电平;当无光照射的时候,红外接收管的电阻比较大,这样电压比较器就会输出一个低电平。这个便是外部计数电平信号,这个电平信号送入AT89C51单片机进行计数控制,在经过扩展、显示驱动完成最后的显示过程。硬件主要由:STC89C52单片机最小系统、LCD1602显示屏显示、红外避障传感器、按键、蜂鸣器及电源组成;
二.设计功能
(1)按键从左边第一个起,设置键、加键/清零键、减键。单独一个控制为复位按键。
(2)控制芯片使用51单片机,显示设备采用1602液晶;
(3)采用两个红外光电传感器,分别对进入和出去的人进行检测;
(4)计数范围是0-9999;
(5)通过统计进入和出去的人数,算出当前的总人数并进行显示;
(6)可通过按键设置人数上限报警值;
(7)一旦总人数大于或等于设置的人数上限值时,进行声光报警;
(8)可通过复位按键,清零计数;
三.设计原理图
(1)原理图主要采用AD软件进行设计,如图:
四.软件设计
主程序源码(节选)
/******************主程序**********************/
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;
}
}
资料链接:https://pan.baidu.com/s/1T-wNoVWz6Rt4NxREcNBO3w?pwd=85tf