王少炯(株洲市工業中等專業學校,湖南 株洲 412008)
基于AT89S52數字鐘的設計與制作
王少炯
(株洲市工業中等專業學校,湖南 株洲 412008)
采用純數字集成電路設計制作數字鐘電路較復雜,而單片機數字鐘只用了較簡單的硬件,通過編寫C程序可實現完善的功能。
數字鐘;AT89S52;C程序、
在以前很多雜志上都介紹了數字鐘的制作,其電路或者較為復雜,或者所選的單片機很多編程器不支持,不便于初學者自制。本文設計的數字鐘具有電路簡單、成本低(全部元件近30元)、元件易購、功能全、走時精度高的特點,很適合萬能實驗板自制。
(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、地對應連接即可。
(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。
(1)定時器初值如采用65536-10000=55536(十進制)轉化為十六進制為D8F0,會出現走時不準確,本人采用KEIL進行仿真,確定賦值為D912時,走時最精確。
(2)本電路簡單,可用萬能板搭接,連接導線用漆包線。
(3)組裝前先確定數碼管、單片機芯片的位置,統籌布局,做到美觀、合理,本人采用已壞的數字鐘外殼,制作成數字鐘見圖5,圖5。敷銅板面見圖圖6。

圖4

圖5

圖6
(1)在此基礎上,再加入SD18B20,修改程序,可顯示當前溫度。
(2)在電源電路中接入6V蓄電池,保證停電也能正常工作,且能自動對電池充電。
(3)此電路中未加入農歷功能,有興趣的讀者可在此基礎上添加,如I/O口不夠,可采用移位寄存器芯片74HC595進行擴展。
(4)若數字鐘的走時精度不高,可更換5PPM精度較高的32768晶體振蕩器。