基于单片机的光电计数器_光控电路 下载本文

图3-4 报警电路图 6,软件程序的设计

系统上电初始化之后,主程序不断地扫描键盘和显示程序;同时判断外部中断标志是否有效。如果外部中断标志有效,则调用光电计数处理子程序,刷新数码管的显示值 7,系统控制主程序设计

定义蜂鸣器接口P3.7,初始状态为0,蜂鸣器不报警,当有高电平触发P3.7时,蜂鸣器开始报警。当下一个脉冲是1时外部中断T0则产生中断,计数器停止加计数。 8,系统初始化子程序设计:

设定外部中断T0的标志位置0即中断处于关闭状态,蜂鸣器控制标志位也置0,处于关闭状态,系统初始化流程图如图3-5所示。

图3-5 系统初始化流程图 9,显示子程序设计

定义数码管的段码表、位选码,定义计数器的显示缓存区,在统计过程中,当一个信号传到单片机中,系统调用延时子程序进行延时,计数器对十位和个位进行计数判断,将数据通过数码管显示出来,显示子程序的电路图如图3-6所示。

图3-6 动态显示电路流程图 10,光电计数处理子字程序设计

外部中断T0初始化后处于关闭状态,当其中断标志有效时进行加计数,外部中断T0进行加计数且判断计数器是否达到10,若等于10则KEYBOARD=1蜂鸣器报警。最后将计数值通过数码管显示,其流程图如图3-7所示。

SHAPE \\* MERGEFORMA

T

3-7 光电计数处理子程序流程图 四、系统调试 4.1电路的优缺点

1.用单片机作为设计的核心系统有点易于实现自动化控制、计数精确。而电路采用数码管动态显示电路直观性比较好、具有一定的抗干扰能力且比较容易实现级联,以达到扩大计数范围的作用,同时电路具有很强的实用性。

2.电路的不足由高亮光电管和硅光电池组成的信号产生电路灵敏度稍差,在实际环境中光线的接受还是收到影响,导致电路反应有点迟钝。

3.电路刚开始有些地方考虑的欠佳,线路排布个人觉得并不十分完美。 4.2电路的改进方法

1、断电检查:硬件电路及对照原理图检查硬件电路。

2、整个调试过程分层次进行,先调试单元电路,再调试模块电路,最后系统联调。 3、通电检查:入正常电压,观察各模块工作波形及工作电压有无异常。 4、单元电路调试:利用信号源或其他实验仪器判断各单元电路的工作状态。

5、整机联调:从最前端到末级进行统调,检查各级动态信号工作情况,分析是否满足设计要求。

6、参数计算和器件选择: 五、系统程序设计 用C语言进行编程: #include

#define uchar unsigned char #define uint unsigned int uchar code tab[]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; sbit SPK=P3^7; sbit key1=P1^0; sbit key2=P1^1; uchar n,a,b; void delay(uchar z) {

uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }void scan() {

if(key1==0) {

delay(5); if(key1==0) {

while(!key1); n++; if(n==100) n=0; }