王少炯(株洲市工業(yè)中等專業(yè)學(xué)校,湖南 株洲 412008)
基于AT89S52數(shù)字鐘的設(shè)計與制作
王少炯
(株洲市工業(yè)中等專業(yè)學(xué)校,湖南 株洲 412008)
采用純數(shù)字集成電路設(shè)計制作數(shù)字鐘電路較復(fù)雜,而單片機數(shù)字鐘只用了較簡單的硬件,通過編寫C程序可實現(xiàn)完善的功能。
數(shù)字鐘;AT89S52;C程序、
在以前很多雜志上都介紹了數(shù)字鐘的制作,其電路或者較為復(fù)雜,或者所選的單片機很多編程器不支持,不便于初學(xué)者自制。本文設(shè)計的數(shù)字鐘具有電路簡單、成本低(全部元件近30元)、元件易購、功能全、走時精度高的特點,很適合萬能實驗板自制。
(1)元件清單:
(2)電路原理圖如圖1。
圖1 電路原理圖
本數(shù)字?jǐn)?shù)字鐘采用ATMEL公司的AT89S52為主芯片。
AT89S52為40腳雙列直插封裝的單片機,與MCS-51單片機產(chǎn)品兼容,8K字節(jié)在系統(tǒng)可編程Flash存儲器,1000次擦寫周期,32個可編程I/O口線,三個16位定時器/計數(shù)器,八個中斷源,支持ISP,是單片機初學(xué)者首選芯片。
為了簡化電路安裝,數(shù)碼管分別采用1位(顯示星期,也可以采用2位代替),2位(顯示時、分、月、日),4位(顯示年)共陽極數(shù)碼管,引腳功能見圖,需要注意的是,不同廠家的數(shù)碼管的引腳可能不同,可用萬用表或電池進(jìn)行測試。
圖2 數(shù)碼管底視圖
驅(qū)動三極管采用1N5401,也可采用2SC1015等小功率PNP型三極管,但要注意腳位。
功能按鈕采用微動開關(guān),S1為位選擇,接于P3.2口, S2為增1,接于P3.3口,S3為減1,接于P3.4口。按一次S1按鈕,分位閃爍,再按一次,依次為時、星期、日、月、年位閃爍,此時,按S2,或S3按鈕,選定位加一或減一,達(dá)到調(diào)整時鐘的目的。在年位閃爍時,再按一次S1,返回正常計時狀態(tài)。由于P3口內(nèi)有上拉電阻,所以外部無需上拉電阻。
復(fù)位電路,只要求持續(xù)2個機器周期,R*C>2us,即可對單片機進(jìn)行復(fù)位。S4為復(fù)位按鈕,可對數(shù)字鐘進(jìn)行初始化復(fù)位。
AT89S52 40腳接+5V,20腳接地,31腳為EA/VPP,訪問外部程序存儲器控制信號。為使能從0000H 到FFFFH的外部程序存儲器讀取指令,EA必須接GND。為了執(zhí)行內(nèi)部程序指令,EA應(yīng)該接VCC。由于該數(shù)字鐘的程序、數(shù)據(jù)都存儲在AT89S52內(nèi)部,所以31腳應(yīng)接+5V。
18、19腳外接晶體振蕩器,本電路采用12M晶振。
P0口分別接數(shù)碼管a、b、c、d、e、f、g,從P0口輸出數(shù)碼。
P1口接年、月、日數(shù)碼管陽極,P2口接時、分、星期數(shù)碼管陽極,P3.0口接秒指示燈,當(dāng)其為低電平時,發(fā)光二極管發(fā)光,反之熄滅,用以指示秒。
在設(shè)計數(shù)字鐘過程中,為了調(diào)試方便,增加了ISP插座,本人使用的是偉納ME300B編程器,該編程器使用10針I(yè)SP接口。對于其它編程器,只要將插針與AT89S52的6、7、8、9、+5v、地對應(yīng)連接即可。
(1)軟件流程圖如圖3。源程序見附件。(2)軟件采用C語言編寫,原理如下:
圖3 軟件流程圖
1)進(jìn)行按鍵掃描中,應(yīng)去抖,再保存于變量中,確保按鍵操作的精度和可靠性。由于要對多個時間變量進(jìn)行操作,設(shè)置了位選擇功能,每按一次選擇按鈕,位選擇變量加1,在后面的數(shù)碼管掃描程序中,可根據(jù)位選擇變量的值,就可對各個時間變量進(jìn)行調(diào)整。在按鍵掃描過程中要先關(guān)中斷,操作完后再開中斷; 2)定時器0,用于動態(tài)掃描數(shù)碼管,其定時時間不能太大,否則數(shù)碼管會閃爍。同時在掃描過程中,要根據(jù)位選擇變量的值確定哪位數(shù)碼管閃爍,為0時不閃爍,工作于正常計時狀態(tài); 3)定時器1, 1/100秒觸發(fā)一次,100次秒變量加1,60秒后分變量加1,60分后時變量加1,24時后日變量、周變量加1,根據(jù)月份,日變量滿28,30,31后月變量加1,月變量滿12后年變量加1。
(1)定時器初值如采用65536-10000=55536(十進(jìn)制)轉(zhuǎn)化為十六進(jìn)制為D8F0,會出現(xiàn)走時不準(zhǔn)確,本人采用KEIL進(jìn)行仿真,確定賦值為D912時,走時最精確。
(2)本電路簡單,可用萬能板搭接,連接導(dǎo)線用漆包線。
(3)組裝前先確定數(shù)碼管、單片機芯片的位置,統(tǒng)籌布局,做到美觀、合理,本人采用已壞的數(shù)字鐘外殼,制作成數(shù)字鐘見圖5,圖5。敷銅板面見圖圖6。
圖4
圖5
圖6
(1)在此基礎(chǔ)上,再加入SD18B20,修改程序,可顯示當(dāng)前溫度。
(2)在電源電路中接入6V蓄電池,保證停電也能正常工作,且能自動對電池充電。
(3)此電路中未加入農(nóng)歷功能,有興趣的讀者可在此基礎(chǔ)上添加,如I/O口不夠,可采用移位寄存器芯片74HC595進(jìn)行擴展。
(4)若數(shù)字鐘的走時精度不高,可更換5PPM精度較高的32768晶體振蕩器。