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