一、系统工作原理
下图是一款1分钟-24小时定时时间可调的时间控制器,其印制电路板如右图所示。该控制器以AT89C2051单片机为核心,采用12MHz晶振,用内部定时器TO产生5ms时钟信号,由软件处理成分钟、小时段码数据,从串口RXD(P3.0)、TXD(P3.1)经IC2(74HC164)进行串/并转换后,送四位共阳极数码管Ul~U4的a~h端。显示采用动态扫描方式,P14~P1.7分别用作小时十位U1、个位U2,分钟十位U3、个位U4的位选,74HC04用作数码管的位驱动。U2的小数点(h段)用作秒闪。控制器以5s为一个显示周期,前3s显示已走时间,后2s显示剩余时间。显示剩余时间时,发光二极管LED1点亮。Sl、S2、S3用于定时时间调整,Sl为设置键Set,S2为小时减键H-、S3为分钟减键M-。Pl.0、Pl.l内部无上拉电阻,所以必须外接上拉电阻。
上电后,P3.7口输出高电平,继电器K得电,触点A、B闭合,用电器从插座处得电工作。当定时时间到时,P3.7口输出低电平,继电器K线圈失电,触点A、B断开,用电器断电,停止工作,同时TO停止计数,不再走时,数码管显示设定的定时时间。继电器应根据用电器的功率进行选择,若用电器的功率较大,应考虑加交流接触器。每次开机或按S4键复位后从0:00开始走时,若不进行设置则用电器工作时间为默认的8小时30分。按Sl键一次,可进入定时时间调整状态(此时数码管显示8.30,秒不闪烁)。在此状态下按住s2键不放,则定时时间的小时位连续减1,减至0后变成23;若按住S2键不放,则定时分位连续减1.减至1后变成60;再按一次Sl键回到正常走时状态。下面重点介绍显示电路中单片机串口工作方式0在扩展并行输出口时的应用。

二、串口部分硬件电路
51单片机串口的工作方式0称为同步移位寄存器输入输出方式,常用来扩展并行I/0口。此时,串行数据通过RXD(P3.0)进行输入或输出,TXD (P3.1)用于输出同步移位脉冲。本例中,AT89C2051的RXD (P3.0)脚接74HC164的A、B(①、②脚),TXD (P3.1)接74HC164的CLK⑧脚。在方式0中,当串口用作输出时,只要向发送缓冲器SBUF写一个字节的数据,串口就将此8位数据由低位到高位以fs0c/12的固定波特率从RXD依次送入74HC164,同时由TXD输出移位脉冲信号。在数据发送前,中断标志TI必须清零。8位数据发送完毕后,TI自动置1并请求中断。如果要继续发送数据,必须用软件将TI清零。数据发送完毕后,既可在串中断处理程序中选通对应数码管进行显示,也可在查询到TI=1时选通相应数码管显示。本例中采用的是查询法。
74HC164内部有8个D触发器,用于实现数据的串行移位。
74HC164的A、B脚为串行数据输入端,按逻辑“与”运算规律输入信号,若输入信号相同可并接。
CLK脚为时钟输入端,接串口的TXD端。当时钟信号的上升沿加到CLK脚时,移位寄存器移一位。8个时钟脉冲过后,8位二进制数据全部移入74HC164。MR⑨脚为复位端,为低电平时,移位寄存器各位清零;为高电平时时钟脉冲才起作用。数据输入74HC164时,首先变化的是Q0,即最先送到74HC164的数据被移到Q7,最后一位数据移至Q0。故接线时,74HC164的Q0~Q7脚应分别连接数码管的h~a段,这一点一定不要搞错。
三、程序设计
1.设计要点
程序用C语言编写。受篇幅所限,这里只介绍程序设计中的要点。
(1)串口工作方式0的程序为:
SC0N=0x00;/★该语句放在卞程序开始,该语句在设定串口工作于方式0的同时也将发送中断标志TI清零,以备发送第一组数据。★/
(2)数据发送程序为:
SBUF=DSEG[x];/★向发送缓冲器SBUF写数据。此例中,0~9的字形码放于DSEG数组中,x代表待显示数字。★/
While(TI==0);/*8位数据没发完,等待。即查询8位数据是否发送完毕。★/
TI=0;/★8位数据发完,清T1,准备发送下一字节★/
(3)定时时间中,小时t_h0ur的调整范围为0~23,分钟t_min为1~60。
当t_h0ur递减至0时,为确保由0变为23.要求t_h0ur的数据类型必须为signed char,不能和tjmn一样定义成unsigned char型。
(4)定时剩余时间的计算程序为:
if(min<=t_min){sym=t_rrun -min;syh =t_h 0ur-h0ur;}/★h0ur、min分别为走时小时、分钟,t_h0ur、t_min为定时小时、分钟,syh、sym为剩余小时、分钟。★/else{sym=(60-min+t_min);syh=t_h0ur-h0ur-l;}
(5)分时显示程序为:
if(sec%5<=2)/★前3s显示走时时间,LED1不亮★/
f P3_5=1;
drive(h0ur,min);)
else {P3_5=0; dispsy();}/★后2s显示定时剩余时间,LED1亮★/
(6)定时器T0计数初值的计算:系统采用12MHz晶振,T0工作于方式1,理论上产生,ms定时计数初值应为65536-5000,当5ms计数单元dEDA计到200时正好为Is。实际使用中,因元器件误差及软件运行耗时等原因,经实测将产生5ms定时计数初值取为65536-5225,deda的值定为201。
2.源程序
源程序清单如下:
#include <AT89X51.H>/★包含器件配置文件★/




四、元器件装
配电路板尺寸为58mm×100mm,在其左下、右下、中部各有1个φ3mm的安装孔。左下方的焊盘A、B对应原理图中的A、B点;左侧中部的两个焊盘c、D接降压变压器的次级线圈。J1、J2为两条跳线。
注意:电解电容、二极管、三极管、集成电路等不要接错极性。
微动开关用的是普通彩色电视机前面板上的调整用微动开关。另外,最好先安装矮的元件再安装高的、最好用既能插两芯插头也能插三芯插头的组合式插座,以便插不同的用电器。建议将电路板用三颗螺钉固定在盒子右侧,变压器固定在左上侧,插座固定在左下侧。