红外线自动计数器 联系客服

发布时间 : 星期四 文章红外线自动计数器更新完毕开始阅读

采用两组双位共阳数码管,实现人体计数,段选分别接P0口和P1口,位选通过PNP三极管放大,然后接单片机I/O口。 数码管动态显示 1.动态显示概念

用数码管显示信息时,由于每个数码管至少需要8 个I/O 口,如果需要多个数码管,则需要太多I/O 口,而单片机的I/O 口是有限的。在实际应用中,一般采用动态显示的方式解决此问题。

在编程时,需要输出段选和位选信号,位选信号选中其中一个数码管,然后输出段码,使该数码管显示所需要的内容,延时一段时间后,再选中另一个数码管,再输出对应的段码,高速交替。

例如需要显示数字“12”时,先输出位选信号,选中第一个数码管,输出1 的段码,延时一段时间后选中第二个数码管,输出2 的段码。把上面的流程以一定的速度循环执行就可以显示出“12”,由于交替的速度非常快,人眼看到的就是连续的“12”。 在动态显示程序中,各个位的延时时间长短是非常重要的,如果延时时间长,则会出现闪烁现象;如果延时时间太短,则会出现显示暗且有重影。

三.软件设计

红外自动计数器主要由光电传感检测电路、进出门处理与识别电路、中央处理显

示电路、数码管显示电路,蜂鸣器播报音乐电路组成。鉴于单片机技术比较成熟,且开发过程中可以利用的资源和工具丰富、价格便宜、成本低。故设计用C语言对其编程并烧录到芯片内部,C语言表达和运算能力比较强,且具有很好的可移植性和硬件控制能力。采用KEIL51的C52编译器。KEIL Uvision3是众多单片机应用开发软件中的优秀软件之一,它支持众多不同公司的构架的芯片,集编辑、编译、仿真等于一体,同时还支持PLM,汇编和C语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强的功能。

硬件设计和软件设计是电子设计中必不可少的内容,为了满足设计的功能和指标的要求,我们必须在开始设计的时候就要考虑到硬件和软件的协调;不然不是造成硬件资源的浪费就是增加软件实现时困难和复杂程度,甚至造成信号的断层,即使硬件和软件能单独使用,却不能使它们组成的系统工作。故在设计的过程中必须考虑软硬件的处理能力以及它们的接口是否兼容,实现软硬件的信号过渡。其次设计时硬件之间应尽可能减小联系,只要把必要的信号线相连则可。这样做的优点是:首先,调试

8

时可以减少很多不必要的麻烦,因为电路是相对独立的,故在调整电路参数值时其影响和干扰就小,在满足发射和接收模块的要求后可单独对控制模块进行调整;再者,当出现问题时检查电路就容易缩小问题的范围,使得排错效率高。由于硬件的分离,在软件的调试时就可以单独针对控制模块。

1. 进出方向控制程序

方向的判断,是通过红外光电开关检测到物体的前后顺序不同来判断的,当第一个光电开关先检测到人通过,接着第二个光电开关检测到有人通过,说明有人进门,相反,则有人出门。具体控制程序如下: void direction(void) {

if(dirvalue==0x18)

9

{ }

else if(dirvalue==0x0c) {

if(hongwai2==1) {

num1++; yuyin=1; if(hongwai1==1) dirvalue>>=1; if(hongwai2==1) dirvalue<<=1;

while(hongwai1||hongwai2);

while(hongwai2); dirvalue=0x18; if(num1==99)

num1=99;

yuyin=0;

}

}

else if(dirvalue==0x30) { if(hongwai1==1) { num2++; yuyin=1; while(hongwai1); dirvalue=0x18; if(num2==99)

num2=99;

yuyin=0;} }

}

10

流程图

设计中采用了两组双位共阳数码管,因此,显示函数分别对应display1()和display2()两个函数,在动态显示程序中,各个位的延时时间长短是非常重要的,如果延时时间长,则会出现闪烁现象;如果延时时间太短,则会出现显示暗且有重影。具体程序如下:

void display1(uchar numdis) { uchar shi,ge; shi=numdis/10; ge=numdis;

P0=Tab[shi];

进门数码管加一,蜂鸣器播放音乐 红外开关A有效 红外开关B先有效 红外开关B先 有效 定义方向初值 红外开关A先 有效 方向左移一位 方向右移一位 出门数码管加一,蜂鸣器播放音乐 11