<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 工程師電子制作故事:實(shí)戰單片機電子鐘

工程師電子制作故事:實(shí)戰單片機電子鐘

作者: 時(shí)間:2012-06-01 來(lái)源:網(wǎng)絡(luò ) 收藏

  購齊所有元器件,焊接好電路板,最終焊接完成的實(shí)物如圖10所示。

  

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

  1.PS/2鍵盤(pán)通信

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

  表1 PS/2數據幀格式說(shuō)明

  1個(gè)起始位 總是邏輯0

  8個(gè)數據位 低位在前

  1個(gè)奇偶校驗位 奇校驗

  1個(gè)停止位 總是邏輯1

  1個(gè)應答位 僅用在主機對設備的通信中

  表2 DS12C887時(shí)鐘控制寄存器功能說(shuō)明

  地址 功能說(shuō)明

  7F00H 秒存儲單元

  7F01H 秒鬧鐘存儲單元

  7F02H 分存儲單元

  7F03H 分鬧鐘存儲單元

  7F04H 時(shí)存儲單元

  7F05H 時(shí)鬧鐘存儲單元

  7F06H 星期存儲單元

  7F07H 日期存儲單元

  7F08H 月份存儲單元

  7F09H 年份存儲單元

  7F0AH 控制芯片是否立即進(jìn)行更新、晶振是否起振、可編程方波參數設置

  7F0BH 各個(gè)位用于控制芯片更新是否禁止、周期/鬧鐘/更新結束3種中斷允許設置、可編 程方波輸出、數據存取格式(二進(jìn)制/BCD)、時(shí)制設置、夏令時(shí)允許標志。

  7F0CH 該寄存器只讀,低4位無(wú)用,高4位由高到低分別是中斷請求標志位、周期中斷標志、鬧鐘中斷標志、更新結束中斷標志。

  7F0DH 該寄存器只讀,低7位無(wú)用,最高位VRT如為0表示內置電池能量耗盡

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

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

2.DS12C887的設置和讀寫(xiě)

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

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

  3.MAX7219的初始化和數據寫(xiě)入

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

  表3 MAX7219寄存器功能說(shuō)明

  編號 功能說(shuō)明

  0 空操作地址

  1?8 第1?8個(gè)數碼管顯示地址

  9 譯碼方式控制寄存器,為0FFH表示使用內部BCD譯碼器,為00H表示不使用

  A 亮度調節控制寄存器,分16級,參數范圍:00H—0FH

  B 掃描位數控制寄存器,根據所接數碼管數量確定,參數范圍:00H—07H (1只—8只)

  C 顯示開(kāi)關(guān)控制寄存器,為1所有數碼正常顯示,為0關(guān)閉所有數碼管

  D 顯示器檢測控制寄存器,為1所接數碼管的各段全部點(diǎn)亮,用于檢測是否有損壞,再送入0,恢復正常顯示內容

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

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

 4.DS18B20數據讀取和處理

  DS18B20內部結構和工作就不介紹了。單片機對讀取到的溫度數據進(jìn)行適當處理,就是將讀出的二進(jìn)制數據轉換成BCD碼,再將轉換到的BCD碼高低位分離,送到MAX7219的相應位置顯示即可。

  編好的程序寫(xiě)入單片機,一個(gè)原汁原味的單片機好了,夜間的運行效果如圖12所示。

  

  圖12  單片機夜間運行效果

  調試問(wèn)題匯總

  1.試驗板搭接是必須的,否則無(wú)法確定原理線(xiàn)路正確性。

  2.DS12C887有一個(gè)上電穩定時(shí)間,在程序初始進(jìn)行幾十毫秒的延時(shí)即可,否則會(huì )讀出不正確的數據,因為這個(gè)問(wèn)題編程時(shí)多花了2天時(shí)間。PS/2鍵盤(pán)設定好亮度后,將亮度參數保存到DS12C887的7F0EH單元,重新上電后應能讀出上次設定的亮度參數,但每次讀出的均為0,百思不解,上網(wǎng)搜索也無(wú)結果,反復試驗思考,終于發(fā)現DS12C887的用戶(hù)RAM區上電需要一個(gè)穩定時(shí)間,否則讀出的數據始終是0。

  3.MAX7219對供電電壓穩定性要求較高,大小兩個(gè)濾波電容要緊靠芯片布置,參數設置要恰當。在試驗板搭接階段經(jīng)常發(fā)現MAX7219顯示會(huì )錯亂,查找各類(lèi)網(wǎng)頁(yè)資料,就是要設置濾波電容,但試驗板上沒(méi)有緊靠芯片設置,而且采用的是飛線(xiàn),一直到制成PCB后這個(gè)問(wèn)題才得到解決。

  4.MAX7219的質(zhì)量問(wèn)題。網(wǎng)購是現在電子元件獲取的主要途徑,但發(fā)現特便宜的MAX7219質(zhì)量無(wú)法保證,所以大家網(wǎng)購電子元件時(shí),要注意這個(gè)問(wèn)題。

  5.網(wǎng)上的參考資料要多對比,才能確定其正確性。

 待改進(jìn)之處

  1.可在板上合適的位置增加幾個(gè)獨立按鍵,日常使用調節更方便些;

  2.顯示內容可增加農歷和濕度;

  3.可以用光敏電阻配合串行A/D轉換芯片(如TLC549)實(shí)現顯示亮度的自動(dòng)調節,以適應環(huán)境光線(xiàn)的變化,這樣子就更加具有專(zhuān)業(yè)性了。

  程序或硬件電路,讀者可結合自己的想法,做出更加合理的改動(dòng)。

51單片機相關(guān)文章:51單片機教程



上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>