新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 實(shí)戰(zhàn)單片機(jī)電子鐘制作

實(shí)戰(zhàn)單片機(jī)電子鐘制作

作者: 時間:2011-12-27 來源:網(wǎng)絡(luò) 收藏

到這里就可以進(jìn)入編程調(diào)試階段了,這個時鐘程序的編寫主要包括以下4個主要部分:

1.PS/2鍵盤通信

PS/2接口6只引腳中4只引腳是有效的,兩只用于供電,只有2只引腳可以用來傳輸數(shù)據(jù)。PS/2通信協(xié)議是一種雙向同步串行通信協(xié)議。通信的兩端通過Clock(時鐘腳)同步,并通過Data(數(shù)據(jù)腳)交換數(shù)據(jù)。任何一方如果想抑制另外一方通信時,只需要把Clock(時鐘腳)拉到低電平。每一數(shù)據(jù)幀包含11~12個位,具體含義如表1所列。更多的PS/2說明可以參考網(wǎng)上的應(yīng)用介紹。

13.jpg

PS/2接口與的連接如原理圖7所示,由于PS/2鍵盤要向發(fā)送數(shù)據(jù)時,總是先將第5腳時鐘線拉低,這樣就可以將PS/2接口的第5腳與的外中斷輸入引腳相連,一旦PS/2要向單片機(jī)發(fā)送數(shù)據(jù),單片機(jī)就可以以外中斷的方式優(yōu)先響應(yīng)PS/2鍵盤的輸入請求,開始接收數(shù)據(jù),接收完畢后,PS/2鍵盤將時鐘線恢復(fù)為高電平。

由表1可知,單片機(jī)以外中斷方式接收PS/2鍵盤數(shù)據(jù)時,每接收一幀數(shù)據(jù)就要中斷11次,接收完成后,只要對其中8位有效數(shù)據(jù)進(jìn)行比較或查表,就可以知道哪個按鍵被按下。例如把小鍵盤區(qū)的數(shù)字鍵通碼進(jìn)行排序制表,根據(jù)查表的次數(shù)就可知道是哪個數(shù)字按鍵被按下。這就是PS/2鍵盤編程的思路。單片機(jī)成功接收了PS/2鍵盤數(shù)據(jù)確定是哪個按鍵后,就可轉(zhuǎn)到相應(yīng)的程序段執(zhí)行指定的功能,如設(shè)定時間,設(shè)定亮度、設(shè)定鬧鈴等。

2.DS12C887的設(shè)置和讀寫

DS12C887內(nèi)部共有128個寄存器,前14個為時鐘控制寄存器,剩下114個供編程者自由使用。14個時鐘控制寄存器中的前10個用于存儲時鐘參數(shù),后4個用于控制DS12C887的各功能組件工作狀態(tài)。在DS12C887的第13腳片選端(CS)與P2.7相連接情況下,14個時鐘控制寄存器地址及具體功能說明如表2所示。

在本文所示電路連接情況下,DS12C887就相當(dāng)于是單片機(jī)的一個外部并行擴(kuò)展RAM,數(shù)據(jù)讀寫采用MOVX指令直接一次性讀出或?qū)懭?,很是方便。在程序初始根?jù)要求對相關(guān)功能寄存器進(jìn)行設(shè)定,然后在每次循環(huán)當(dāng)中讀出當(dāng)前各時間寄存器的數(shù)據(jù),經(jīng)單片機(jī)處理后分別送到兩片MAX7219的指定位置顯示即可,具體可參考源程序。

3.MAX7219的初始化和數(shù)據(jù)寫入

MAX7219是一款專用數(shù)碼管驅(qū)動芯片,內(nèi)部設(shè)有動態(tài)掃描電路,它以串行通信方式接收到單片機(jī)的顯示數(shù)據(jù)后,對指定位置的數(shù)碼管顯示內(nèi)容進(jìn)行更新,為單片機(jī)節(jié)省了寶貴的軟、硬件資源。MAX7219的一個顯著特點(diǎn)是可以通過設(shè)定亮度控制寄存器的數(shù)值來控制所接數(shù)碼管的顯示亮度。MAX7219內(nèi)部有14個寄存器,用于控制數(shù)碼管顯示的內(nèi)容和狀態(tài),各寄存器功能列表如表3所示。

14.jpg

MAX7219的初始化就是對后5個寄存器進(jìn)行設(shè)置,由于檢測只需在電路板焊接好進(jìn)行一次就可以,所以程序初始主要是寫入譯碼方式、顯示亮度、掃描位數(shù)、顯示開關(guān)4個控制寄存器相應(yīng)數(shù)值。到這里就可以發(fā)現(xiàn)通過PS/2鍵盤設(shè)定數(shù)碼管顯示亮度,就是識別按鍵后對MAX7219的亮度控制寄存器重新寫入新數(shù)值。

MAX7219每個寄存器的寫入分兩步,第一步先寫入寄存器地址;第二步再寫入寄存器數(shù)據(jù),具體的寫入語句見源程序。這里簡要介紹一下MAX7219級聯(lián)狀態(tài)下數(shù)據(jù)寫入思路,這個電路板上用到兩片MAX7219(U5、U6),由原理圖7可見U6的輸入端(DIN)接到U5的輸出端(DOUT),這樣就稱U6為后級,U5為前級,寫入子程序段執(zhí)行一次就把地址和數(shù)據(jù)先送到后級的U6,再執(zhí)行一次才送到U5,以此類推,如果3片MAX7219級聯(lián),寫入子程序就要執(zhí)行三次才能分別將數(shù)據(jù)送到相應(yīng)的MAX7219。

4.DS18B20數(shù)據(jù)讀取和處理

DS18B20內(nèi)部結(jié)構(gòu)和工作原理就不介紹了。單片機(jī)對讀取到的溫度數(shù)據(jù)進(jìn)行適當(dāng)處理,就是將讀出的二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成BCD碼,再將轉(zhuǎn)換到的BCD碼高低位分離,送到MAX7219的相應(yīng)位置顯示即可。

編好的程序?qū)懭雴纹瑱C(jī),一個原汁原味的單片機(jī)好了,夜間的運(yùn)行效果如圖12所示。

15.jpg

調(diào)試問題匯總

1.試驗(yàn)板搭接是必須的,否則無法確定原理線路正確性。
2.DS12C887有一個上電穩(wěn)定時間,在程序初始進(jìn)行幾十毫秒的延時即可,否則會讀出不正確的數(shù)據(jù),因?yàn)檫@個問題編程時多花了2天時間。PS/2鍵盤設(shè)定好亮度后,將亮度參數(shù)保存到DS12C887的7F0EH單元,重新上電后應(yīng)能讀出上次設(shè)定的亮度參數(shù),但每次讀出的均為0,百思不解,上網(wǎng)搜索也無結(jié)果,反復(fù)試驗(yàn)思考,終于發(fā)現(xiàn)DS12C887的用戶RAM區(qū)上電需要一個穩(wěn)定時間,否則讀出的數(shù)據(jù)始終是0。
3.MAX7219對供電電壓穩(wěn)定性要求較高,大小兩個濾波電容要緊靠芯片布置,參數(shù)設(shè)置要恰當(dāng)。在試驗(yàn)板搭接階段經(jīng)常發(fā)現(xiàn)MAX7219顯示會錯亂,查找各類網(wǎng)頁資料,就是要設(shè)置濾波電容,但試驗(yàn)板上沒有緊靠芯片設(shè)置,而且采用的是飛線,一直到制成PCB后這個問題才得到解決。
4.MAX7219的質(zhì)量問題。網(wǎng)購是現(xiàn)在電子元件獲取的主要途徑,但發(fā)現(xiàn)特便宜的MAX7219質(zhì)量無法保證,所以大家網(wǎng)購電子元件時,要注意這個問題。
5.網(wǎng)上的參考資料要多對比,才能確定其正確性。

待改進(jìn)之處

1.可在板上合適的位置增加幾個獨(dú)立按鍵,日常使用調(diào)節(jié)更方便些;
2.顯示內(nèi)容可增加農(nóng)歷和濕度;
3.可以用光敏電阻配合串行A/D轉(zhuǎn)換芯片(如TLC549)實(shí)現(xiàn)顯示亮度的自動調(diào)節(jié),以適應(yīng)環(huán)境光線的變化,這樣子就更加具有專業(yè)性了。


上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉