王少炯


摘 要:采用純數字集成電路設計制作數字鐘電路較復雜,而單片機數字鐘只用了較簡單的硬件,通過編寫C程序可實現完善的功能。
關鍵詞:數字鐘;AT89S52;C程序、
0 前言
在以前很多雜志上都介紹了數字鐘的制作,其電路或者較為復雜,或者所選的單片機很多編程器不支持,不便于初學者自制。本文設計的數字鐘具有電路簡單、成本低(全部元件近30元)、元件易購、功能全、走時精度高的特點,很適合萬能實驗板自制。
1 硬件系統設計:
(1)元件清單:
(2)電路原理圖如圖1。
本數字數字鐘采用ATMEL公司的AT89S52為主芯片。
AT89S52為40腳雙列直插封裝的單片機,與MCS-51單片機產品兼容,8K字節在系統可編程Flash存儲器,1000次擦寫周期,32個可編程I/O口線,三個16位定時器/計數器,八個中斷源,支持ISP,是單片機初學者首選芯片。
為了簡化電路安裝,數碼管分別采用1位(顯示星期,也可以采用2位代替),2位(顯示時、分、月、日),4位(顯示年)共陽極數碼管,引腳功能見圖,需要注意的是,不同廠家的數碼管的引腳可能不同,可用萬用表或電池進行測試。
驅動三極管采用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語言編寫,原理如下:
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 功能擴展
(1)在此基礎上,再加入SD18B20,修改程序,可顯示當前溫度。
(2)在電源電路中接入6V蓄電池,保證停電也能正常工作,且能自動對電池充電。
(3)此電路中未加入農歷功能,有興趣的讀者可在此基礎上添加,如I/O口不夠,可采用移位寄存器芯片74HC595進行擴展。
(4)若數字鐘的走時精度不高,可更換5PPM精度較高的32768晶體振蕩器。endprint