摘要:本文论述了以89C51单片机为核心,通过单片机内部的定时来实现控制延时的功能。采用四键设置,设置分、秒的数值由4个LED数码管显示,延时过程的通、断工作状态由红、绿发光二极管来指示,并可实现多延时设置,根据需要,本装置拟设计十段,适用于可预制的工作过程控制的场合。
关键词:89C51;多段延时;过程控制;开关
1 引言
在生产过程中,利用单片机的中断、计时等程序来设计多段延时开关,达到对电源重复通断的时间预制,适用于可预制工作过程控制。其中核心部分是单片机,用按键电路实现对延时时间的设置,延时时间由单片机的内部定时器部件靠程序控制,执行器的动作用电磁继电器控制交流接触器实现。
2 系统需求分析
用MCS-51系列单片机实现控制插座的延时连通和延时断开的时间。在按键电路中,通电后,系统时钟显示00:00并闪烁,并且绿色LED亮,红色LED灭,表示系统处于等候状态,需要进行按键控制,执行机构处于断开状态。如要转换成需要接通执行机构,通过按确认键来切换。
系统需设置四个按键,各自完成的功能为:
设置/运行键当该键按下后,可以对所需的延时时间进行设置,4个LED数码管均闪烁;再按一下,系统按所设置的多段时间参数进入运行状态,对执行机构实施规定的通、断;四个LED数码管稳定显示时间参数,并逐步按秒减1显示。
分钟加1键:每按一下该按键,则对分钟进行加1并在分钟显示区显示加1后的结果,当加到59后再按一下,则显示00。
秒加1键:同分钟加1键,但加1后的显示区域为秒显示区。
确认键:当时间参数设置好后,按该键,则程序将该时间参数记录在内部的数据存储区域,并切换红绿指示灯。
如需继续输入下一段的时间参数,可以在按确认键后,继续输入时间参数,直到按下设置/运行键为止,或十段时间已经输入完毕。
3 电路硬件设计
根据系统需求分析需要设计的电路硬件有如下模块:单片机基本系统模块、按键模块、LED数码管显示模块、控制执行机构模块等四部分。
3.1 单片机最小硬件系统
对于MCS-51系列单片机,要维持其基本工作,需要对单片机系统提供最小的硬件支持:电源、复位电路、时钟电路、片内外程序存储器选择等。
按上述四点设计的单片机硬件系统如图1所示。
3.2 按键接口电路的设计
按键接口电路比较简单。根据系统需求分析需要,共用到4个按键,分别采用P2.0、P2.1、P2.2和P2.3接口引脚上分别各连接一个按键S0、S1、S2和S3,作为运行/设置、分加1、秒加1和确认等作用
单片机检测4个端口电平的变化,从而确定是哪个键被按下。编程时,按键宜采用查询方法来编程。按上述需求设计的按键电路如图2所示。
3.3 显示电路
由系统需求所描述,要显示时间参数和显示工作状态。
要显示时间参数,需由数码显示单元实现,如LED数码管或LCD液晶屏等;显示状态只要用LED发光二极管指示灯即可。这里为了节省单片机的I/O端口,采用LED数码管动态扫描显示电路,由4个共阳极数码管的8个字段相应的并联接到P0口,各个数码管的公共端接到P2口的P2.4、P2.5、P2.6和P2.7。
要显示工作状态,需由LED红、绿发光二极管来实现,各自串联一只360欧姆的限流电阻正向连接到P3.6和P3.7上即可。
P0口每一位需串接360欧姆限流电阻到数码管各个段;用P2口的低4位作为位控制信号,由于口的驱动能力有限,通过三极管来推动。
按上述要求设计的显示电路如图3所示。
3.4 控制执行机构电路
由系统需求,延时信号由单片机提供,经过按显示时间参数延时后,单片机将从某IO端口输出1或0的信号,控制执行机构动作,如电磁继电器,如果需要控制更大功率的设备,可以由该电磁继电器作中继,继续控制交流接触器去驱动大功率设备。
因单片机的IO口驱动能力有限,不能直接驱动电磁继电器,需通过一个PNP三极管缓冲,作为单片机和电磁继电器的中继器。
所设计的电路如图4所示。
4 软件程序设计
软件程序设计包括系统的初始化程序设计、按键扫描程序设计、数码管动态延时时间的显示程序设计、状态指示程序设计和延时程序设计等,其中重要的是延时程序设计,为本设计的重点。
4.1 初始化程序设计
初始化中采用定时器0方式2自动重装初值,这种方式可以获得非常准确的延时时间。则TMOD为02H;定时器计数值TH0、TL0设置为06H,为250uS。
显示缓冲区设置为分数据和秒数据,用R3和R2表示,初始化时均置位0。
4.2 按键扫描程序设计
在主程序中不断的循环检查按键,当检查到某按键按下时调用相应的那个按键的子程序。共涉及到运行/设置键、“秒”加1键、“分”加1键和确认键共四个。
检查按键时要注意对按键的软件防抖动功能的处理。
4.3 显示程序设计
显示程序包括延时数据的显示和程序运行状态的显示两部分。
LED数码管动态扫描数据显示程序设计。把R3和R2中的分数据和秒数据分别拆分为分十位、分个位、秒十位和秒个位的BCD码,通过查表程序译码,将BCD码转换为LED共阳显示码,分别按时间顺序(如1mS切换)送到相应的LED对应的数据位,开通该位的位端口,则该位显示出相应数值;用同样的方法可显示出其余三位。
由于在每一位显示时其他三位均不显示,但是切换时间很快,如1mS,显示一轮四个数据仅需4mS,所以对于人的眼睛来说感觉到的是同时显示的。
运行状态时显示程序设计。该部分程序功能是根据设置情况启动运行时显示状态和当定时减数据到0时改变显示红、绿LED发光二极管。
当需要显示红色LED发光二极管时用下列两条指令:
CLR P3.6
SETB P3.7
当需要显示绿色LED发光二极管时用下列两条指令:
SETB P3.6
CLR P3.7
控制执行机构程序设计。控制执行机构程序设计只要对P1.0取反,其原来为高电平的执行机构不动作的,就被修改为动作,而原来处于动作的,则取反后就不动作了。因此程序非常简单,仅一条指令:
CPL P1.0;取反
4.4 延时程序设计
延时程序是本文要论述的重点,由初始化程序设计说明可知,每次定时中断时间间隔为250uS,而1S为4000个中断次数,需要两个计数单元来保存1S信息;设采用R5、R4,每次250uS中断对R4加1,R4每达到200对R5加1,R5达到20时则1S到;而1S到时对显示缓冲区减1,则看到的时间显示值减1,当分和秒都减到为0时对P1.0口取反,使原来为断开的变为导通,原来导通的变为断开。并取下一个设置的时间值从头开始再次延时,从而实现多段重复定时的功能。
以下叙述有关定时器中断的程序设计。
其定时器0的中断的中断服务程序为:
TIMER0_INT:;进入250uS中断服务程序
INC R4;250uS的次数加1
CJNE R4,#200,TIMER0_RETI;250uS的次数为200吗?不是则返回
MOV R4,#0;是的,已经达到200次,为50000uS,次数变0
INC R5;50000uS的次数加1
CJNE R5,#20,TIMER0_RETI;50000uS的次数20吗?不是则返回
MOV R5,#0;是的,已经达到20次,为1000000uS即1S,次数变0
DEC R2;秒计时单元减1,实现倒计时
CJNE R2,#0FFH,TIMER0_RETI;减1后比0还小吗?不是则返回
MOV R2,#59;是的,比0还小,秒计时单元暂时变为59,向上借1
DEC R3;分计时单元减1,实现倒计时
CJNE R3,#0FFH,TIMER0_RETI;减1后比0还小吗?不是则返回
CPL P2.0;是的,减1为负数,表示定时时间到,切换执行机构状态
CPL P3.6;定时时间到,切换红色LED发光二极管状态
CPL P3.7;定时时间到,切换绿色LED发光二极管状态
LCALL NEXT_TIMER;定时时间到,取时间排队区域中下一个延时时间
TIMER0_RETI:
RETI;定时器0终端服务程序的返回
最终整个电路实现的结果为:在限定的时间范围内,执行机构会按照设置的时间,按时导通和断开,相应的LED指示灯会按时间点亮和熄灭,数码管上也会显示相应的导通时间和断开时间。
并且,定时时间到,系统会自动取下一个设置的延时时间来重新延时。
参考文献
[1]何立明.MCS-51系列单片机应用系统设计.北京:北京航空航天大学出版社,1990.
[2]陈宝江.MCS单片机应用系统实用指南.北京:机械工业出版社,1997.
[3]戴付生.基础电子电路设计与实践.北京:国防工业出版社,2002.