方案和最終目標:
1.整體功能達到市售電子日歷效果,顯示內容包括年、月、日、星期、時、分、秒、室溫。
2.實時時鐘芯片有兩種:DS12C887、DS1302。學習和使用過程中可進行選擇。
3.數碼管控制采用MAX7219專用掃描驅動芯片。
4.電路板上留有PS/2鍵盤接口,用于調節(jié)當前時間、數碼管顯示亮度、鬧鈴時間。這一點和普通電子日歷有明顯區(qū)別,畢竟我們做的是一個有點專業(yè)要求的電子鐘。
5.電路板上安裝有繼電器,可作為簡單的時間控制或溫度控制裝置。
6.設計出原理圖和PCB圖,找廠家制出PCB,編程實現預期效果。
下面對整個電子鐘的設計和制作過程做一個圖示說明,希望對想做這方面畢業(yè)設計的學生朋友有所幫助。
主要元器件選用
1.單片機
就用AT89S51吧,太方便了,只要在側面留有ISP插針接口,外接編程器就可以方便地在線改寫調試程序了。ISP編程插針設置如圖1所示。
2.實時時鐘芯片
有DS12C887、DS1302兩種。前者內部自帶鋰電池,后者要外接后備電池,二者的實物對比如圖2所示。DS12C887的最大特點是有15種頻率可編程方波輸出功能,在某些情況下可作為簡易的方波發(fā)生器,電路板上也設有輸出拉環(huán)和插針,便于不同場合的連接需求,如圖1中的標示。
3.PS/2接口
PS/2接口就是電腦主機后面的鍵盤或鼠標接口,實物如圖3所示,共有6個引腳,實際只用4個,分別是電源正、電源負、數據腳、時鐘腳,各插孔功能標識見圖4。
4.MAX7219
很方便的一款專用數碼管驅動芯片,與單片機之間采用三線連接,串行傳送數據,就是對電源要求高一些,在緊靠它的地方加上兩個電容就能使其穩(wěn)定工作,實物見圖5。
5.溫度傳感器
DS18B20是最佳選擇,體積小巧,與單片機連接簡單,數據處理方便,實物如圖6所示。
原理圖設計
經過試驗板搭接和綜合考慮,各器件與單片機各引腳的連接關系如下:
1.AT89S51的P1.5、P1.6、P1.7用于ISP編程,不作他用。
2.DS1302的第7腳(SCLK)、第6腳(I/O)、第5腳(RST)分別接AT89S51的P1.0、P1.1、P1.2。
3.MAX7219的第1腳(DIN)、第12腳(CS)、第13腳(SCL)分別接AT89S51的P2.0、P2.1、P2.2。
4.DS12C887的第4腳(AD0)—第11腳(AD7)接AT89S51的P0.0~P0.7、第13腳(/CS)接P2.7、第14腳(AS)接ALE、第15腳(R/W)接P3.6、第17腳(DS)接P3.7、第19腳(IRQ)接P3.3。
5.LED、繼電器、DS18B20分別占用P3.0、P1.4、P1.3。
設計原理圖如圖7所示。
PCB設計
這里PCB設計沒有按照傳統(tǒng)的設計順序,即由原理圖到網絡表再到PCB,主要是因為有的元件沒有現成的封裝,相比之下對于這個不太復雜的電路,手工布線更為靈活。經過半個多月的純手工設計,最終的PCB圖如圖8所示。
焊接制作及編程調試
將PCB圖發(fā)給電路板廠家,經過半個月的等待,終于等到了成品電路板,黑色的阻焊層與白色的字符層,更顯得對比分明,尤其是對著電路板長時間進行目測檢查,沒有視覺疲勞感,之前的綠色電路板觀察時間長了會感覺眼花。空PCB如圖9所示。作者在電路板上作了很多引腳功能和連接標注,對編程調試很有幫助。
[!--empirenews.page--]
到這里就可以進入編程調試階段了,這個時鐘程序的編寫主要包括以下4個主要部分:
1.PS/2鍵盤通信
PS/2接口6只引腳中4只引腳是有效的,兩只用于供電,只有2只引腳可以用來傳輸數據。PS/2通信協(xié)議是一種雙向同步串行通信協(xié)議。通信的兩端通過Clock(時鐘腳)同步,并通過Data(數據腳)交換數據。任何一方如果想抑制另外一方通信時,只需要把Clock(時鐘腳)拉到低電平。每一數據幀包含11~12個位,具體含義如表1所列。更多的PS/2說明可以參考網上的應用介紹。
PS/2接口與單片機的連接如原理圖7所示,由于PS/2鍵盤要向單片機發(fā)送數據時,總是先將第5腳時鐘線拉低,這樣就可以將PS/2接口的第5腳與單片機的外中斷輸入引腳相連,一旦PS/2要向單片機發(fā)送數據,單片機就可以以外中斷的方式優(yōu)先響應PS/2鍵盤的輸入請求,開始接收數據,接收完畢后,PS/2鍵盤將時鐘線恢復為高電平。
由表1可知,單片機以外中斷方式接收PS/2鍵盤數據時,每接收一幀數據就要中斷11次,接收完成后,只要對其中8位有效數據進行比較或查表,就可以知道哪個按鍵被按下。例如把小鍵盤區(qū)的數字鍵通碼進行排序制表,根據查表的次數就可知道是哪個數字按鍵被按下。這就是PS/2鍵盤編程的思路。單片機成功接收了PS/2鍵盤數據確定是哪個按鍵后,就可轉到相應的程序段執(zhí)行指定的功能,如設定時間,設定亮度、設定鬧鈴等。
2.DS12C887的設置和讀寫
DS12C887內部共有128個寄存器,前14個為時鐘控制寄存器,剩下114個供編程者自由使用。14個時鐘控制寄存器中的前10個用于存儲時鐘參數,后4個用于控制DS12C887的各功能組件工作狀態(tài)。在DS12C887的第13腳片選端(CS)與P2.7相連接情況下,14個時鐘控制寄存器地址及具體功能說明如表2所示。
在本文所示電路連接情況下,DS12C887就相當于是單片機的一個外部并行擴展RAM,數據讀寫采用MOVX指令直接一次性讀出或寫入,很是方便。在程序初始根據要求對相關功能寄存器進行設定,然后在每次循環(huán)當中讀出當前各時間寄存器的數據,經單片機處理后分別送到兩片MAX7219的指定位置顯示即可,具體可參考源程序。
3.MAX7219的初始化和數據寫入
MAX7219是一款專用數碼管驅動芯片,內部設有動態(tài)掃描電路,它以串行通信方式接收到單片機的顯示數據后,對指定位置的數碼管顯示內容進行更新,為單片機節(jié)省了寶貴的軟、硬件資源。MAX7219的一個顯著特點是可以通過設定亮度控制寄存器的數值來控制所接數碼管的顯示亮度。MAX7219內部有14個寄存器,用于控制數碼管顯示的內容和狀態(tài),各寄存器功能列表如表3所示。
MAX7219的初始化就是對后5個寄存器進行設置,由于檢測只需在電路板焊接好進行一次就可以,所以程序初始主要是寫入譯碼方式、顯示亮度、掃描位數、顯示開關4個控制寄存器相應數值。到這里就可以發(fā)現通過PS/2鍵盤設定數碼管顯示亮度,就是識別按鍵后對MAX7219的亮度控制寄存器重新寫入新數值。
MAX7219每個寄存器的寫入分兩步,第一步先寫入寄存器地址;第二步再寫入寄存器數據,具體的寫入語句見源程序。這里簡要介紹一下MAX7219級聯(lián)狀態(tài)下數據寫入思路,這個電路板上用到兩片MAX7219(U5、U6),由原理圖7可見U6的輸入端(DIN)接到U5的輸出端(DOUT),這樣就稱U6為后級,U5為前級,寫入子程序段執(zhí)行一次就把地址和數據先送到后級的U6,再執(zhí)行一次才送到U5,以此類推,如果3片MAX7219級聯(lián),寫入子程序就要執(zhí)行三次才能分別將數據送到相應的MAX7219。
4.DS18B20數據讀取和處理
DS18B20內部結構和工作原理就不介紹了。單片機對讀取到的溫度數據進行適當處理,就是將讀出的二進制數據轉換成BCD碼,再將轉換到的BCD碼高低位分離,送到MAX7219的相應位置顯示即可。
編好的程序寫入單片機,一個原汁原味的單片機電子鐘就制作好了,夜間的運行效果如圖12所示。
制作調試問題匯總
1.試驗板搭接是必須的,否則無法確定原理線路正確性。
2.DS12C887有一個上電穩(wěn)定時間,在程序初始進行幾十毫秒的延時即可,否則會讀出不正確的數據,因為這個問題編程時多花了2天時間。PS/2鍵盤設定好亮度后,將亮度參數保存到DS12C887的7F0EH單元,重新上電后應能讀出上次設定的亮度參數,但每次讀出的均為0,百思不解,上網搜索也無結果,反復試驗思考,終于發(fā)現DS12C887的用戶RAM區(qū)上電需要一個穩(wěn)定時間,否則讀出的數據始終是0。
3.MAX7219對供電電壓穩(wěn)定性要求較高,大小兩個濾波電容要緊靠芯片布置,參數設置要恰當。在試驗板搭接階段經常發(fā)現MAX7219顯示會錯亂,查找各類網頁資料,就是要設置濾波電容,但試驗板上沒有緊靠芯片設置,而且采用的是飛線,一直到制成PCB后這個問題才得到解決。
4.MAX7219的質量問題。網購是現在電子元件獲取的主要途徑,但發(fā)現特便宜的MAX7219質量無法保證,所以大家網購電子元件時,要注意這個問題。
5.網上的參考資料要多對比,才能確定其正確性。
待改進之處
1.可在板上合適的位置增加幾個獨立按鍵,日常使用調節(jié)更方便些;
2.顯示內容可增加農歷和濕度;
3.可以用光敏電阻配合串行A/D轉換芯片(如TLC549)實現顯示亮度的自動調節(jié),以適應環(huán)境光線的變化,這樣子就更加具有專業(yè)性了。