韓劉宇
(天津工業(yè)大學(xué) 電子與信息工程學(xué)院通信工程專業(yè) 300384)
基本設(shè)計要求
(1)單片機控制日歷時鐘芯片實現(xiàn)年份、月份、日期、星期、時間信息的獲取。
(2)在LCD上對年份、月份、日期、星期、時間信息進行顯示。
(3)可以對年份、月份、日期、星期、時間進行修改。
(4)具有掉電后時間信息不丟失的功能。
發(fā)揮部分
(1)具有鬧鐘功能。可設(shè)置鬧鈴時間,當鬧鈴時間到時,進行鬧鈴。通過按鍵可解除鬧鈴。
(2)具有整點報時功能。
(3)程序固化到單片機中,并且可直接進行程序下載和更新。
本電子鐘由單片機、定時、顯示、按鍵、定時提醒、ISP在線編程6部分組成。產(chǎn)品以AT89S52單片機、DS12C887時鐘芯片為核心,顯示部分采用LCD1602,使用4個按鍵和1蜂鳴器,加上ISP在線編程模塊。DS12C887時鐘芯片產(chǎn)生時鐘信號和存放鬧鈴數(shù)據(jù),其精度和可靠性高,在單片機掉電狀態(tài)下能正確走時、保存鬧鈴數(shù)據(jù)長達10年,故能實現(xiàn)停電重起后定時設(shè)計不變的關(guān)鍵設(shè)計指標。AT89S52單片機實時獲取DS12C887的時間和鬧鈴數(shù)據(jù),驅(qū)動LCD和蜂鳴器。顯示部分的LCD有高亮度,低成本等諸多優(yōu)點。蜂鳴器作鬧鈴提示切合實際、直觀。按鍵方面采用軟件消抖,減少硬件電路的同時增加了可靠性。本產(chǎn)品完全達到設(shè)計要求,輔助的ISP在線編程讓產(chǎn)品具有強大的擴展功能,使其不僅僅是一個電子鐘,更是一個單片機試驗平臺。
DS12C887時鐘芯片能夠產(chǎn)生世紀、年、月、日、時、分、秒等信息,同時 DS12C887時鐘芯片中自帶有鋰電池,外部掉電時,通過鋰電池的作用其內(nèi)部時間信息還能夠保持相當長的時間;時間記錄分為十二小時制和二十四小時制兩種方式。在十二小時制模式中,AM和PM用來分別表示上午和下午;時間的表示方法也有兩種,利用二進制數(shù)表示或利用BCD碼表示;DS12C887時鐘芯片帶有 128字節(jié)的 RAM,其中有113字節(jié)通用 RAM用來給用戶使用,11字節(jié)的RAM是用來存儲時間信息的,4字節(jié) RAM是用來存儲 DS12C887的控制信息的,被我們稱之為控制寄存器。
3.2.1 主要特性
單片機AT89S52是ATMEL公司生產(chǎn)的低電壓、高性能COMS 8位單片機,它有128Byte RAM、8KByte可編程FLASH ROM,指令系統(tǒng)與MCS-51系列兼容。采用KEILC51編譯軟件,PROTUES仿真平臺,能方便實現(xiàn)程序的仿真。ISP在線編程,能方便的更新程序??蓪x用的單片機特點進行描述,可畫出單片機最小系統(tǒng)并描述電路連接。
3.2.2 單片機引腳說明
AT89S52是采用40個引腳封裝的雙列直接 DIP結(jié)構(gòu),40個引腳中,外置石英振蕩器的時鐘線有兩根,正電源和地線有兩根,還有32個 I/O口,中斷口線與P3口線是復(fù)用的。我們對引腳的功能加以說明:
·Pin20:是接地腳。
·Pin40:是正電源腳,接+5V電源,用來正常工作或?qū)ζ瑑?nèi)EPROM燒寫程序時。
·Pin19:是時鐘XTAL1腳,為片內(nèi)振蕩電路輸入端。
·Pin18:是時鐘XTAL2腳,為片內(nèi)振蕩電路輸出端。時鐘有兩種方式,方式一為片內(nèi)時鐘振蕩方式,但需在18和19兩個引腳外接石英晶體和振蕩電容。方式二為外部時鐘方式,即將XTAL1接地,將外部時鐘的信號從XTAL2腳輸入。
·輸入輸出 (I/O)Pin32-Pin39引腳是 P0.0-P0.7的輸入輸出腳,Pin1-Pin8引腳是 P1.0-P1.7的輸入輸出腳,Pin21-Pin28引腳為 P2.0-P2.7輸入輸出腳,Pin10-Pin17引腳為P3.0-P3.7輸入輸出腳,上述的輸入輸出腳的功能是:
P3口(10腳~17腳):為8位準雙向 I/O口,由于高阻狀態(tài)不能在這種接口輸出中產(chǎn)生,輸入也不能鎖存,故不是真正的雙向 I/O口。 P3口能驅(qū)動 (吸收或輸出電流)4個TTL負載。P除了作為一般的準雙向通用I/O口使用外,p3口每個引腳還有第二功能。P3口的八條線都被我們定義有第二功能[6],如表4.1所列。
P2口(21腳~28腳):為8位準雙向 I/O口。當我們訪問外部存儲器時,它可以被我們作為高8位地址總線 送出高8位地址。P2可以驅(qū)動(吸收或輸出電流)4個TTL的負載。
P1口(1腳~8腳):為 8位準雙向 I/O口。P1口能驅(qū)動4個TTL負載。
P0口(32腳~39腳):不同于其他的三個端口,它為雙向8位三態(tài)I/O口,外接存儲器與地址總線的低八位及數(shù)據(jù)的總線進行復(fù)用,8個TTL負載能以吸收電流的方式被驅(qū)動。
P3引腳第二功能:3.0 RXD(串行口的輸入端)
3.1 TXD(串行口的輸出端)
3.2 INT0(外部中斷0請求輸入端,低電平的時候有效)
3.3 INT1(外部中斷0請求輸入端,低電平的時候有效)
3.4 T0(定時器/計數(shù)器0的技數(shù)脈沖輸入端)
3.5 T1(定時器/計數(shù)器0的技數(shù)脈沖輸入端)
3.6 WR(片外數(shù)據(jù)存儲器寫選通信號輸出端,低電平的時候有效)
3.7 RD(片外數(shù)據(jù)存儲器寫選通信號輸出端,低電平的時候有效)
·Pin9:RESET/Vpd為復(fù)位信號復(fù)用腳,單片機通電時,時鐘電路就開始工作,在RESET引腳上產(chǎn)生24個時鐘周期以上的高電平,則系統(tǒng)即會初始復(fù)位。初始化后,程序計數(shù)器 PC會指向 0000H,P0-P3輸出口都為高電平時,則堆棧指鐘就會寫入 07H,而其它專用的寄存器被清“0”。當RESET從高電平下降為低電平后,系統(tǒng)就會從 0000H開始執(zhí)行程序。然而,初始復(fù)位并不使RAM(包括工作寄存器R0-R7)的狀態(tài)發(fā)生變化,當單片機復(fù)位后它的狀態(tài)為:
·P0~P3=FFH,各口可用于輸出,也可用于輸入;
·SP=07H,第一個入棧內(nèi)容將寫入08H單元;
·IP、IE和 PCON的有效位為 0,各中斷源處于低優(yōu)先級且均被關(guān)斷,串行通訊的波特率不加倍;
·PSW=00H,當前工作寄存器為0組。
·Pin30:ALE/PROG是訪問外部程序器時,ALE輸出的用來鎖存地址的低位字節(jié)。當訪問內(nèi)部程序存儲器的時候,ALE端將會有個 以1/6時鐘頻率為周期的正脈沖信號,此信號是用于識別單片機工作與否的,我們也可以把它當作一個時鐘向外輸出。還有一個特點就是,當我們訪問外部程序存儲器,ALE會自動跳過一 個脈沖。而如果單片機是EPROM的話 ,在其編程的時候,PROG會用于輸入編程的脈沖。
·Pin29:PESN是訪問外部程序存儲器時,輸出負脈沖選通信號的引腳,PC其16位的地址數(shù)據(jù)會出現(xiàn)在P0和P2中,外部程序存儲器會把其指令數(shù)據(jù)放到P0口的上面,而CPU負責讀入執(zhí)行。
·Pin31:EA/Vpp是程序存儲器內(nèi)外部選通線,8051和8751單片機中,其內(nèi)部有 4kB的程序存儲器,當EA是高電平而且程序地址不大于4kB時,讀取的就是內(nèi)部程序存儲器的指令數(shù)據(jù),而超過4kB地址則讀取的就是外部指令的數(shù)據(jù)。但是如果EA是低電平,不管地址的大小,都是讀取外部程序存儲器的指令。顯而易見,對于內(nèi)部沒有程序存儲器 8031,EA端就必須要接地。
?
振蕩器是數(shù)字鐘的核心。振蕩器的穩(wěn)定度及頻率的精確度決定了數(shù)字鐘計時的準確程度,通常選用石英晶體構(gòu)成振蕩器電路。石英晶體振蕩器的作用是產(chǎn)生時間標準信號。
本電路采用1602LCD,由于數(shù)碼管只能顯示數(shù)字數(shù)碼管顯示內(nèi)容單一,液晶則比較豐富,而這個實驗中,要求功能較多,為了使電路顯示的更清晰明了,本實驗最終決定采用1602LCD 顯示。且液晶顯示已占居社會主流,優(yōu)勢明顯。
鑒于使用中斷電路會增加硬件電路的復(fù)雜度,本電路采用獨立按鍵的方法,只需在程序中加入掃描程序即可。其中P1.4接按鍵1,P1.5接按鍵2,P1.6接按鍵3,P1.7接按鍵4。其中按鍵1為選擇鍵,通過按鍵1可以將光標移動到要調(diào)節(jié)的選項;按鍵2為加鍵,通過按鍵2可以調(diào)整時間和鬧鐘的各項數(shù)值加一;按鍵3為減鍵,通過按鍵3可以調(diào)整時間和鬧鐘的各項數(shù)值減一;按鍵4為鬧鐘,通過按鍵4可以調(diào)節(jié)鬧鐘。
void main()//主函數(shù)
{
init();//調(diào)用初始化函數(shù)
while(1)
{
keyscan();//按鍵掃描
if(flag_ri==1)//當鬧鐘中斷時進入這里
{
di();
delay(100);
di();
delay(500);
}
if(flag==0&&flag1==0)//正常工作時進入這里
{
keyscan();//按鍵掃描
year=read_ds(9);//讀取12C887數(shù)據(jù)
month=read_ds(8);
day=read_ds(7);
//week=read_ds(6);
shi=read_ds(4);
fen=read_ds(2);
miao=read_ds(0);
if(fen/10==0&&fen%10==0&&miao/10==0&&miao%10==0)di();
week=GetWeekFromDay(year,month,day);
write_sfm(10,miao);//送液晶顯示
write_sfm(7,fen);
write_sfm(4,shi);
write_week(week);
write_nyr(3,year);
write_nyr(6,month);
write_nyr(9,day);
}
}
}
本數(shù)字時鐘采用ISP下載線進行下載和供電。首先將程序下載到AT89S52芯片中。打開開關(guān)將看到開機初始畫面,左側(cè)四個按鍵依次設(shè)為 K1、K2、K3、K4,按K1鍵,將會看到光標依次挪動到秒、分、時、日、月、年,當光標移動到某個選項,例如“分”選項:按下K2,該項數(shù)值則加一,按下K3,該項數(shù)值則減一;若調(diào)節(jié)年月日選項時,調(diào)節(jié)完畢后會自動計算出該日為星期幾,并且顯示在LCD屏幕上。當時鐘處于正常運行狀態(tài)時,按下K4鍵,界面將轉(zhuǎn)到鬧鈴調(diào)節(jié)界面,此時按照時鐘的調(diào)節(jié)方法,設(shè)定鬧鈴。每當有按鍵按下時,蜂鳴器將會伴隨響聲,當時中達到整點時,蜂鳴器也將會有提示音(整點報時功能),當時鐘的時間到達設(shè)定的鬧鈴時間,蜂鳴器將會發(fā)出連續(xù)的鳴叫聲,直至按下任意鍵來解除此鬧鈴。實物效果圖:
整體電路圖:
[1] 倪云峰.單片機原理與應(yīng)用【M】.西安:西安電子科技大學(xué)出版社,2009.
[2] 梁潔婷.單片機原理與應(yīng)用【M】.北京:高等教育出版社,2002.
[3] 林國清,李見為,王崇文.一種新型日歷時鐘芯片[J].國外電子元器件,2002(3):61-62.