摘要
随着科学技术的不断发展,我们的生活也不断的朝智能化方向发展。各种智能化产品频繁出现在我们的生活中,其中单片机是最常用的智能化控制核心,为了能更好的了解单片机,我打算利用单片机设计一个公共场所人流量统计系统。本系统采用STC89C52单片机作为整个系统的控制核心,利用人体红外感应模块来检测是否有人员通过门,有人员通过则输出高电平,再根据实际情况由单片机判断人员是进入还是出去,最后将人员进出情况送液晶屏显示。同时系统还具有显示时间和时间可调的功能,这将使我们能更加直观的了解到各个时段人流量的变化情况。本次设计中的单片机控制程序采用C语言编写,具有结构清楚,便于理解以及改进功能的特点。
关键词:人流量统计;人体红外感应器;51单片机
一、硬件方案
硬件构成:51单片机+最小系统+数码管显示模块+红外接近传感器模块+按键模块
二、设计功能
1. 单片机型号:STC89C52/51、AT89C52/51、AT89S52/51都可通用。
2.采用红外壁障传感器检测信号,检测距离3~50cm,灵敏度可调(红外接近传感器的背面旋钮调节)。
3.数码管显示第一位显示数字(1代表进入人数,2代表出去人数、3代表滞留人数),第二位显示当前的人流量。
4.有一个按键切换显示滞留人数。另一个是复位按键。
三、成品实物图
四、原理图
五、PCB图
六、Proteus仿真
七、程序源码
部分代码:
flag_KEY2=0 ; //变量清零
count_chuqu++; //出去人数变量加
if(count_chuqu>count_jinru) //出去的人数不能大于进入的人数
count_chuqu=count_jinru; //所以出去的人数大于进入的人数时,让出去的人数等于进入的人数
count_zhiliu = count_jinru-count_chuqu;//更新滞留人数(室内现有人数为进入的人数减去出去的人数)
}
while(KEY1==0) //按键一直按下(传感器一直有信号)
display(); //调用显示函数
}
}
if(KEY2==0) //按键按下(进入的传感器检测到信号)
{
delay(5); //延时去抖
if(KEY2==0) //再次判断
{
flag_KEY2=1; //变量置1
if(flag_KEY2==1&&flag_KEY1==1) //判断变量是否都为1
{
status=1; //切换显示模式到显示进入人数
flag_KEY1=0;
flag_KEY2=0; //变量清零
count_jinru++; //进入人数加
count_zhiliu = count_jinru-count_chuqu;//更新滞留人数(室内现有人数为进入的人数减去出去的人数)
if(count_jinru>=99) //进入的人数最大99人
count_jinru=99; //大于99人,就显示99人
}
while(KEY2==0) //按键一直按下(传感器一直检测到有人)
display(); //调用显示函数
}
}
if(KEY3==0) //按键按下
{
delay(5); //延时去抖
if(KEY3==0) //再次判断按键按下
{
status++; //切换按键按下,就切换显示模式
if(status>3) //变量大于3
status=1;
P0=~LEDData[10]; //送显示码
P2=0xDF; //打开位选
delay(2); //延时
P2=0xFF; //关闭位选
switch (status) //判断是要显示什么内容
{
case 1: P0=LEDData[count_jinru/10];break;//显示进入人数的十位
case 2: P0=LEDData[count_chuqu/10];break;//显示出去人数的十位
case 3: P0=LEDData[count_zhiliu/10];break;//显示滞留人数的十位
}
P2=0xBF; //打开位选
delay(2); //下同,注释略
P2=0xFF;
switch (status) //判断是要显示什么内容
{
case 1: P0=LEDData[count_jinru%10];break;//显示进入人数的个位
资料包括:
需要完整的资料可以加入我的纷传圈子,里面有资源压缩包的百度网盘下载地址及提取码。
纷传点击用微信打开即可,过程有点繁琐请见谅。