基于AT89S52数字钟的设计与制作
2015-07-30王少炯株洲市工业中等专业学校湖南株洲412008
王少炯(株洲市工业中等专业学校,湖南 株洲 412008)
基于AT89S52数字钟的设计与制作
王少炯
(株洲市工业中等专业学校,湖南 株洲 412008)
采用纯数字集成电路设计制作数字钟电路较复杂,而单片机数字钟只用了较简单的硬件,通过编写C程序可实现完善的功能。
数字钟;AT89S52;C程序、
0 前言
在以前很多杂志上都介绍了数字钟的制作,其电路或者较为复杂,或者所选的单片机很多编程器不支持,不便于初学者自制。本文设计的数字钟具有电路简单、成本低(全部元件近30元)、元件易购、功能全、走时精度高的特点,很适合万能实验板自制。
1 硬件系统设计:
(1)元件清单:
(2)电路原理图如图1。
图1 电路原理图
本数字数字钟采用ATMEL公司的AT89S52为主芯片。
AT89S52为40脚双列直插封装的单片机,与MCS-51单片机产品兼容,8K字节在系统可编程Flash存储器,1000次擦写周期,32个可编程I/O口线,三个16位定时器/计数器,八个中断源,支持ISP,是单片机初学者首选芯片。
为了简化电路安装,数码管分别采用1位(显示星期,也可以采用2位代替),2位(显示时、分、月、日),4位(显示年)共阳极数码管,引脚功能见图,需要注意的是,不同厂家的数码管的引脚可能不同,可用万用表或电池进行测试。
图2 数码管底视图
驱动三极管采用1N5401,也可采用2SC1015等小功率PNP型三极管,但要注意脚位。
功能按钮采用微动开关,S1为位选择,接于P3.2口, S2为增1,接于P3.3口,S3为减1,接于P3.4口。按一次S1按钮,分位闪烁,再按一次,依次为时、星期、日、月、年位闪烁,此时,按S2,或S3按钮,选定位加一或减一,达到调整时钟的目的。在年位闪烁时,再按一次S1,返回正常计时状态。由于P3口内有上拉电阻,所以外部无需上拉电阻。
复位电路,只要求持续2个机器周期,R*C>2us,即可对单片机进行复位。S4为复位按钮,可对数字钟进行初始化复位。
AT89S52 40脚接+5V,20脚接地,31脚为EA/VPP,访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。由于该数字钟的程序、数据都存储在AT89S52内部,所以31脚应接+5V。
18、19脚外接晶体振荡器,本电路采用12M晶振。
P0口分别接数码管a、b、c、d、e、f、g,从P0口输出数码。
P1口接年、月、日数码管阳极,P2口接时、分、星期数码管阳极,P3.0口接秒指示灯,当其为低电平时,发光二极管发光,反之熄灭,用以指示秒。
在设计数字钟过程中,为了调试方便,增加了ISP插座,本人使用的是伟纳ME300B编程器,该编程器使用10针ISP接口。对于其它编程器,只要将插针与AT89S52的6、7、8、9、+5v、地对应连接即可。
2 软件系统设计:
(1)软件流程图如图3。源程序见附件。(2)软件采用C语言编写,原理如下:
图3 软件流程图
1)进行按键扫描中,应去抖,再保存于变量中,确保按键操作的精度和可靠性。由于要对多个时间变量进行操作,设置了位选择功能,每按一次选择按钮,位选择变量加1,在后面的数码管扫描程序中,可根据位选择变量的值,就可对各个时间变量进行调整。在按键扫描过程中要先关中断,操作完后再开中断; 2)定时器0,用于动态扫描数码管,其定时时间不能太大,否则数码管会闪烁。同时在扫描过程中,要根据位选择变量的值确定哪位数码管闪烁,为0时不闪烁,工作于正常计时状态; 3)定时器1, 1/100秒触发一次,100次秒变量加1,60秒后分变量加1,60分后时变量加1,24时后日变量、周变量加1,根据月份,日变量满28,30,31后月变量加1,月变量满12后年变量加1。
3 注意事项:
(1)定时器初值如采用65536-10000=55536(十进制)转化为十六进制为D8F0,会出现走时不准确,本人采用KEIL进行仿真,确定赋值为D912时,走时最精确。
(2)本电路简单,可用万能板搭接,连接导线用漆包线。
(3)组装前先确定数码管、单片机芯片的位置,统筹布局,做到美观、合理,本人采用已坏的数字钟外壳,制作成数字钟见图5,图5。敷铜板面见图图6。
图4
图5
图6
4 功能扩展
(1)在此基础上,再加入SD18B20,修改程序,可显示当前温度。
(2)在电源电路中接入6V蓄电池,保证停电也能正常工作,且能自动对电池充电。
(3)此电路中未加入农历功能,有兴趣的读者可在此基础上添加,如I/O口不够,可采用移位寄存器芯片74HC595进行扩展。
(4)若数字钟的走时精度不高,可更换5PPM精度较高的32768晶体振荡器。