前一段時間開始帶學生進行畢業設計,學生想做一個電子鐘,問我怎么做,我告訴他得有一點專業性,否則不能稱其為畢業設計。經過1個月的反復醞釀,我們確定了如下方案和最終目標:
1.整體功能達到市售電子日歷效果,顯示內容包括年、月、日、星期、時、分、秒、室溫。
2.實時時鐘芯片有兩種:DS12C887、DS1302。學習和使用過程中可進行選擇。
4.電路板上留有PS/2鍵盤接口,用于調節當前時間、數碼管顯示亮度、鬧鈴時間。這一點和普通電子日歷有明顯區別,畢竟我們做的是一個有點專業要求的電子鐘。
5.電路板上安裝有繼電器,可作為簡單的時間控制或溫度控制裝置。
6.設計出原理圖和PCB圖,找廠家制出PCB,編程實現預期效果。
下面對整個電子鐘的設計和制作過程做一個圖示說明,希望對想做這方面畢業設計的學生朋友有所幫助。
主要元器件選用
1.單片機
就用AT89S51吧,太方便了,只要在側面留有ISP插針接口,外接編程器就可以方便地在線改寫調試程序了。ISP編程插針設置如圖1所示。
圖1? AT89S51側面ISP插針設置圖
2.實時時鐘芯片
有DS12C887、DS1302兩種。前者內部自帶鋰電池,后者要外接后備電池,二者的實物對比如圖2所示。DS12C887的最大特點是有15種頻率可編程方波輸出功能,在某些情況下可作為簡易的方波發生器,電路板上也設有輸出拉環和插針,便于不同場合的連接需求,如圖1中的標示。
圖2? DS1302和DS12C887
3.PS/2接口
PS/2接口就是電腦主機后面的鍵盤或鼠標接口,實物如圖3所示,共有6個引腳,實際只用4個,分別是電源正、電源負、數據腳、時鐘腳,各插孔功能標識見圖4。
圖3? PS/2接口 圖4? PS/2插孔功能分布
4.MAX7219
很方便的一款專用數碼管驅動芯片,與單片機之間采用三線連接,串行傳送數據,就是對電源要求高一些,在緊靠它的地方加上兩個電容就能使其穩定工作,實物見圖5。
圖5 ?MAX7219
?
5.溫度傳感器
DS18B20是最佳選擇,體積小巧,與單片機連接簡單,數據處理方便,實物如圖6所示。
圖6? DS18B20實物
原理圖設計
經過試驗板搭接和綜合考慮,各器件與單片機各引腳的連接關系如下:
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所示。
圖7?單片機電子鐘原理總圖(此圖為工程圖,為與印制電路板一致,元器件代號未做標準化處理)
PCB設計
這里PCB設計沒有按照傳統的設計順序,即由原理圖到網絡表再到PCB,主要是因為有的元件沒有現成的封裝,相比之下對于這個不太復雜的電路,手工布線更為靈活。經過半個多月的純手工設計,最終的PCB圖如圖8所示。
圖8? 單片機電子鐘PCB圖
焊接制作及編程調試
將PCB圖發給電路板廠家,經過半個月的等待,終于等到了成品電路板,黑色的阻焊層與白色的字符層,更顯得對比分明,尤其是對著電路板長時間進行目測檢查,沒有視覺疲勞感,之前的綠色電路板觀察時間長了會感覺眼花。空PCB如圖9所示。作者在電路板上作了很多引腳功能和連接標注,對編程調試很有幫助。
圖9? 單片機電子鐘空PCB板照片
購齊所有元器件,焊接好電路板,最終焊接完成的電子鐘實物如圖10所示。
到這里就可以進入編程調試階段了,這個時鐘程序的編寫主要包括以下4個主要部分:
1.PS/2鍵盤通信
PS/2接口6只引腳中4只引腳是有效的,兩只用于供電,只有2只引腳可以用來傳輸數據。PS/2通信協議是一種雙向同步串行通信協議。通信的兩端通過Clock(時鐘腳)同步,并通過Data(數據腳)交換數據。任何一方如果想抑制另外一方通信時,只需要把Clock(時鐘腳)拉到低電平。每一數據幀包含11~12個位,具體含義如表1所列。更多的PS/2說明可以參考網上的應用介紹。
表1?PS/2數據幀格式說明
1個起始位 總是邏輯0
8個數據位 低位在前
1個奇偶校驗位 奇校驗
1個停止位 總是邏輯1
1個應答位 僅用在主機對設備的通信中
表2?DS12C887時鐘控制寄存器功能說明
地址 功能說明
7F00H 秒存儲單元
7F01H 秒鬧鐘存儲單元
7F02H 分存儲單元
7F03H 分鬧鐘存儲單元
7F04H 時存儲單元
7F05H 時鬧鐘存儲單元
7F06H 星期存儲單元
7F07H 日期存儲單元
7F08H 月份存儲單元
7F09H 年份存儲單元
7F0AH 控制芯片是否立即進行更新、晶振是否起振、可編程方波參數設置
7F0BH 各個位用于控制芯片更新是否禁止、周期/鬧鐘/更新結束3種中斷允許設置、可編 程方波輸出、數據存取格式(二進制/BCD)、時制設置、夏令時允許標志。
7F0CH 該寄存器只讀,低4位無用,高4位由高到低分別是中斷請求標志位、周期中斷標志、鬧鐘中斷標志、更新結束中斷標志。
7F0DH 該寄存器只讀,低7位無用,最高位VRT如為0表示內置電池能量耗盡
PS/2接口與單片機的連接如原理圖7所示,由于PS/2鍵盤要向單片機發送數據時,總是先將第5腳時鐘線拉低,這樣就可以將PS/2接口的第5腳與單片機的外中斷輸入引腳相連,一旦PS/2要向單片機發送數據,單片機就可以以外中斷的方式優先響應PS/2鍵盤的輸入請求,開始接收數據,接收完畢后,PS/2鍵盤將時鐘線恢復為高電平。
由表1可知,單片機以外中斷方式接收PS/2鍵盤數據時,每接收一幀數據就要中斷11次,接收完成后,只要對其中8位有效數據進行比較或查表,就可以知道哪個按鍵被按下。例如把小鍵盤區的數字鍵通碼進行排序制表,根據查表的次數就可知道是哪個數字按鍵被按下。這就是PS/2鍵盤編程的思路。單片機成功接收了PS/2鍵盤數據確定是哪個按鍵后,就可轉到相應的程序段執行指定的功能,如設定時間,設定亮度、設定鬧鈴等。
2.DS12C887的設置和讀寫
DS12C887內部共有128個寄存器,前14個為時鐘控制寄存器,剩下114個供編程者自由使用。14個時鐘控制寄存器中的前10個用于存儲時鐘參數,后4個用于控制DS12C887的各功能組件工作狀態。在DS12C887的第13腳片選端(CS)與P2.7相連接情況下,14個時鐘控制寄存器地址及具體功能說明如表2所示。
在本文所示電路連接情況下,DS12C887就相當于是單片機的一個外部并行擴展RAM,數據讀寫采用MOVX指令直接一次性讀出或寫入,很是方便。在程序初始根據要求對相關功能寄存器進行設定,然后在每次循環當中讀出當前各時間寄存器的數據,經單片機處理后分別送到兩片MAX7219的指定位置顯示即可,具體可參考源程序。
3.MAX7219的初始化和數據寫入
MAX7219是一款專用數碼管驅動芯片,內部設有動態掃描電路,它以串行通信方式接收到單片機的顯示數據后,對指定位置的數碼管顯示內容進行更新,為單片機節省了寶貴的軟、硬件資源。MAX7219的一個顯著特點是可以通過設定亮度控制寄存器的數值來控制所接數碼管的顯示亮度。MAX7219內部有14個寄存器,用于控制數碼管顯示的內容和狀態,各寄存器功能列表如表3所示。
表3 MAX7219寄存器功能說明
編號 功能說明
0 空操作地址
1?8 第1?8個數碼管顯示地址
9 譯碼方式控制寄存器,為0FFH表示使用內部BCD譯碼器,為00H表示不使用
A 亮度調節控制寄存器,分16級,參數范圍:00H—0FH
B 掃描位數控制寄存器,根據所接數碼管數量確定,參數范圍:00H—07H (1只—8只)
C 顯示開關控制寄存器,為1所有數碼正常顯示,為0關閉所有數碼管
D 顯示器檢測控制寄存器,為1所接數碼管的各段全部點亮,用于檢測是否有損壞,再送入0,恢復正常顯示內容
MAX7219的初始化就是對后5個寄存器進行設置,由于檢測只需在電路板焊接好進行一次就可以,所以程序初始主要是寫入譯碼方式、顯示亮度、掃描位數、顯示開關4個控制寄存器相應數值。到這里就可以發現通過PS/2鍵盤設定數碼管顯示亮度,就是識別按鍵后對MAX7219的亮度控制寄存器重新寫入新數值。
MAX7219每個寄存器的寫入分兩步,第一步先寫入寄存器地址;第二步再寫入寄存器數據,具體的寫入語句見源程序。這里簡要介紹一下MAX7219級聯狀態下數據寫入思路,這個電路板上用到兩片MAX7219(U5、U6),由原理圖7可見U6的輸入端(DIN)接到U5的輸出端(DOUT),這樣就稱U6為后級,U5為前級,寫入子程序段執行一次就把地址和數據先送到后級的U6,再執行一次才送到U5,以此類推,如果3片MAX7219級聯,寫入子程序就要執行三次才能分別將數據送到相應的MAX7219。
4.DS18B20數據讀取和處理
DS18B20內部結構和工作原理就不介紹了。單片機對讀取到的溫度數據進行適當處理,就是將讀出的二進制數據轉換成BCD碼,再將轉換到的BCD碼高低位分離,送到MAX7219的相應位置顯示即可。
編好的程序寫入單片機,一個原汁原味的單片機電子鐘就制作好了,夜間的運行效果如圖12所示。
圖12? 單片機電子鐘夜間運行效果
制作調試問題匯總
1.試驗板搭接是必須的,否則無法確定原理線路正確性。
2.DS12C887有一個上電穩定時間,在程序初始進行幾十毫秒的延時即可,否則會讀出不正確的數據,因為這個問題編程時多花了2天時間。PS/2鍵盤設定好亮度后,將亮度參數保存到DS12C887的7F0EH單元,重新上電后應能讀出上次設定的亮度參數,但每次讀出的均為0,百思不解,上網搜索也無結果,反復試驗思考,終于發現DS12C887的用戶RAM區上電需要一個穩定時間,否則讀出的數據始終是0。
3.MAX7219對供電電壓穩定性要求較高,大小兩個濾波電容要緊靠芯片布置,參數設置要恰當。在試驗板搭接階段經常發現MAX7219顯示會錯亂,查找各類網頁資料,就是要設置濾波電容,但試驗板上沒有緊靠芯片設置,而且采用的是飛線,一直到制成PCB后這個問題才得到解決。
4.MAX7219的質量問題。網購是現在電子元件獲取的主要途徑,但發現特便宜的MAX7219質量無法保證,所以大家網購電子元件時,要注意這個問題。
5.網上的參考資料要多對比,才能確定其正確性。
待改進之處
1.可在板上合適的位置增加幾個獨立按鍵,日常使用調節更方便些;
2.顯示內容可增加農歷和濕度;
3.可以用光敏電阻配合串行A/D轉換芯片(如TLC549)實現顯示亮度的自動調節,以適應環境光線的變化,這樣子就更加具有專業性了。
程序或硬件電路,讀者可結合自己的想法,做出更加合理的改動。特別說明:原理圖、PCB圖、源程序和流程圖都可以在《電子發燒友網》網站下載。下載地址如下:
????????單片機電子鐘源程序及相關電路圖資料
?
?
評論