




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第1章 系統(tǒng)設(shè)計(jì)要求與方案確定1.1設(shè)計(jì)要求 以單片機(jī)為核心,設(shè)計(jì)一個(gè)具有定時(shí)和計(jì)數(shù)功能的智能化作息時(shí)間控制器。該控制器要求的功能有:按作息時(shí)間接通/斷開電鈴;課間接通/斷開播放音樂設(shè)備;時(shí)鐘顯示。作息時(shí)間控制器常用于學(xué)校教學(xué)樓的時(shí)間控制,利用單片機(jī)內(nèi)部定時(shí)器實(shí)現(xiàn)時(shí)間基準(zhǔn)定時(shí),并配合“啟動(dòng)”、“復(fù)位”等按鍵的操作完成鈴聲、音樂的開/??刂?,顯示的內(nèi)容要求有時(shí)、分、秒各兩位。1.2設(shè)計(jì)思路根據(jù)設(shè)計(jì)要求,初步思路如下:1) 計(jì)時(shí)單元由單片機(jī)內(nèi)部的定時(shí)器/計(jì)數(shù)器t1來實(shí)現(xiàn)。2) 時(shí)間顯示功能通過led數(shù)碼管動(dòng)態(tài)掃描來實(shí)現(xiàn)。動(dòng)態(tài)掃描的定時(shí)時(shí)間由單片機(jī)內(nèi)部的定時(shí)器/計(jì)數(shù)器t0實(shí)現(xiàn)。3) led數(shù)碼管的段
2、碼輸入和位碼輸入由8051的p0口、p1口產(chǎn)生。4)時(shí)間調(diào)整通過接入按鈕電路來實(shí)現(xiàn)。系統(tǒng)共設(shè)三個(gè)鍵,分別定義為: set功能:設(shè)置當(dāng)前時(shí)間,即當(dāng)電子時(shí)鐘的時(shí)間有誤差時(shí),需要隨時(shí)對(duì)它進(jìn)行調(diào)整,使用set鍵與+1鍵、ret鍵配合來完成這一功能。 +1調(diào)整鍵功能:分別對(duì)時(shí)間值的小時(shí)十位、小時(shí)個(gè)位、分的十位、分的個(gè)位進(jìn)行+1調(diào)整,即該按鍵每按下一次,對(duì)應(yīng)的時(shí)間調(diào)整位+1。 ret確認(rèn)鍵功能:確認(rèn),即對(duì)+1調(diào)整位進(jìn)行確認(rèn),該鍵按下時(shí),說明被調(diào)整位的值已經(jīng)確定,轉(zhuǎn)去調(diào)整下一位。5)打鈴是用p1口輸出來控制繼電器的閉合,從而控制打鈴和放音樂。為了方便觀察,用發(fā)光二極管來代替繼電器,即p1.7對(duì)應(yīng)的發(fā)光二極管
3、亮代表電鈴接通,若不亮代表電鈴斷開,p1.6對(duì)應(yīng)的發(fā)光二極管亮代表放音機(jī)接通,若不亮代表放音機(jī)斷開。第2章 控制系統(tǒng)硬件電路設(shè)計(jì)2.1硬件電路的設(shè)計(jì)方案及框圖根據(jù)設(shè)計(jì)要求與設(shè)計(jì)思路,確定該系統(tǒng)的控制方案,圖1所示為開系統(tǒng)設(shè)計(jì)方案的硬件電路的設(shè)計(jì)框圖。硬件電路由8個(gè)部分組成,即單片機(jī)按鍵輸入電路、單片機(jī)時(shí)鐘電路、單片機(jī)復(fù)位電路、6位led動(dòng)態(tài)掃描電路、語音輸出與打鈴電路。下面將分別對(duì)硬件電路的設(shè)計(jì)和器件的選擇做詳細(xì)介紹。3個(gè)按鍵輸入電路時(shí)鐘電路復(fù)位電路單片機(jī)6位led動(dòng)態(tài)掃描電路語音輸出與打鈴電路圖1 硬件電路設(shè)計(jì)框圖2.2單片機(jī)的選擇當(dāng)今單片機(jī)廠商琳瑯滿目,產(chǎn)品性能各異。常用的單片機(jī)有很多種:
4、intel8051系列、motorola和m68hc系列、atmel的at89系列、臺(tái)灣winbond(華邦)w78系列、荷蘭pilips的pcf80c51系列、microchip公司的pic系列、zilog的z86系列、atmel的at90s系列、韓國三星公司的ks57c系列4位單片機(jī)、臺(tái)灣義隆的em-78系列等。根據(jù)初步設(shè)計(jì)方案的分析,設(shè)計(jì)這樣一個(gè)簡單的應(yīng)用系統(tǒng),可以選擇帶有eprom的單片機(jī),應(yīng)用程序直接存儲(chǔ)在片內(nèi),不用在外部擴(kuò)展程序存儲(chǔ)器,電路可以簡化。該系統(tǒng)的設(shè)計(jì)我們采用8051芯片。圖2所示為采用雙列直插式封裝的8051ah芯片管腳圖。各管腳的功能如下。1. 電源管腳vcc(40腳
5、):接+5v;vss(20腳):接地。(注:管腳未畫出)2時(shí)鐘信號(hào)管腳x1(19腳),x2(18腳):外部時(shí)鐘信號(hào)的兩個(gè)管腳3控制線1) reset(9腳):用作復(fù)位輸入端。2) ea/vp(31腳):ea為訪問內(nèi)部或外部程序存儲(chǔ)器的選擇信號(hào)。對(duì)片內(nèi)eprom編程市時(shí),此管腳(作vp)接入21v編程電壓。3) ale/p(30腳):當(dāng)訪問外部存儲(chǔ)器時(shí),ale信號(hào)的負(fù)跳變將p0口上的低8位地址送入鎖存器。當(dāng)對(duì)內(nèi)eprom編程時(shí),該管腳(p) 圖2 8051ah管腳圖用于輸入編程脈沖。4) psen(29腳):外部程序存儲(chǔ)器讀選通控制信號(hào)。4輸入/輸出口線1) p0口(3239腳):8路漏極開路型
6、雙向并行i/o口。在訪問外部存儲(chǔ)器時(shí),p0口作為低8位地址/數(shù)據(jù)總線復(fù)用口,通過分時(shí)操作,先傳送低8位地址,利用ale信號(hào) 的下降沿將地址鎖存,然后作為8位數(shù)據(jù)總線使用,用來傳送8位數(shù)據(jù)。在對(duì)片內(nèi)eprom編程時(shí),p0口接受指令代碼;而在內(nèi)部程序校驗(yàn)時(shí),則輸出指令代碼,并要求外接上拉電阻。外部不擴(kuò)展而單片應(yīng)用時(shí),則作雙向i/o口用,p0口能以吸收電流的方式驅(qū)動(dòng)8個(gè)lsttl負(fù)載。2) p1口(18腳):具有內(nèi)部上拉電阻的8位準(zhǔn)雙向i/o口。在對(duì)片內(nèi)eprom編程及校驗(yàn)時(shí),它接收低8位地址。p1口能驅(qū)動(dòng)4個(gè)lsttl負(fù)載。3) p2口(2128腳):具有內(nèi)部上拉電阻的8位準(zhǔn)雙向i/o口。在外接存
7、儲(chǔ)器時(shí),p2口作為高8位地址總線。在對(duì)片內(nèi)eprom編程及校驗(yàn)時(shí),它接收高8位地址。p2口驅(qū)動(dòng)4個(gè)lsttl負(fù)載。4) p3口(1017腳):8位帶有內(nèi)部上拉電阻的準(zhǔn)雙向i/o口。每一位又具有如下的特殊功能(或稱第二功能):p3.0(rxd):串行輸入端。p3.1(txd):串行輸出端。p3.2(int0):外部中斷0輸入端,低電平有效。p3.3(int1):外部中斷1輸入端,低電平有效。p3.4(t0):定時(shí)/計(jì)數(shù)器0外部事件計(jì)數(shù)輸入端。p3.4(t0):定時(shí)/計(jì)數(shù)器0外部事件計(jì)數(shù)輸入端。p3.5(t1):定時(shí)/計(jì)數(shù)器1外部事件計(jì)數(shù)輸入端。p3.6(wr):外部數(shù)據(jù)存儲(chǔ)器寫選通信號(hào),低電平有
8、效。p3.7(rd):外部數(shù)據(jù)存儲(chǔ)器讀選通信號(hào),低電平有效。2.3時(shí)鐘與復(fù)位電路的設(shè)計(jì)單片機(jī)工作的時(shí)間基準(zhǔn)是由時(shí)鐘電路提供的。在單片機(jī)的x1和x2兩個(gè)管腳,接一只晶振及兩個(gè)電容就構(gòu)成了單片機(jī)的時(shí)鐘電路,如圖3(a)所示。電路中,電容器c1和c2對(duì)振蕩頻率有微調(diào)作用,通常的取值范圍為(3010pf)。石英晶體選擇6mhz或12mhz都可以,其結(jié)果只是機(jī)械周期時(shí)間不同,影響計(jì)數(shù)器的計(jì)數(shù)初值。單片機(jī)的rst管腳為主機(jī)提供一個(gè)外部復(fù)位信號(hào)輸入端口。復(fù)位信號(hào)是高電平有效,高電平有效的持續(xù)時(shí)間應(yīng)為2個(gè)機(jī)器周期以上。單片機(jī)的復(fù)位方式有上電復(fù)位和手動(dòng)復(fù)位兩種。圖3(b)所示是51系列單片機(jī)常用的上電復(fù)位和手動(dòng)
9、復(fù)位組合電路,只要vcc上升時(shí)間不超過1ms,它們都能很好地工作。復(fù)位以后,單片機(jī)內(nèi)部各部件恢復(fù)到初始狀態(tài)。(a)時(shí)鐘電路 (b)復(fù)位電路圖3 時(shí)鐘與復(fù)位電路2.4六位led動(dòng)態(tài)掃描電路2.4.1數(shù)碼管電路 數(shù)碼管是單片機(jī)系統(tǒng)中常用的顯示界面,可以顯示“1、2、3、4、5、6、7、8、9、0”和十六進(jìn)制中的“a、b、c、d、e、f”及小數(shù)點(diǎn)“.”, 數(shù)碼管怎樣來顯示1,2, 3,4呢?數(shù)碼管實(shí)際上是由7個(gè)發(fā)光管組成8字形構(gòu)成的,加上小數(shù)點(diǎn)就是8個(gè)。分別被命名為a,b,c,d,e,f,g,h和dp。如果要顯示一個(gè)數(shù)字2, 那么 a、b、g、e、d這5個(gè)段的發(fā)光管亮,b、e、h(小數(shù)點(diǎn))不亮,就可
10、以了。圖5 六位led顯示器內(nèi)部結(jié)構(gòu)原理圖由圖4可知:要使數(shù)碼管發(fā)光必須滿足兩個(gè)條件,一、com端為高電平。二、在a-g端的對(duì)應(yīng)部分輸入低電平。這樣電流流過相應(yīng)的字段,數(shù)碼管就會(huì)顯示相應(yīng)的字符了!圖5所示,由于數(shù)碼管的a、b、c.dp端都并在一起,要使每個(gè)數(shù)碼管顯示各自的內(nèi)容,所以必須使用動(dòng)態(tài)掃描方式。表一 字符代碼表顯示數(shù)字 a b c d e f g dp 16進(jìn)制代碼0 0 0 0 0 0 0 1 1 03h 1 1 001 1 1 1 1 9fh 2 0 0 1 0 0 1 0 1 25h 3 0 0 0 0 1 1 0 1 0dh 4 1 0 0 1 1 0 0 1 99h 5 0
11、1 0 0 1 0 0 1 49h 6 0 1 0 0 0 0 0 1 41h 7 0 0 0 1 1 1 1 1 1fh 8 0 0 0 0 0 0 0 1 01h 9 0 0 0 0 1 0 0 1 09h a 0 0 0 1 00 0 1 11h b 1 1 0 0 00 0 1 c1h c 0 1 1 0 0 0 1 1 63h d 1 0 0 0 0 0 0 1 85h e 0 1 1 0 0 0 0 1 61h f 0 1 1 1 0 0 0 1 71h . 1 1 1 1 1 1 1 0 feh 注:對(duì)于想顯示的字符只要查表的代碼送段碼輸入口顯示即可。我們可以先點(diǎn)亮左邊(右邊亦可
12、)第一位,其它的都熄滅,延時(shí)一定時(shí)間后,再點(diǎn)亮第二位,其它都熄滅當(dāng)點(diǎn)亮完最后一位時(shí)再從頭開始下一循環(huán)。雖然在每一瞬間只有一只發(fā)光管被點(diǎn)亮,但由于人的眼睛具有視覺殘留效應(yīng),只要所設(shè)定的延時(shí)時(shí)間恰當(dāng),所看到的所有發(fā)光管顯示的都是穩(wěn)定的字符,這就是動(dòng)態(tài)顯示方式。為了編程方便,對(duì)于上面的電路圖,我們將可以顯示的字符代碼編制成表格如表一所示。2.4.2led的段碼和位碼驅(qū)動(dòng)芯片的選擇由于選用動(dòng)態(tài)顯示,每一位數(shù)據(jù)的顯示是由段和位選信號(hào)共同配合完成的,因此,要同時(shí)考慮段和位的驅(qū)動(dòng)能力,而且端的驅(qū)動(dòng)能力決定位的驅(qū)動(dòng)能力。選用74ls273芯片作為顯示電路的段碼輸出鎖存,選用74ls06芯片來進(jìn)行反相和提高驅(qū)動(dòng)
13、能力,然后再接各led顯示器的位控端。2.4.3led驅(qū)動(dòng)電路與單片機(jī)的連接圖6 六位led顯示接口電路采用單片機(jī)的p1口作為位碼輸出口,通過74ls06芯片驅(qū)動(dòng)數(shù)碼管的位控端。74ls273作為輸出接口由wr及a15組合信號(hào)控制,單片機(jī)的p0口作為數(shù)據(jù)線與i/o數(shù)據(jù)線相連(74ls273的口地址為cfa0h)。如圖6所示為六位led顯示接口電路,該電路的工作原理是:從字符代碼表格中取出顯示字符,通過74ls273芯片鎖存、譯碼和驅(qū)動(dòng)作用,輸出具有一定驅(qū)動(dòng)能力的七段字型碼,由于六位led的端碼輸入管腳是并聯(lián)在一起的,所以每位led都獲得這個(gè)段碼。若要控制在每一時(shí)刻只有一位led被點(diǎn)亮,必須由位
14、碼信號(hào)控制。p1口的低6位輸出位碼信號(hào)經(jīng)反相后接led的位碼控制端,因此p1口的位碼信號(hào)在每一時(shí)刻只有一位是“1”,其它為位為“0”,然后按時(shí)間順序改變輸出“1”的位置。詳細(xì)的led動(dòng)態(tài)掃描顯示程序請(qǐng)參見軟件設(shè)計(jì)部分t0_sev子程序的設(shè)計(jì)。2.5按鍵電路設(shè)計(jì)與器件選擇該控制系統(tǒng)要用到時(shí)鐘電路,所以要求能隨時(shí)對(duì)當(dāng)前時(shí)間進(jìn)行調(diào)整。要實(shí)現(xiàn)這一功能,可以接入鍵盤電路。圖7 按鍵電路本系統(tǒng)只需要3個(gè)按鍵,因此選用獨(dú)立式鍵盤。如圖7所示,電路由按鍵和3個(gè)電阻組成,按鍵可以才喲功能輕觸開關(guān),按鍵分別命名為set、+1和 ret鍵,電阻阻值都為1k。將鍵盤直接與單片機(jī)的p3口相接,用p3.2口線通過按鍵se
15、t接入一個(gè)外部中斷的請(qǐng)求信號(hào)int0;p3.0、p3.1管腳作為i/o口使用。三個(gè)按鍵功能的設(shè)計(jì)思路如下:1)set鍵功能:設(shè)置當(dāng)前時(shí)間,即當(dāng)電子時(shí)鐘的時(shí)間有誤差時(shí),需要隨時(shí)對(duì)它進(jìn)行調(diào)整,使用set鍵與+1鍵、ret鍵配合來完成這一功能。當(dāng)set鍵被按下時(shí),在單片機(jī)的int0管腳產(chǎn)生一個(gè)低電平觸發(fā)中斷請(qǐng)求信號(hào),cpu響應(yīng)中斷請(qǐng)求時(shí),就轉(zhuǎn)移到int0中斷服務(wù)程序的入口地址,執(zhí)行中斷服務(wù)程序。設(shè)計(jì)int0的中斷服務(wù)程序的功能是調(diào)整當(dāng)前時(shí)間,程序的標(biāo)號(hào)地址是inta。2)+1調(diào)整鍵功能:分別對(duì)時(shí)間值的小時(shí)十位、小時(shí)個(gè)位、分的十位、分的個(gè)位進(jìn)行+1調(diào)整,即該按鍵每按下一次,對(duì)應(yīng)的時(shí)間調(diào)整位+1。該信號(hào)
16、與p3.0管腳連接,當(dāng)p3.0工作在i/o接口方式時(shí),為了保證能正確輸入外部信息,在初始化程序中用指令“setb p3.0”對(duì)它進(jìn)行編程,即將p3.0管腳作為輸入口使用。3)ret確認(rèn)鍵功能:確認(rèn),即對(duì)+1調(diào)整位進(jìn)行確認(rèn),該鍵按下時(shí),說明被調(diào)整位的值已經(jīng)確定,轉(zhuǎn)去調(diào)整下一位。該信號(hào)與p3.1管腳連接,與p3.0類似,用于i/o接口方式時(shí),在初始化程序中用指令“setb p3.1”對(duì)它進(jìn)行編程,即將p3.1管腳作為輸入口使用。鍵盤的硬件電路設(shè)計(jì)只是完成3個(gè)按鍵信號(hào)可靠輸入,要想實(shí)現(xiàn)鍵盤的輸入功能,還要靠軟件編程來具體實(shí)現(xiàn)。設(shè)置當(dāng)前時(shí)間的中斷服務(wù)程序,請(qǐng)參見軟件設(shè)計(jì)一章中的inta子程序設(shè)計(jì)。2.
17、6語音輸出與打鈴電路設(shè)計(jì)要求到某一作息時(shí)間電鈴或語音有輸出。我們用發(fā)光二極管代替語音輸出設(shè)備,用代替電鈴。電路設(shè)計(jì)如圖8所示。蜂鳴器作為三極管vt的集電極負(fù)載,當(dāng)vt導(dǎo)通時(shí),蜂鳴器發(fā)出鳴叫聲音;vt截止,蜂鳴器不發(fā)聲。r是限流電阻。蜂鳴器電路與單片機(jī)的接口:vt的基極接到單片機(jī)的p1.7管腳,p1.7口作為輸出口使用。當(dāng)p1.7=0時(shí),vt導(dǎo)通,是蜂鳴器的兩管腳獲得將近5v的直流電壓,蜂鳴器中有電流通過,而產(chǎn)生蜂鳴音;當(dāng)p1.7=1時(shí),vt截止,蜂鳴器的兩管腳間的直流電壓接近于0v,蜂鳴器不發(fā)聲。發(fā)光二極管與單片機(jī)的接口:發(fā)光二極管的陰極與單片機(jī)的p1.6管腳相連。當(dāng)p1.6=0時(shí),發(fā)光二極管
18、亮,表示有語音輸出,當(dāng)p1.6=1時(shí),發(fā)光二極管滅,此時(shí)無語音輸出。圖8 語音輸出與打鈴電路通過前面的設(shè)計(jì)過程,可設(shè)計(jì)出作息時(shí)間控制系統(tǒng)的硬件總電路如附錄a所示。 第3章 控制系統(tǒng)軟件設(shè)計(jì)3.1軟件設(shè)計(jì)方案確定 根據(jù)設(shè)計(jì)要求,我們將軟件設(shè)計(jì)分成6個(gè)功能模塊,分別是主程序模塊、數(shù)碼管動(dòng)態(tài)掃描模塊、當(dāng)前時(shí)間計(jì)時(shí)模塊、當(dāng)前時(shí)間調(diào)整模塊、鬧鈴與語音、輸出模塊、數(shù)制轉(zhuǎn)換模塊(如圖所示)。各功能模塊都具有獨(dú)立的功能,產(chǎn)生相應(yīng)的結(jié)果,模塊的具體設(shè)計(jì)請(qǐng)見后面章節(jié)。主程序模塊數(shù)碼管動(dòng)態(tài)掃描模塊當(dāng)前時(shí)間計(jì)時(shí)模塊當(dāng)前時(shí)間調(diào)整模塊鬧鈴與語音輸出模塊數(shù)制轉(zhuǎn)換模塊圖9 作息時(shí)間系統(tǒng)軟件設(shè)計(jì)模塊3.2內(nèi)存空間分配 一般在程
19、序設(shè)計(jì)前要對(duì)內(nèi)存進(jìn)行合理的分配,這樣既可使得編程時(shí)心中有數(shù),又可充分利用單片機(jī)內(nèi)部ram有限的存儲(chǔ)空間。作息時(shí)間系統(tǒng)程序設(shè)計(jì)內(nèi)存分配見表2。表二 內(nèi)存空間分配表地 址 分 配作 用60h7fh堆棧區(qū)40h45hled段碼顯示緩沖區(qū),存儲(chǔ)顯示字符bcd碼,低四位有效48h4dhled位碼顯示緩沖區(qū),存儲(chǔ)led位碼信號(hào),低六位有效32h34h當(dāng)前時(shí)間的二進(jìn)制存儲(chǔ)單元,32h存儲(chǔ)小時(shí),33h存儲(chǔ)分,34h存儲(chǔ)秒。29h輸入鍵值存儲(chǔ)單元30h當(dāng)前調(diào)整位標(biāo)志31hled顯示位數(shù)存儲(chǔ)單元02h05h計(jì)時(shí)用工作寄存器(0區(qū)r2r5)18h1ah動(dòng)態(tài)掃描用工作寄存器(3區(qū)r0r2)2eh控制字存儲(chǔ)區(qū)地址指針暫
20、存單元6ah控制字開關(guān)操作碼暫存單元6bh6dh依次存控制字的秒值、分值和小時(shí)值3.3主程序設(shè)計(jì)主程序的內(nèi)容一般包括:主程序起始地址、中斷服務(wù)程序入口地址、有關(guān)內(nèi)存單元及相關(guān)部件的初始化和一些子程序調(diào)用等。主程序設(shè)計(jì)框圖如圖所示。1)程序的起始地址:mcs-51系列單片機(jī)復(fù)位后,(pc)=0000h,而0003h002bh分別為各中斷源的入口地址。所以,編程是應(yīng)在0000h處寫一跳轉(zhuǎn)指令。2)主程序初始化內(nèi)容:所謂初始化,是對(duì)將要用到的mcs-51系列單片機(jī)內(nèi)部部件或擴(kuò)展芯片進(jìn)行初始工作狀態(tài)設(shè)定。mcs-51系列單片機(jī)復(fù)位后,特殊功能寄存器ie、ip的內(nèi)容均為00h,所以應(yīng)對(duì)ie、ip進(jìn)行初始
21、化編程。同時(shí)還要對(duì)一些存儲(chǔ)單元進(jìn)行初始化,這些內(nèi)容都應(yīng)在初始化程序中完成。參見main標(biāo)號(hào)地址到loop標(biāo)號(hào)地址之間的內(nèi)容。3)代碼轉(zhuǎn)化程序:由于人們習(xí)慣使用十進(jìn)制數(shù),而計(jì)算機(jī)的鍵盤輸入、輸出以及顯示常采用二進(jìn)制編碼的十進(jìn)制數(shù)(即bcd碼)。因此,在程序中經(jīng)常要進(jìn)行代碼轉(zhuǎn)換。其程序見loop標(biāo)號(hào)地址到lop標(biāo)號(hào)地址間的內(nèi)容。這段程序的功能是完成將當(dāng)前時(shí)間的二進(jìn)制數(shù)轉(zhuǎn)化為bcd代碼,并送顯示緩沖區(qū)。圖10 主程序設(shè)計(jì)框圖3.4各子模塊設(shè)計(jì)3.4.1led動(dòng)態(tài)掃描程序模塊設(shè)計(jì) 在采用動(dòng)態(tài)掃描顯示方式時(shí),要是led顯示比較均勻,又有足夠亮度,需要設(shè)置適當(dāng)?shù)膾呙桀l率。當(dāng)掃描頻率在70hz左右時(shí),能夠產(chǎn)
22、生足夠的圖形和較好的顯示效果。一般可以采用間隔20ms對(duì)led進(jìn)行動(dòng)態(tài)掃描一次,每一位led的顯示時(shí)間為2ms。程序流程如圖所示。 本系統(tǒng)設(shè)計(jì)中 ,采用硬件定時(shí)和軟件定時(shí)并用的方式,即t0溢出中斷功能實(shí)現(xiàn)20ms定時(shí),通過軟件延時(shí)程序?qū)崿F(xiàn)1ms定時(shí)。1)t0定時(shí)器中斷服務(wù)程序的功能 從顯示緩沖區(qū)分別取出顯示數(shù)據(jù)的位碼和段碼,分別送p1口和數(shù)據(jù)輸出p0口,依次顯示每一位,每一位能顯示時(shí)間為2ms,顯示6位需要12ms的時(shí)間;led顯示器顯示每一位時(shí)間為2ms,延時(shí)2ms子程序是典型的軟 圖11 led動(dòng)態(tài)掃描程序流程圖件定時(shí)程序(程序見delay1標(biāo)號(hào)地址到delay標(biāo)號(hào)地址)。2)定時(shí)器t0的
23、計(jì)數(shù)初值x=09f0h,即有 th0=09h tl0=0f0h工作方式寄存器tmod=0000 0001b=01h,t0定時(shí)器以工作方式1完成定時(shí)。3.4.2時(shí)鐘計(jì)時(shí)程序模塊設(shè)計(jì)作息時(shí)間控制系統(tǒng)必須設(shè)計(jì)一個(gè)時(shí)鐘程序來實(shí)現(xiàn)24h的定時(shí)功能。本系統(tǒng)中單片機(jī)的時(shí)鐘頻率為6mhz,則定時(shí)器最長的定時(shí)時(shí)間是131。72ms,以此來產(chǎn)生24小時(shí)的時(shí)間值,可采用硬件定時(shí)與軟件定時(shí)想結(jié)合的方法來實(shí)現(xiàn)。1)24小時(shí)時(shí)間的產(chǎn)生。選擇定時(shí)器t1,用工作方式1,定時(shí)100ms。t1定時(shí)100ms中斷一次,利用r2累加器加1,當(dāng)r2=10時(shí),時(shí)間正好是1s;再利用r3計(jì)數(shù)60s,依次類推,累計(jì)24h的時(shí)間值,需要設(shè)置以
24、下幾個(gè)寄存器:r2:累計(jì)1s時(shí)間寄存器。t1中斷一次r2=r2+1,計(jì)數(shù)十次向r3進(jìn)位,并將r2清零。r3:累計(jì)60s時(shí)間寄存器。當(dāng)r3=60s向r4進(jìn)位,并使r3=0。r4:累計(jì)60min時(shí)間寄存器。當(dāng)r4=60min向r5進(jìn)位,并將r4清零。r5:累計(jì)24h時(shí)間寄存器。當(dāng)r5=24h,正好是一晝夜,并使r5=0。r2r5按二進(jìn)制計(jì)數(shù),程序設(shè)計(jì)的思路和方法,如圖程序框圖和程序清單。 2)定時(shí)器t1的計(jì)算初值x=3cb0h。初值寄存器的初值th1=3ch,tl1=0b0h,工作方式寄存器tmod=0001 0000b=10h。t1定時(shí)器每中斷一次,中斷10次為1s。程序流程圖如圖12所示圖12
25、 t1定時(shí)器程序設(shè)計(jì)流程圖3.4.3鍵盤接受子程序設(shè)計(jì)由于機(jī)械觸點(diǎn)的彈性作用,在閉合及斷開的瞬間均伴隨有一連串的抖動(dòng),而按鍵穩(wěn)定閉合時(shí)間的長短則是由操作人員的按鍵動(dòng)作決定的,為了確保cpu對(duì)鍵的一次閉合僅作一次處理,鍵抖動(dòng)可用硬件或軟件兩種方法消除。這里采用軟件去抖動(dòng)的方法,程序流程圖如圖13所示,程序見inta中斷服務(wù)程序。(4)鬧鈴與語音輸出模塊設(shè)計(jì) 作息時(shí)間的主要功能就是實(shí)現(xiàn)自動(dòng)打鈴和放語音。該模塊的設(shè)計(jì)流程如圖14所示。在主程序的每一個(gè)掃描周期都調(diào)用該子程序,當(dāng)作息時(shí)間與計(jì)時(shí)時(shí)間相等時(shí),就進(jìn)行相關(guān)功能的選擇執(zhí)行。具體程序見ring子程序。圖14 打鈴程序流程圖3.5程序清單 見附錄b第
26、四章 調(diào)試步驟與結(jié)果1 輸入源程序 輸入源程序時(shí),應(yīng)以西文方式輸入字母和符號(hào),且中文注釋前要加分號(hào)。 2對(duì)源程序進(jìn)行匯編和糾錯(cuò) 根據(jù)自動(dòng)匯編提供的錯(cuò)誤信息逐條糾正錯(cuò)誤,直至匯編信息提示無誤。 3確定調(diào)試方案 在調(diào)試程序前認(rèn)真分析源程序,確定各功能程序運(yùn)行的預(yù)期結(jié)果。然后結(jié)合源程序應(yīng)達(dá)到的結(jié)果,通過某些關(guān)鍵參數(shù)和實(shí)驗(yàn)現(xiàn)象檢驗(yàn)程序運(yùn)行結(jié)果正確與否。并針對(duì)具體的分析和觀察對(duì)象選擇較合適的調(diào)試方法。如單步運(yùn)行、跟蹤運(yùn)行、連續(xù)運(yùn)行、快速運(yùn)行至光標(biāo)處、設(shè)置斷點(diǎn)等調(diào)試方法。 4調(diào)試程序1) 調(diào)試子程序。由于程序比較多,整體調(diào)試不容易發(fā)現(xiàn)和改正錯(cuò)誤,故采取子程序調(diào)試的方法,但要明確子程序的具體功能。例如:調(diào)試
27、顯示子程序時(shí),只將顯示子程序進(jìn)行匯編,確認(rèn)無誤后單步執(zhí)行,觀察cpu窗口和data窗口以及code窗口相應(yīng)單元的變化是否跟預(yù)期的一樣。如果有問題找出問題所在。采取各個(gè)擊破的方法調(diào)試好各個(gè)子程序。2)確定各子程序無誤后,再調(diào)試完整的程序,要注意各子程序之間的銜接以及和主程序之間的調(diào)用和返回。運(yùn)行后,觀察有無顯示,時(shí)鐘是否工作,其時(shí)、分、秒顯示的變化過程是否正確。若運(yùn)行結(jié)果不正確,首先應(yīng)根據(jù)程序運(yùn)行的實(shí)際現(xiàn)象分析判斷哪些因素可引起相關(guān)故障,再通過調(diào)試方法逐一認(rèn)證和排除。通過反復(fù)調(diào)試,發(fā)現(xiàn)并排除軟件與硬件存在的各類問題,以滿足系統(tǒng)設(shè)計(jì)的預(yù)期目的。 5、調(diào)試結(jié)果運(yùn)行主程序后,可看到六位led顯示器全亮
28、,并且每過一秒,最低位顯示器加一,當(dāng)加到59后,返回0。改變時(shí)間初值,顯示相應(yīng)的時(shí)間,分鐘到59后,也能返回0,小時(shí)到23后能返回0。若設(shè)定初始時(shí)間為7:59:59則過1秒后p1.7對(duì)應(yīng)的發(fā)光二極管亮,過10秒后p1.7對(duì)應(yīng)的發(fā)光二極管滅;若設(shè)定初始時(shí)間為9:40:59,則過1秒后p1.6所對(duì)應(yīng)的發(fā)光二極管亮,若設(shè)定初始時(shí)間為9:58:59,過1秒后p1.6所對(duì)應(yīng)的發(fā)光二極管滅說明調(diào)試正確。第五章 總 結(jié) 在這兩周的學(xué)習(xí)和設(shè)計(jì)中,使我充分認(rèn)識(shí)到理論聯(lián)系實(shí)際的重要。安裝和調(diào)試自始至終要有嚴(yán)謹(jǐn)?shù)目茖W(xué)作風(fēng),不能抱有僥幸心理。理論固然重要,但是在實(shí)際應(yīng)用中遇到的很多問題是不容忽視的。在第一周,我們通過
29、找大量的資料和同學(xué)們一起研究和討論,認(rèn)識(shí)設(shè)計(jì)的內(nèi)容,將其分為兩大部分(硬件設(shè)計(jì)部分和軟件設(shè)計(jì)部分),終于設(shè)計(jì)出一套完整的方案。但是將這些具體的方案落實(shí)到實(shí)際設(shè)計(jì)中,出現(xiàn)很多錯(cuò)誤,而那些錯(cuò)誤在原則上是可以避免的,這就需要我們?cè)谡{(diào)試過程中利用所掌握的知識(shí)認(rèn)真檢查,發(fā)現(xiàn)不足。然后在討論如何解決不足之處,如此一次次的改,一次次的查,直到完全符合我們的功能要求。無數(shù)次的嘗試總算是把設(shè)計(jì)搞好了,電路調(diào)試成功。真是難以去形容那種愉悅的心情。自己的付出總算是有了回報(bào)。我也得到了自己知識(shí)不足的教訓(xùn)。感覺在知識(shí)不牢固的時(shí)候是多么無助。自己要反復(fù)的去查閱以前的課本和書籍是多煩瑣的事情。這也就堅(jiān)定了我在以后的學(xué)習(xí)中要
30、認(rèn)真學(xué)好基礎(chǔ)知識(shí)的決心。總體來說,這次實(shí)習(xí)使我受益匪淺。在摸索該如何設(shè)計(jì)電路使之實(shí)現(xiàn)所需功能的過程中,特別有趣,培養(yǎng)了我的設(shè)計(jì)思維,增加了實(shí)際操作能力。在讓我體會(huì)到了設(shè)計(jì)電路的艱辛的同時(shí),更讓我體會(huì)到成功的喜悅和快樂。通過這次課程設(shè)計(jì),我認(rèn)識(shí)到單片機(jī)設(shè)計(jì)中應(yīng)注意的幾個(gè)問題:(1)采用模塊化、子程序化的優(yōu)點(diǎn)是便于連接和移植,特別是重復(fù)使用時(shí)尤為方便。但使用者必須預(yù)先明確各子程序的入口參數(shù)、出口參數(shù)和所占用的資源,合理利用堆棧,避免主程序與子程序之間、子程序與子程序之間所占用的資源發(fā)生沖突。(2)在調(diào)試程序前,一定要預(yù)先將源程序分析透徹,在此基礎(chǔ)上訓(xùn)練如何通過實(shí)驗(yàn)現(xiàn)象分析和判斷產(chǎn)生故障的原因及故障
31、可能存在的大致范圍;靈活運(yùn)用開發(fā)系統(tǒng)所提供的各種調(diào)試方法,快速有效地排查和縮小故障范圍。通過反復(fù)調(diào)試,不斷地分析和排除故障,調(diào)試軟件和硬件的能力及速度。(3)調(diào)試程序時(shí),要結(jié)合能反映故障存在與否的參數(shù)變化、運(yùn)行路徑變化、顯示內(nèi)容變化等,選擇合適的觀測點(diǎn)和觀測對(duì)象,再運(yùn)用適當(dāng)?shù)恼{(diào)試方法,快速地檢驗(yàn)調(diào)試結(jié)果,由此分析和判斷故障點(diǎn)。致 謝 兩周的課程設(shè)計(jì)結(jié)束了,在此我想對(duì)我的指導(dǎo)老師王迎旭老師表達(dá)我衷心的謝意。在她耐心的指導(dǎo)下,使這次課程設(shè)計(jì)取得了較滿意的結(jié)果。這次設(shè)計(jì)過程中得到了其他老師的指導(dǎo)和幫助,在此一并表示衷心的感謝。在設(shè)計(jì)中,我查了不少參考資料,在此向其作者表示敬意!參考文獻(xiàn):1王迎旭.單
32、片機(jī)原理與應(yīng)用.機(jī)械工業(yè)出版社.2005.82李全利、遲榮強(qiáng).單片機(jī)原理及接口技術(shù).高等教育社.2004.13譚浩強(qiáng).mcs-51單片機(jī)應(yīng)用教程.清華大學(xué)出版社.2004.3附錄a:程序清單 sec equ 32h min equ 33h hour equ 34horg 0000hljmp main ;轉(zhuǎn)主程序org 0003h ;外部中斷0中斷服務(wù)程序入口地址ljmp inta ;轉(zhuǎn)外部中斷0中斷服務(wù)程序org 000bh ;t0定時(shí)服務(wù)程序入口地址ljmp t0_sev ;轉(zhuǎn)t0定時(shí)服務(wù)程序org 001bh ;t1定時(shí)服務(wù)程序入口地址ljmp t1_sev ;轉(zhuǎn)t0定時(shí)服務(wù)程序org 0
33、030h ;設(shè)置主程序起始地址=0030hmain: mov sp,#60h ;設(shè)堆棧區(qū) mov 48h,#0dfh ;led位選擇碼 mov 49h,#0efh mov 4ah,#0f7h mov 4bh,#0fbh mov 4ch,#0fdh mov 4dh,#0feh mov sec,#10 mov min,#30 mov hour,#06 ;設(shè)置時(shí)間初值為12:00:00 mov tmod,#99h 設(shè)置t1,t0定時(shí)器,工作方式一 mov th1,#3ch ;t1定時(shí)100ms mov tl1,#0b0h mov th0,#0d9h mov tl0,#0f0h ;t0定時(shí)20ms定時(shí)
34、 mov ip, #08h ;設(shè)置優(yōu)先級(jí) mov tcon,#50h ;啟動(dòng)t1,t0定時(shí) mov ie,#9fh ;開中斷l(xiāng)oop: mov b,#10 ;將二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn);制數(shù)(bcd碼) mov a,hour ;并送到顯示緩沖區(qū)40h到45h div ab mov 40h,a mov 41h,b mov b,#10 mov a,min div ab mov 42h,a mov 43h,b mov b,#10 mov a,sec div ab mov 44h,a mov 45h,b lcall ring ;調(diào)用打鈴子程序 nop sjmp loop;t0中斷服務(wù)程序t0_sev: pu
35、sh a push psw setb rs1 setb rs0 clr tr0 mov r2,#06h ;設(shè)置顯示器位數(shù) mov r0,#40h ;設(shè)置段碼首地址 mov r1,#48h ;設(shè)置位碼首地址go_on: mov a,r2 ;送顯示位數(shù)a mov a,r1 ;送位碼到a累加器 mov p1,a ;將位碼送p1口 mov a,r0 ;送段碼到a累加器 mov dptr,#worldtab movc a,a+dptr mov dptr,#0cfa0h ;將段碼輸出 movx dptr,a lcall delay1 ;調(diào)用延時(shí)子程序,延時(shí)2ms inc r0 ;段碼地址+1 inc r1
36、 ;位碼地址+1 djnz r2,go_on ;判斷6位是否顯示完,;沒完繼續(xù)顯示下一位 mov th0,#0d9h mov tl0,#0f0h pop a setb et0 setb tr0 setb ea retidelay1: mov r3,#10h ;延時(shí)2ms子程序again: mov r4,#48hdelay: nop nop djnz r4,delay djnz r3,again ret;t1定時(shí)器每100ms中斷一次,中斷10次為1s。程序如下:t1_sev: mov th1,#3ch ;重置t1計(jì)數(shù)初值 mov tl1,#0b0h push a ;保護(hù)現(xiàn)場 push b pu
37、sh psw clr ea clr rs1 clr rs0 ;選擇0區(qū)工作寄存器 inc r2 cjne r2,#0ah,en mov r2,#0 inc r3 ;秒計(jì)時(shí)單元r3加1 mov sec,r3 ;秒值送32h單元 cjne r3,#3ch,en ;判斷r3=60s否,否則轉(zhuǎn)en mov r3,#0 ;60s時(shí)間到,r3=0 mov sec,r3 ;秒值送32h單元 inc r4 ;分計(jì)時(shí)單元r4加1 mov min,r4 ;分值送33h單元 cjne r4,#3ch,en ;判斷r3=60min否,否則轉(zhuǎn)en mov r4,#0 ;60min時(shí)間到,r4=0 mov min,r4
38、;分值送33h單元 inc r5 ;小時(shí)單元r5加1 mov hour,r5 ;小時(shí)值送34h單元 cjne r5,#18h,en ;判斷r5=24h否,;否則轉(zhuǎn)en標(biāo)號(hào)地址 mov r5,#0 ;24h時(shí)間到,r5=0 mov hour,r5 ;小時(shí)值送34h單元en: pop psw ;恢復(fù)現(xiàn)場 pop b pop a setb ea ;開中斷 reti ;中斷返回;打鈴子程序如下: ring: mov r3,#04h mov dptr,#2ffchloop3: mov r1,#35h mov a,#0h inc dptr djnz r3,loop3 movc a,a+dptr ;讀取控制
39、碼 jz loop2 ;控制碼為0則返回 mov 6ah,a ;存控制字 mov r3,#03hloop1: inc dptr ;地址指針增量 dec r1 ;計(jì)時(shí)單元地址減量 mov a,#0h movc a,a+dptr ;讀作息時(shí)間(秒,分,時(shí)) mov 6bh,a ;存作息時(shí)間 mov a,r1 ;讀計(jì)時(shí)時(shí)間 cjne a,6bh,loop3 ;計(jì)時(shí)時(shí)間與作息時(shí)間比較 ;不等則轉(zhuǎn),繼續(xù)讀下面的控制碼 djnz r3,loop1 ;共讀取3次 mov a,6ah ;開關(guān)操作碼送a mov r3,#04h cjne a,#0feh,bb ;判斷是否打鈴定時(shí)時(shí)間到 clr p1.7 ;打鈴
40、sjmp loop3bb: cjne a,#7fh,cc ;判斷是否播音時(shí)間到 clr p1.6 ;放音樂 sjmp loop3cc: cjne a,#0fdh,dd setb p1.7 sjmp loop3dd: cjne a,#0bfh,loop2 setb p1.6loop2: ret ;返回;設(shè)置當(dāng)前時(shí)間程序如下:inta:setb p3.0 ;輸入鍵值前,先將p3.0、p3.1置1 setb p3.1 clr tr1 ;t1停止定時(shí) clr et1 ;t1禁止中斷 clr ex0 ;int0禁止中斷 setb ea ;開中斷 setb pt0 ;允許t0中斷 push a ;保護(hù)現(xiàn)場
41、 push b push psw mov 31h,#06h ;(31h=06h(led位數(shù)) mov 29h,#00h ;(29h)=00hlp0: mov a,p3 anl a,#01h cjne a,#0,next0 ;判斷p3.0鍵(+1鍵)按下否,;否則轉(zhuǎn)next0 lcall delay1 ;有鍵按下,延時(shí)1ms mov a,p3 anl a,#01h cjne a,#0,lp0 ;判斷是否松開,否則轉(zhuǎn)lp0lp1: mov a,p3 anl a,#01h cjne a,#01h,lp1 ;等待鍵松開 inc 29h ;鍵松開后,(29h)+1 mov 30h,#1h sjmp lp
42、1next0:mov a,p3 anl a,#02h cjne a,#0,ll1 ;判斷p3.1是否按下,否則轉(zhuǎn)l1 lcall delay1 mov a,p3 anl a,#01h cjne a,#0,next0 ;是否松開,否則轉(zhuǎn)next0ld1:mov a,p3 anl a,#02h cjne a,#02h,ld1 ;是否松開,否則轉(zhuǎn)ld1 mov 29h,#0 mov 30h,#1 djnz 31h,lo1 sjmp lllo1:mov a,31h cjne a,#06h,lo2 ;是時(shí)鐘十位嗎?否則轉(zhuǎn)lo2 mov a,29h cjne a,#03h,la1 ;十位等于3嗎?否則轉(zhuǎn)l
43、a1 mov 29h,#00h ;是的,清零la1:mov 40h,29h ;(29h)-(40h) sjmp ll1 ;轉(zhuǎn)l1lpp0:sjmp lp0lo2:mov a,31h cjne a,#05h,lo3 ;是時(shí)鐘個(gè)位嗎?否則轉(zhuǎn)lo3 mov a,40h cjne a,#2,a1 mov a,29h cjne a,#4,la2 mov 29h,#0 sjmp la2a1:mov a,29h cjne a,#0ah,la2 mov 29h,#00hla2:mov 41h,29h sjmp ll1lo3:mov a,31h cjne a,#04h,lo4 ;是分鐘是十位嗎?否則轉(zhuǎn)lo4 mov a,29h cjne a,#06h,la3 ;大于5嗎?否則轉(zhuǎn)la3 mov 29h,#00hla3:mov 42h,29h sjmp ll1ll1:sjmp l1lo4:mov a,31h cjne a,#03h,lo5 ;是分鐘是個(gè)位嗎?否則轉(zhuǎn)lo5 mov a,29h cjne a,#0ah,la4 ;大于9嗎?否則轉(zhuǎn)la4 mov 29h,#00hla4:mov 43h,29h sjmp l1lo5:mov a,31h cjne a,#02h,lo6 ;是秒鐘是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 特殊教育教師自查報(bào)告及改進(jìn)措施
- 高功率納秒摻銩帶內(nèi)泵浦摻鈥激光器研究
- 民間綠化組織勞動(dòng)力支持與保障措施
- 高職院校教學(xué)改革心得體會(huì)
- 醫(yī)療設(shè)備材料進(jìn)出場及管理計(jì)劃
- 復(fù)雜動(dòng)態(tài)系統(tǒng)理論視域下學(xué)術(shù)型英語專業(yè)研究生學(xué)術(shù)動(dòng)機(jī)動(dòng)態(tài)變化的反溯研究
- 公司年會(huì)影視娛樂活動(dòng)計(jì)劃
- 汽車檢測機(jī)構(gòu)年度質(zhì)量監(jiān)督計(jì)劃
- 綠色信貸資產(chǎn)證券化定價(jià)研究-以XX2022-1為例
- 簡愛讀后感關(guān)于愛情與自由的思考15篇
- 營房維修考試題及答案
- 足浴店面轉(zhuǎn)讓協(xié)議書
- 2024統(tǒng)編版七年級(jí)歷史下冊(cè)期末復(fù)習(xí)全冊(cè)背記知識(shí)點(diǎn)考點(diǎn)提綱(含答案)
- 全員育人導(dǎo)師制制度、考核方案、實(shí)施方案
- 夏日水槍大戰(zhàn)課件
- 完整版100以內(nèi)不進(jìn)位加法練習(xí)題294
- 綜合與實(shí)踐+白晝時(shí)長規(guī)律的探究教案+2024-2025學(xué)年人教版數(shù)學(xué)七年級(jí)下冊(cè)
- 解除律師委托代理協(xié)議
- 安全生產(chǎn)標(biāo)準(zhǔn)化星級(jí)班組建設(shè)實(shí)施方案及評(píng)分標(biāo)準(zhǔn)
- 2025年化妝品技術(shù)合作研發(fā)協(xié)議書樣本
- 海姆立克急救法操作考核標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論