課程設(shè)計--單片機(jī)定時鬧鐘設(shè)計報告_第1頁
已閱讀1頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  《單片機(jī)應(yīng)用》</b></p><p><b>  課程設(shè)計報告</b></p><p>  教學(xué)院(部) 電氣與電子信息工程學(xué)院 </p><p>  教 研 室 電氣自動化    </p><p>

2、;  指 導(dǎo) 教 師 </p><p>  課程設(shè)計時 間 2012.5.7~2012.5.11 </p><p>  課程設(shè)計班 級 </p><p>  學(xué) 號

3、 </p><p>  姓 名 </p><p>  同 組 人 </p><p><b>  課程設(shè)計任務(wù)書</b></p>&

4、lt;p>  一、課程設(shè)計題目: 單片機(jī)應(yīng)用 </p><p><b>  二、課程設(shè)計內(nèi)容</b></p><p>  1. 根據(jù)具體設(shè)計課題的技術(shù)指標(biāo)和給定條件,以單片機(jī)為核心器件,能獨立而正確地進(jìn)行方案論證和電路設(shè)計,要求概念清楚、方案合理、方法正確、步驟完整;</p><p>  2. 熟悉、掌握各種外圍接口電路芯片的工作

5、原理和控制方法;</p><p>  3. 熟練使用單片機(jī)匯編語言進(jìn)行軟件設(shè)計;</p><p>  4. 熟練使用Proteus、Keil軟件進(jìn)行仿真電路測試;</p><p>  5. 熟練使用Protel軟件設(shè)計印刷電路板;</p><p>  6. 學(xué)會查閱有關(guān)參考資料和手冊,并能正確選擇有關(guān)元器件和參數(shù);</p>&l

6、t;p>  7. 編寫設(shè)計說明書,參考畢業(yè)設(shè)計論文格式撰寫設(shè)計報告。</p><p><b>  三、進(jìn)度安排</b></p><p><b>  1.時間安排</b></p><p><b>  四、基本要求</b></p><p> ?。?)根據(jù)要求確定系統(tǒng)設(shè)計方案;

7、</p><p>  (2)繪制系統(tǒng)框圖、系統(tǒng)原理總圖,印刷電路板圖,列出元器件明細(xì)表;</p><p> ?。?)計算電路參數(shù)和選擇元器件,畫出軟件框圖,列出程序清單;</p><p>  (4)仿真,測試與修改調(diào)整;</p><p> ?。?)誤差分析與調(diào)整;</p><p> ?。?)寫出使用說明書;</p

8、><p> ?。?)對設(shè)計進(jìn)行全面總結(jié),寫出課程設(shè)計報告。</p><p>  五、課程設(shè)計考核辦法與成績評定</p><p>  六、課程設(shè)計參考資料</p><p>  [1]電氣與電子信息工程學(xué)院.單片機(jī)實驗指導(dǎo)書 </p><p>  [2]熊靜琪.計算機(jī)控制技術(shù).北京:電子工業(yè)出版社,2003.</p>

9、;<p>  [3]黃忠霖.控制系統(tǒng)MATIAB計算及仿真.北京:國防工業(yè)出版社, 2004.</p><p>  [4]彭為等.單片機(jī)典型系統(tǒng)設(shè)計實例精講. 北京:電子工業(yè)出版社,2007</p><p>  [5]王慶利等.單片機(jī)設(shè)計案例實踐教程.北京:北京郵電大學(xué)出版社,2008</p><p>  [6]韓志軍等.單片機(jī)應(yīng)用系統(tǒng)設(shè)計——入門向?qū)?/p>

10、與設(shè)計實例.北京:機(jī)械工業(yè)出版社,2005</p><p>  [7]皮大能等. 單片機(jī)課程設(shè)計指導(dǎo)書. 北京:北京理工大學(xué)出版社,2010</p><p>  指導(dǎo)教師: 陶彪 胡薔 </p><p><b>  摘要</b></p><p>  本次課程設(shè)計是在單片機(jī)授課結(jié)束的情況下,通過老師的指導(dǎo)

11、和小組同學(xué)的協(xié)助,獨立自主的完成項目設(shè)計,我們小組選定的是定時鬧鐘的設(shè)計,下面簡單闡述一下該項目的設(shè)計思路。</p><p>  利用動態(tài)數(shù)碼管作為顯示器,K20-K27作為輸入按鍵,蜂鳴器作為聲音輸出制作一個定時鬧鐘。</p><p><b>  最后結(jié)果要求做到:</b></p><p><b>  1、正確顯示時分。</b

12、></p><p>  2、可以利用按鈕調(diào)整時間和設(shè)定鬧鐘時間。</p><p>  3、當(dāng)時間到達(dá)設(shè)定的鬧鐘時間時,蜂鳴器發(fā)出嘀、嘀、嘀的報警聲。</p><p>  4、通過串口在PC上設(shè)定時間和鬧鐘。</p><p>  關(guān)鍵字:定時鬧鐘 </p><p><b>  目錄</b>

13、</p><p><b>  1 概述5</b></p><p>  2主要硬件介紹及電路原理設(shè)計6</p><p>  2.1 STC89C52RC單片機(jī)簡要介紹7</p><p>  2.2鍵盤和LED數(shù)碼管顯示器簡介8</p><p>  2.3主要電路原理與設(shè)計9</p&g

14、t;<p><b>  3 軟件設(shè)計11</b></p><p><b>  3.1 概述12</b></p><p>  3.2 主模塊的設(shè)計12</p><p>  3.3 基本顯示模塊設(shè)計12</p><p>  3.4 時間設(shè)定模塊設(shè)計13</p>&l

15、t;p>  3.5 鬧鈴功能的實現(xiàn)14</p><p>  4.Proteus軟件仿真15</p><p>  5課程設(shè)計體會17</p><p><b>  參考文獻(xiàn)18</b></p><p><b>  附:程序清單19</b></p><p><

16、b>  1.概述</b></p><p>  本設(shè)計是定時鬧鐘的設(shè)計,由單片機(jī)AT89C51芯片和LED數(shù)碼管為核心,輔以必要的電路,構(gòu)成的一個單片機(jī)電子定時鬧鐘。</p><p>  定時鬧鐘設(shè)計可采用數(shù)字電路實現(xiàn),也可以采用單片機(jī)來完成。定時鬧鐘是用數(shù)字集成電路構(gòu)成的,用數(shù)碼管顯示“時”,“分”,“秒”的現(xiàn)代計時裝置。單片機(jī)具有集成度高、功能強(qiáng)、通用性好、特別是它能耗

17、低、價格便宜、可靠性高、抗干擾能力強(qiáng)和使用方便等獨特的優(yōu)點,所以單片機(jī)現(xiàn)在廣泛的應(yīng)用到家用電器、機(jī)電產(chǎn)品、兒童玩具、機(jī)器人、辦公自動化產(chǎn)品等領(lǐng)域。所以在該設(shè)計中采用單片機(jī)利用AT89C51,它是低功耗、高性能的CMOS型8位單片機(jī)。片內(nèi)帶有4KB的Flash存儲器,且允許在系統(tǒng)內(nèi)改寫或用編程器編程。另外, AT89C51的指令系統(tǒng)和引腳與8051完全兼容,片內(nèi)有128B 的RAM、32條I/O口線、2個16位定時計數(shù)器、5個中斷源、一個

18、全雙工串行口等。AT89C51單片機(jī)結(jié)合七段顯示器設(shè)計的簡易定時鬧鈴時鐘,可以設(shè)置現(xiàn)在的時間及顯示鬧鈴設(shè)置時間,若時間到則發(fā)出一陣聲響,進(jìn)—步可以擴(kuò)充控制電器的啟停。</p><p>  設(shè)計內(nèi)容包括了秒信號發(fā)生器、時間顯示電路、按鍵電路、供電電源以及鬧鈴指示電路等幾部分的設(shè)計。采用四個開關(guān)來控制定時鬧鐘的工作狀態(tài),分別為:K1、設(shè)置時間和鬧鐘的小時;K2、設(shè)置小時以及設(shè)置鬧鐘的開關(guān);K3、設(shè)置分鐘和鬧鐘的分鐘;

19、K4、設(shè)置完成退出。</p><p>  課設(shè)準(zhǔn)備中根據(jù)具體的要求,查找資料,然后按要求根據(jù)已學(xué)過的時鐘程序編寫定時鬧鐘的程序,依據(jù)程序利用proteus軟件進(jìn)行了仿真試驗,對出現(xiàn)的問題進(jìn)行分析和反復(fù)修改源程序,最終得到正確并符合要求的結(jié)果。</p><p>  設(shè)計完成的定時鬧鐘達(dá)到課程設(shè)計的要求,在到達(dá)定時的時間便立即發(fā)出蜂鳴聲音,持續(xù)一分鐘。顯示采用的六位數(shù)碼管電路,如果亮度感覺不夠

20、,可以通過提升電阻來調(diào)節(jié),控制程序中延遲時間的長短,可以獲得不同的效果。也可以改蜂鳴器為繼電器,通過控制繼電器從而進(jìn)一步擴(kuò)展的來控制一些家電開關(guān)。</p><p>  2.主要硬件介紹及電路原理設(shè)計</p><p>  2.1 STC89C52RC單片機(jī)簡要介紹</p><p>  在單片機(jī)應(yīng)用系統(tǒng)中,單片機(jī)是整個系統(tǒng)的核心,對整個系統(tǒng)的信息輸入、處理、信息輸出進(jìn)行

21、控制。與單片機(jī)配套的有相應(yīng)的復(fù)位電路、時鐘電路以及擴(kuò)展的存儲器和I\O接口,使單片機(jī)應(yīng)用系統(tǒng)能夠運行。</p><p>  在一個單片機(jī)應(yīng)用系統(tǒng)中,往往都會輸入信息和顯示信息,這就涉及鍵盤和顯示器。在單片機(jī)應(yīng)用系統(tǒng)中,一般都根據(jù)系統(tǒng)的要求配置相應(yīng)的鍵盤和顯示器。配置鍵盤和顯示器一般都沒有統(tǒng)一的規(guī)定,有的系統(tǒng)功能復(fù)雜,需輸入的信息和顯示的信息量大,配置的鍵盤和顯示器功能相對強(qiáng)大,而有些系統(tǒng)輸入/輸出的信息少,這時可

22、能用幾個按鍵和幾個LED指示燈就可以進(jìn)行處理了。在單片機(jī)應(yīng)用系統(tǒng)在中配置的鍵盤可以是獨立鍵盤,也可能是矩陣鍵盤。顯示器可以是LED指示燈,也可以是LED數(shù)碼管,也可以是LCD顯示器,還可以使用CRT顯示器。單片機(jī)應(yīng)用系統(tǒng)中鍵盤一般用的比較多的是矩陣鍵盤,顯示器用的比較多的是LED數(shù)碼管還LCD顯示器。</p><p>  2.2 鍵盤和LED數(shù)碼管顯示器簡介</p><p>  鍵盤是單片

23、機(jī)應(yīng)用系統(tǒng)中最常用的輸入設(shè)備,在單片機(jī)應(yīng)用系統(tǒng)實現(xiàn)簡單的人機(jī)通信。鍵盤實際上是一組按鍵開關(guān)的集合,平時按鍵開關(guān)總是處于斷開狀態(tài),當(dāng)按下鍵時它才閉合。鍵盤的結(jié)構(gòu)形式一般有兩種:獨立式鍵盤和矩陣式鍵盤。矩陣式鍵盤的工作方式有3種:查詢工作方式、定時掃描工作方式和中斷工作方式。</p><p>  LED數(shù)碼管顯示器在單片機(jī)應(yīng)用系統(tǒng)中,經(jīng)常用到LED數(shù)碼管作為顯示輸出設(shè)備,LED數(shù)碼管顯示器雖然顯示信息簡單,但它具有顯

24、示清晰、亮度高、使用電壓低、壽命長、與單片機(jī)接口方便等特點,基本上能夠滿足單片機(jī)應(yīng)用系統(tǒng)的需要,所以在單片機(jī)應(yīng)用系統(tǒng)中經(jīng)常用到。LED數(shù)碼管顯示器是由發(fā)光二極管按一定的結(jié)構(gòu)組合起來的顯示器件。在單片機(jī)應(yīng)用系統(tǒng)中通常使用的是8段式LED數(shù)碼管顯示器,它有共陰極和共陽極兩種。所謂譯碼方式是指由顯示字符轉(zhuǎn)換得到對應(yīng)的字段碼的方式。對于LED數(shù)碼管顯示器,通常的譯碼方式</p><p>  有兩種:硬件譯碼方式和軟件譯碼

25、方式。LED數(shù)碼管在顯示時,通常有兩種顯示方式:靜態(tài)顯示方式和動態(tài)顯示方式。在使用時可以把它們組合起來。在實際應(yīng)用時,如果數(shù)碼管個數(shù)較少,通常用硬件譯碼靜態(tài)顯示,在數(shù)碼管個數(shù)較多時,則通常用軟件譯碼動態(tài)顯示。</p><p>  2.3主要電路原理設(shè)計</p><p> ?。?)系統(tǒng)硬件電路的設(shè)計:</p><p>  電路是由控制部分和顯示部分兩大部分組成。利用單

26、片機(jī)程序進(jìn)行控制,單片機(jī)以晶體振蕩器的振蕩周期(或外部引入的時鐘周期)為最小的時序單位,片內(nèi)的各種微操作都以此周期為時序基準(zhǔn)。振蕩頻率二分頻后形成狀態(tài)周期或稱s周期,所以,1個狀態(tài)周期包含有2個振蕩周期。振蕩頻率foscl2分頻后形成機(jī)器周期MC。所以,1個機(jī)器周期包含有6個狀態(tài)周期或12個振蕩周期。1個到4個機(jī)器周期確定一條指令的執(zhí)行時間,這個時間就是指令周期。AT89S52單片機(jī)指令系統(tǒng)中,各條指令的執(zhí)行時間都在1個到4個機(jī)器周期之

27、間。</p><p>  ,并通過數(shù)碼管進(jìn)行顯示單片機(jī)普遍采用鎖相環(huán)技術(shù),使單片機(jī)的時鐘頻率可由程序控制。鎖相環(huán)允許用戶在片外使用頻率較低的晶振,可以很大地減小板級噪聲;而且,由于時鐘頻率可由程序控制,系統(tǒng)時鐘可以在一個很寬的范圍內(nèi)調(diào)整,總線頻率往往能升得很高。但是,使用鎖相環(huán)也會帶來額外的功率消耗。 單就時鐘方案來講,使用外部晶振且不使用鎖相環(huán)是功率消耗最小的一種。AT89S52單片機(jī)的時鐘信號通常用兩種電路形

28、式得到:內(nèi)部振蕩方式和外部振蕩方式。在引腳XTAL1和XTAL2外接晶體振蕩器(簡稱晶振)或陶瓷諧振器,就構(gòu)成了內(nèi)部振蕩方式。由于單片機(jī)內(nèi)部有一個高增益反相放大器,當(dāng)外接晶振后,就構(gòu)成了自激振蕩器并產(chǎn)生振蕩時鐘脈沖。內(nèi)部振蕩方式的外部電路如下圖所示。圖中,電容器C01,C02起穩(wěn)定振蕩頻率、快速起振的作用,其電容值一般在5-30pF。晶振頻率的典型值為12MH2,采用6MHz的情況也比較多。內(nèi)部振蕩方式所得的時鐘情號比較穩(wěn)定,實用電

29、路中使用較多。外部振蕩方式是把外部已有的時鐘信號引入單片機(jī)內(nèi)。這種方式適宜用來使單片機(jī)的時鐘與外部信號保持同步。外部振蕩方式的外部電路如下圖所示。</p><p><b>  如圖所示:</b></p><p><b>  各模塊分析:</b></p><p>  顯示模塊——電路先通過電源電路送出+5V電壓,單片機(jī)AT

30、89S52通過74LS47和CD4515(4—16譯碼器)驅(qū)動數(shù)碼管顯示數(shù)值, 顯示部分采用普通共陽極數(shù)碼管顯示,采用動態(tài)掃描,以減少硬件電路??紤]到一次掃描12位數(shù)碼管顯示時會出現(xiàn)閃爍情況,設(shè)計時分兩排顯示,一排顯示時間和年月日,一排顯示星期和溫度, 共陽極數(shù)碼管中8個發(fā)光二極管的陽極(二極管正端)連在一起。通常,公共陽極接高電平(一般接電源),其它管腳接段驅(qū)動電路輸出端。當(dāng)某段驅(qū)動電路的輸入端為低電平時,該端所連接的字段導(dǎo)通并點亮

31、。根據(jù)發(fā)光字段的不同組合可顯示出各種數(shù)字或字符。此時,要求段驅(qū)動電路能吸收額定的段導(dǎo)通電流,還需根據(jù)外接電源及額定段導(dǎo)通電流來確定相應(yīng)的限流電阻。采用動態(tài)顯示方式,比較節(jié)省I/O口,硬件電路也較靜態(tài)顯示簡單,但其亮度不如靜態(tài)顯示方式,而且在顯示位數(shù)較多時,CPU要依次掃描,占用CPU較多時間。  為了提供共陽LED數(shù)碼管的驅(qū)動電壓,用三極管9012作電源驅(qū)動輸出。采用12MHz晶振,有利于提高秒計時的精確性。三極管采用901

32、2。數(shù)碼管采用紅色的共陽型LED數(shù)碼管,亮度高些,因為是掃描的顯示方式,所</p><p>  時鐘模塊——利用芯片內(nèi)部的振蕩器,然后在引腳XTAL1和引腳 XTAL2兩端接晶體諧振器,就構(gòu)成了穩(wěn)定的自激振蕩器,其發(fā)出的脈沖直接送入內(nèi)部的時鐘電路,如圖外接晶振時,C1和C2的值通常選擇30pF; C1、C2對頻率有微</p><p>  調(diào)作用,晶體諧振器的頻率12MHz。為了減

33、少寄生電容,更好地保證振蕩器穩(wěn)定、可靠地工作,振蕩器和電容應(yīng)盡可能安裝得與單片機(jī)芯片靠近。設(shè)置了12—24兩種顯示狀態(tài),調(diào)整計時的按鍵、設(shè)置定時的按鍵且定時設(shè)置了3次定時、還另加載了星期、年、月、日的調(diào)整及閏年的自動調(diào)整;</p><p>  溫度模塊——主要由18B20通過單片機(jī)AT89S52中的溫度程序不斷的檢測溫度來顯示溫度溫度傳感器DS18B20采集溫度信號送該給單片機(jī)處理,存儲器通過單片機(jī)對某些時間點的

34、數(shù)據(jù)進(jìn)行存儲;</p><p>  音樂模塊——通過LM386N-1給揚聲器信號來發(fā)出音樂,這個模塊主要是為時鐘定時到時發(fā)出音樂鬧鈴,而在軟件部分設(shè)置了可以一次設(shè)置3次定時,每次定時到時,音樂程序中編了6種音樂,它可以自動選擇6種音樂中的任一音樂響1分鐘,如果中間不想讓鬧鈴響可以按一按鍵,鬧鈴就立刻停止</p><p>  復(fù)位模塊——單片機(jī)復(fù)位電路是使CPU和系統(tǒng)中的其他功能部件都處在一

35、個確定的初始狀態(tài),并從該狀態(tài)開始工作,例如復(fù)位后PC=0000H,使單片機(jī)從第一個單元取指令。無論是在單片機(jī)剛接上電源時,還是斷電后或者發(fā)生故障后都要復(fù)位;單片機(jī)的復(fù)位操作使單片機(jī)進(jìn)入初始化狀態(tài),其中包括使程序計數(shù)器PC=0000H,這表明程序從0000H地址單元開始執(zhí)行。單片機(jī)冷啟動后,片內(nèi)RAM為隨機(jī)值,運行中的復(fù)位操作不改變片內(nèi)RAM區(qū)中的內(nèi)容,21個特殊功能寄存器復(fù)位后的狀態(tài)為確定值,見下表。值得指出的是,記住一些特殊功能寄存

36、器復(fù)位后的主要狀態(tài),對于了解單片機(jī)的初態(tài),減少應(yīng)用程序中的韌始化部分是十分必要的。說明:表中符號*為隨機(jī)狀態(tài);A=00H,表明累加器已被清零;</p><p>  PSW=00H,表明選寄存器0組為工作寄存器組;SP=07H,表明堆棧指針指向片內(nèi)RAM 07H字節(jié)單元,根據(jù)堆棧操作的先加后壓法則,第一個被壓入的內(nèi)容寫入到08H單元中;Po-P3=FFH,表明已向各端口線寫入1,此時,各端口既可用于輸入又可

37、用于輸出;IP=×××00000B,表明各個中斷源處于低優(yōu)先級;IE=0××00000B,表明各個中斷均被關(guān)斷;</p><p>  系統(tǒng)復(fù)位是任何微機(jī)系統(tǒng)執(zhí)行的第一步,使整個控制芯片回到默認(rèn)的硬件狀態(tài)下。51單片機(jī)的復(fù)位是由RESET引腳來控制的,此引腳與高電平相接超過24個振蕩周期后,51單片機(jī)即進(jìn)入芯片內(nèi)部復(fù)位狀態(tài),而且一直在此狀態(tài)下等待,直到RESET

38、引腳轉(zhuǎn)為低電平后,才檢查EA引腳是高電平或低電平,若為高電平則執(zhí)行芯片內(nèi)部的程序代碼,若為低電平便會執(zhí)行外部程序。</p><p>  安全省電模式——電源電路上裝了保險管只要電流大于額定電流保險就斷來保護(hù)電路,省電模式:不看時顯示不亮,看時,按下一鍵顯示就亮,盡量達(dá)到人性化。</p><p><b>  3. 軟件設(shè)計</b></p><p>

39、;<b>  3.1 概述</b></p><p>  軟件設(shè)計的重點在于秒脈沖信號的產(chǎn)生、顯示的實現(xiàn)、以及按鍵的處理等方面?;谲浖拿朊}沖信號通常有延時法和定時中斷法。延時法一般采用查詢方</p><p>  式,在延時子程序前后必然需要查詢和處理的程序,導(dǎo)致誤差的產(chǎn)生,因此其秒脈沖的精度不高;中斷法的原理是,利用單片機(jī)內(nèi)部的定時器溢出中斷來實現(xiàn)。例如,設(shè)定某定時

40、器每100ms中斷1次,則10次的周期為1s。本系統(tǒng)中所使用的晶振頻率為12MHZ。</p><p>  3.2 主模塊的設(shè)計</p><p>  主模塊是系統(tǒng)軟件的主框架。結(jié)構(gòu)化程序設(shè)計一般有“自上而下”和“自下而上”兩種方式,“自上而下”法的核心就是主框架的構(gòu)建。它的合理與否關(guān)系到程序最終的功能的多少和性能的好壞。本系統(tǒng)的主模塊的程序框圖如下圖2所示:</p><p

41、><b>  圖 2</b></p><p>  3.3 基本顯示模塊設(shè)計</p><p>  基本顯示模塊設(shè)計的重點是由顯示代碼取得相應(yīng)的段碼,顯示段碼數(shù)據(jù)的并行發(fā)送,高精度的計時工具大多數(shù)都使用了石英晶體振蕩器,由于電子鐘,石英表,石英鐘都采用了石英技術(shù),因此走時精度高,穩(wěn)定性好,使用方便,不需要</p><p>  經(jīng)常調(diào)校,數(shù)字式

42、電子鐘用集成電路計時時,譯碼代替機(jī)械式傳動,用LED顯示器代替顯示器代替指針顯示進(jìn)而顯示時間,減小了計時誤差,這種表具有時,分,秒顯示時間的功能,還可以進(jìn)行時和分的校對,片選的靈活性好。</p><p>  程序流程如圖3所示。</p><p><b>  圖 3</b></p><p>  3.4 時間設(shè)定模塊設(shè)計</p>&l

43、t;p>  時間設(shè)定模塊的設(shè)計要點是按鍵的去抖處理與“一鍵多態(tài)”的處理。即只涉及4個鍵完成了6位時間參數(shù)的設(shè)定。軟件法去抖動的實質(zhì)是軟件延時,即檢測到某一鍵狀態(tài)變化后延時一段時間,再檢測該按鍵的狀態(tài)是否還保持著,如是則作為按鍵處理,否則,視為抖動,不予理睬。去抖中的延時時間一般參考資料多描述為10ms左右,實際應(yīng)用中,應(yīng)大于20ms,否則,會導(dǎo)致按一次作多次處理,影響程序正常執(zhí)行?!耙绘I多態(tài)”即多功能鍵的實現(xiàn)思想是,根據(jù)按鍵時刻的

44、系統(tǒng)狀態(tài),決定按鍵采取何種動作,即何種功能。</p><p>  其流程圖如下圖4所示:</p><p><b>  圖 4</b></p><p>  3.5 鬧鈴功能的實現(xiàn)</p><p>  鬧鈴功能的實現(xiàn)涉及到兩個方面:鬧鈴時間設(shè)定和是否鬧鈴判別與相應(yīng)處理。鬧鈴時間設(shè)定模塊的設(shè)計可參照時間設(shè)定模塊,這里著重闡述鬧

45、鈴判別與處理模塊的設(shè)計問題。鬧鈴判別與鬧鈴處理的關(guān)鍵在于判別何時要進(jìn)行鬧鈴。當(dāng)時十位、時個位、分十位、分個位中任一位發(fā)生改變(進(jìn)位)時,就必須進(jìn)行鬧鈴判別。譯碼顯示電路將“時”、“分”、“秒”計數(shù)器的輸出送到七段顯示譯碼驅(qū)動器譯碼驅(qū)動,通過六個七段LED顯示器顯示出來。鬧鈴電路根據(jù)計時系統(tǒng)的輸出狀態(tài)產(chǎn)生一脈沖信號,然后加上一個高頻或低頻信號送到放大電路驅(qū)動蜂鳴器發(fā)聲實現(xiàn)報時。校時電路是直接加一個脈沖信號到時計數(shù)器或者分計數(shù)器或者秒計數(shù)器

46、來對“時”、“分”、“秒”顯示數(shù)字進(jìn)行校對調(diào)整。</p><p><b>  其流程圖如下所示:</b></p><p><b>  圖5.1</b></p><p><b>  圖5.2</b></p><p>  考慮到實用性,在該電子鐘的設(shè)計中修改定時或調(diào)整時間時采用了閃

47、爍,而且以定時20組鬧鐘。在編程上,首先進(jìn)行了初始化定義了程序的入口地址以及中斷的入口地址,在主程序的開始定義了一組固定單元用來存儲計數(shù)的秒,分,時以及定時時間的序號等。</p><p>  在顯示程序段中主要進(jìn)行了閃爍的處理,采用定時器中斷置標(biāo)志位,再與位選相互結(jié)合的方法來控制調(diào)時或定時中的閃爍。時,分,秒顯示則是用了軟件譯碼(查表)的方式,再用了一段固定的程序段進(jìn)行進(jìn)制轉(zhuǎn)化。初始化之后,用中斷方式對其計數(shù),計

48、數(shù)的同時采用了定時器比較的方法,比較當(dāng)前計數(shù)時間與定時時間是否相等,若相等則將鬧鈴標(biāo)志位置數(shù)。由于定義了定時鬧鐘組,在這里采用中斷組次,每中斷一次比較一組鬧鐘,避免了一次比較中斷時間過長,影響下次中斷時間。顯示之后查詢鬧鈴標(biāo)志位是否與前面所置數(shù)相等,若相等則響鈴。</p><p>  為了避免響鈴影響顯示,采用了每顯示幾屏以后在顯示程序中出現(xiàn)脈沖,驅(qū)動喇叭,不會影響顯示。之后用查詢方式對按鍵進(jìn)行判斷,若有鍵按下,

49、則進(jìn)行軟件延時消抖,避免了抖動引起的干擾,執(zhí)行相應(yīng)的定時,選時或調(diào)時程序段。對當(dāng)前時間或定時時間修改后又返回到最初的顯示程序段,如此循環(huán)下去。</p><p>  Proteus軟件仿真</p><p>  本次課程設(shè)計所采用的程序調(diào)試軟件為keil軟件,所采用的仿真軟件為protus 6 professional軟件。</p><p>  本次試驗的效果圖如下所示

50、:</p><p><b>  性能及誤差分析</b></p><p>  K1鍵用于系統(tǒng)進(jìn)入時間調(diào)節(jié)狀態(tài),根據(jù)所按次數(shù)不同,分別進(jìn)入時分秒調(diào)節(jié)狀態(tài),K2、K3分別用于對顯示時間和鬧鐘時間的增加和減小調(diào)節(jié),K4鍵用于顯示鬧鐘所定時間,對K4鍵所按次數(shù)不同分別進(jìn)入鬧鐘的時分秒調(diào)節(jié)狀態(tài)。該電子鐘的誤差主要由晶振自身的誤差所造成,晶振的誤差約為0. 0001~0. 0000

51、01</p><p>  結(jié)構(gòu)化軟件程序的調(diào)試一般可以將重點放在分模塊調(diào)試上,統(tǒng)調(diào)是最后一環(huán)。軟件調(diào)試可以采取離線調(diào)試和在線調(diào)試兩種方式。前者不需要硬件仿真器,可借助于軟件仿真器即可;后者一般需要仿真系統(tǒng)的支持。本次課設(shè),采用keil調(diào)試軟件來調(diào)試程序,通過各個模塊程序的單步或跟蹤調(diào)試,使程序逐漸趨于正確,最后統(tǒng)調(diào)程序。</p><p>  仿真部分采用protus 6 professio

52、nal軟件,此軟件功能強(qiáng)大且操作較為簡單,可以很容易的實現(xiàn)各種系統(tǒng)的仿真。</p><p>  首先打開protus 6 professional軟件,在元件庫中找到要選用的所有元件,然后進(jìn)行原理圖的繪制;繪制好后再選擇keil已經(jīng)編譯好的*.hex文件,選擇運行,觀察顯示結(jié)果,根據(jù)顯示的結(jié)果和課設(shè)的要求再修改程序,再運行查,直到滿足要求。</p><p><b>  5. 課程

53、設(shè)計體會</b></p><p>  單片機(jī)是一門應(yīng)用性很強(qiáng)的學(xué)科,課程設(shè)計是培養(yǎng)我們綜合運用所學(xué)知識,發(fā)現(xiàn)、提出、分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對我們實際工作能力的具體訓(xùn)練和考察過程。雖然在做課程設(shè)計以前已經(jīng)系統(tǒng)的把單片機(jī)課本認(rèn)真的學(xué)習(xí)了一下,但是在剛拿到設(shè)計任務(wù)書時還是有點一頭霧水,不知道該從哪里下手。令人欣慰的是經(jīng)過一周的學(xué)習(xí),雖然過程很艱辛,但是總算實現(xiàn)了定時鬧鐘的功能,所有的

54、努力都很值得。這一周的大部分時間都在研究程序怎么處理,在這個過程中加深了我對匯編語言命令的應(yīng)用,而且也更加了解到軟硬件配套的重要性。</p><p>  通過這次課程設(shè)計,使我對這們功課有了更深刻的認(rèn)識和了解。首先對于硬</p><p>  件電路的工作原理有了進(jìn)一步系統(tǒng)的學(xué)習(xí),同樣就有了進(jìn)一步的認(rèn)識,使我懂得了理論與實際相結(jié)合的重要性,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐

55、相結(jié)合起來,才能提高自己的實際動手能力和獨立思考的能力。其次軟件在這次設(shè)計中也有不足之處,比如音樂的響聲不連續(xù),但又不知道從哪個地方入手解決這個問題,這要求在以后的學(xué)習(xí)中,拓寬自己的知識面,解決設(shè)計的不足之處。</p><p>  總之,通過這次課程設(shè)計不僅使我鞏固了本課程所學(xué)的基本知識,還使我具有了撰寫科研報告的初步訓(xùn)練能力,我相信這些能力在我以后的工作或者是再學(xué)習(xí)中一定會起到不小的作用,一切的辛苦和艱難都是值

56、得的。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1]電氣與電子信息工程學(xué)院.單片機(jī)實驗指導(dǎo)書 </p><p>  [2]熊靜琪.計算機(jī)控制技術(shù).北京:電子工業(yè)出版社,2003.</p><p>  [3]黃忠霖.控制系統(tǒng)MATIAB計算及仿真.北京:國防工業(yè)出版社, 2004.</p&

57、gt;<p>  [4]彭為等.單片機(jī)典型系統(tǒng)設(shè)計實例精講. 北京:電子工業(yè)出版社,2007</p><p>  [5]王慶利等.單片機(jī)設(shè)計案例實踐教程.北京:北京郵電大學(xué)出版社,2008</p><p>  [6]韓志軍等.單片機(jī)應(yīng)用系統(tǒng)設(shè)計——入門向?qū)c設(shè)計實例.北京:機(jī)械工業(yè)出版社,2005</p><p>  [7]皮大能等. 單片機(jī)課程設(shè)計指

58、導(dǎo)書. 北京:北京理工大學(xué)出版社,2010</p><p><b>  程序清單</b></p><p>  #include<reg52.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p>

59、;<p>  sbit dula=P2^6;</p><p>  sbit wela=P2^7;</p><p>  sbit key1=P1^0;</p><p>  sbit key2=P1^1;</p><p>  sbit key3=P1^2;</p><p>  sbit key4=P1^3;&

60、lt;/p><p>  sbit buzzer=P3^7;</p><p>  uchar code table[]={</p><p>  0x3f,0x06,0x5b,0x4f,</p><p>  0x66,0x6d,0x7d,0x07,</p><p>  0x7f,0x6f,0x77,0x7c,</p>

61、;<p>  0x39,0x5e,0x79,0x71};</p><p>  uchar code table1[]={</p><p>  0xbf,0x86,0xdb,0xcf,</p><p>  0xe6,0xed,0xfd,0x87,</p><p>  0xff,0xef,0xf7,0xfc,</p>

62、<p>  0xb9,0xde,0xf9,0xf1};</p><p>  uint num,num1,num2,num3,shi1,shi2,fen1,fen2,miao1,miao2,keynum1,keynum4;</p><p>  uint nnum1,nnum2,nnum3,nshi1,nshi2,nfen1,nfen2,nmiao1,nmiao2;</p>

63、;<p>  void delayms(uint xms)</p><p><b>  {</b></p><p><b>  uint i,j;</b></p><p>  for(i=xms;i>0;i--)</p><p>  for(j=110;j>0;j--);&

64、lt;/p><p><b>  }</b></p><p>  void display(uchar A,uchar B,uchar C,uchar D,uchar E,uchar F)</p><p><b>  {</b></p><p>  miao1=num1/10;</p>&l

65、t;p>  miao2=num1%10;</p><p>  fen1=num2/10;</p><p>  fen2=num2%10;</p><p>  shi1=num3/10;</p><p>  shi2=num3%10; </p><p>  nmiao1=nnum1/10;</p>&

66、lt;p>  nmiao2=nnum1%10;</p><p>  nfen1=nnum2/10;</p><p>  nfen2=nnum2%10;</p><p>  nshi1=nnum3/10;</p><p>  nshi2=nnum3%10; </p><p><b>  P0=0xff

67、;</b></p><p><b>  wela=1;</b></p><p><b>  P0=0xfe;</b></p><p><b>  wela=0;</b></p><p><b>  dula=1;</b></p>

68、<p>  P0=table[A];</p><p><b>  dula=0;</b></p><p>  delayms(1);</p><p><b>  P0=0xff;</b></p><p><b>  wela=1;</b></p><

69、;p><b>  P0=0xfd;</b></p><p><b>  wela=0;</b></p><p><b>  dula=1;</b></p><p>  P0=table1[B];</p><p><b>  dula=0;</b>&l

70、t;/p><p>  delayms(1);</p><p><b>  P0=0xff;</b></p><p><b>  wela=1;</b></p><p><b>  P0=0xfb;</b></p><p><b>  wela=0;

71、</b></p><p><b>  dula=1;</b></p><p>  P0=table[C];</p><p><b>  dula=0;</b></p><p>  delayms(1);</p><p><b>  P0=0xff;<

72、;/b></p><p><b>  wela=1;</b></p><p><b>  P0=0xf7;</b></p><p><b>  wela=0;</b></p><p><b>  dula=1;</b></p><

73、p>  P0=table1[D];</p><p><b>  dula=0;</b></p><p>  delayms(1);</p><p><b>  P0=0xff;</b></p><p><b>  wela=1;</b></p><p&

74、gt;<b>  P0=0xef;</b></p><p><b>  wela=0;</b></p><p><b>  dula=1;</b></p><p>  P0=table[E];</p><p><b>  dula=0;</b></p

75、><p>  delayms(1);</p><p><b>  P0=0xff;</b></p><p><b>  wela=1;</b></p><p><b>  P0=0xdf;</b></p><p><b>  wela=0;<

76、/b></p><p><b>  dula=1;</b></p><p>  P0=table[F];</p><p><b>  dula=0;</b></p><p>  delayms(1);</p><p><b>  }</b><

77、/p><p>  void keyscan()</p><p><b>  {</b></p><p>  if(key1==0)</p><p><b>  {</b></p><p>  delayms(10);</p><p>  if(key1==

78、0)</p><p><b>  {</b></p><p>  keynum1++;</p><p>  while(!key1);</p><p><b>  }</b></p><p><b>  }</b></p><p>

79、;  if(keynum1!=0)</p><p><b>  {</b></p><p><b>  TR0=0;</b></p><p>  if(keynum1==1)</p><p><b>  { </b></p><p>  if(key2=

80、=0)</p><p><b>  {</b></p><p>  delayms(10);</p><p>  if(key2==0)</p><p><b>  { </b></p><p><b>  num1++;</b></p>

81、<p>  if(num1==60)</p><p><b>  num1=0;</b></p><p>  while(!key2);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(

82、key3==0)</p><p><b>  {</b></p><p>  delayms(10);</p><p>  if(key3==0)</p><p><b>  {</b></p><p>  if(num1==0)</p><p>&l

83、t;b>  num1=60;</b></p><p><b>  num1--;</b></p><p>  while(!key3);</p><p><b>  }</b></p><p><b>  }</b></p><p>&

84、lt;b>  }</b></p><p>  if(keynum1==2)</p><p><b>  { </b></p><p>  if(key2==0)</p><p><b>  {</b></p><p>  delayms(10);</p

85、><p>  if(key2==0)</p><p><b>  { </b></p><p><b>  num2++;</b></p><p>  if(num2==60)</p><p><b>  num2=0;</b></p><

86、;p>  while(!key2);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(key3==0)</p><p><b>  {</b></p><p>  delayms(10);&

87、lt;/p><p>  if(key3==0)</p><p><b>  {</b></p><p>  if(num2==0)</p><p><b>  num2=60;</b></p><p><b>  num2--;</b></p>

88、<p>  while(!key3);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(keynum1==3)</p><p><b>

89、;  { </b></p><p>  if(key2==0)</p><p><b>  {</b></p><p>  delayms(10);</p><p>  if(key2==0)</p><p><b>  { </b></p><

90、;p><b>  num3++;</b></p><p>  if(num3==24)</p><p><b>  num3=0;</b></p><p>  while(!key2);</p><p><b>  }</b></p><p>&l

91、t;b>  }</b></p><p>  if(key3==0)</p><p><b>  {</b></p><p>  delayms(10);</p><p>  if(key3==0)</p><p><b>  {</b></p>

92、<p>  if(num3==0)</p><p><b>  num3=24;</b></p><p><b>  num3--;</b></p><p>  while(!key3);</p><p><b>  }</b></p><p&g

93、t;<b>  }</b></p><p><b>  }</b></p><p>  if(keynum1==4)</p><p><b>  {</b></p><p>  keynum1=0;</p><p><b>  TR0=1;&l

94、t;/b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(key4==0)</p><p><b>  {</b></p><p>  delayms(10);</p>&l

95、t;p>  if(key4==0)</p><p><b>  {</b></p><p>  keynum4++;</p><p>  while(!key4);</p><p><b>  }</b></p><p><b>  }</b>&l

96、t;/p><p>  if(keynum4!=0)</p><p><b>  {</b></p><p><b>  TR0=0;</b></p><p>  if(keynum4==1)</p><p><b>  { </b></p>&

97、lt;p>  if(key2==0)</p><p><b>  {</b></p><p>  delayms(10);</p><p>  if(key2==0)</p><p><b>  { </b></p><p><b>  nnum1++;<

98、;/b></p><p>  if(nnum1==60)</p><p><b>  nnum1=0;</b></p><p>  while(!key2);</p><p><b>  }</b></p><p><b>  }</b></

99、p><p>  if(key3==0)</p><p><b>  {</b></p><p>  delayms(10);</p><p>  if(key3==0)</p><p><b>  {</b></p><p>  if(nnum1==0)&

100、lt;/p><p><b>  nnum1=60;</b></p><p><b>  nnum1--;</b></p><p>  while(!key3);</p><p><b>  }</b></p><p><b>  }</b&g

101、t;</p><p><b>  }</b></p><p>  if(keynum4==2)</p><p><b>  { </b></p><p>  if(key2==0)</p><p><b>  {</b></p><p

102、>  delayms(10);</p><p>  if(key2==0)</p><p><b>  { </b></p><p><b>  nnum2++;</b></p><p>  if(nnum2==60)</p><p><b>  nnum2=

103、0;</b></p><p>  while(!key2);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(key3==0)</p><p><b>  {</b></p>

104、;<p>  delayms(10);</p><p>  if(key3==0)</p><p><b>  {</b></p><p>  if(nnum2==0)</p><p><b>  nnum2=60;</b></p><p><b> 

105、 nnum2--;</b></p><p>  while(!key3);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(keynum4==3

106、)</p><p><b>  { </b></p><p>  if(key2==0)</p><p><b>  {</b></p><p>  delayms(10);</p><p>  if(key2==0)</p><p><b>

107、;  { </b></p><p><b>  nnum3++;</b></p><p>  if(nnum3==24)</p><p><b>  nnum3=0;</b></p><p>  while(!key2);</p><p><b>  }

108、</b></p><p><b>  }</b></p><p>  if(key3==0)</p><p><b>  {</b></p><p>  delayms(10);</p><p>  if(key3==0)</p><p>

109、<b>  {</b></p><p>  if(nnum3==0)</p><p><b>  nnum3=24;</b></p><p><b>  nnum3--;</b></p><p>  while(!key3);</p><p><b

110、>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(keynum4==4)</p><p><b>  {</b></p><p>  keynum4=0;<

111、/p><p><b>  TR0=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void main()</p>&

112、lt;p><b>  {</b></p><p><b>  num3=12;</b></p><p><b>  nnum3=6;</b></p><p>  TMOD=0x01;</p><p>  TH0=(65536-50000)/256;</p>

113、<p>  TL0=(65536-50000)%256;</p><p><b>  EA=1;</b></p><p><b>  ET0=1;</b></p><p><b>  TR0=1;</b></p><p><b>  while(1)<

114、/b></p><p><b>  {</b></p><p>  keyscan();</p><p>  if(keynum4==0)</p><p><b>  {</b></p><p>  display(shi1,shi2,fen1,fen2,miao1,m

115、iao2);</p><p><b>  }</b></p><p>  if(keynum4!=0)</p><p><b>  {</b></p><p>  display(nshi1,nshi2,nfen1,nfen2,nmiao1,nmiao2); </p><p>

116、;<b>  }</b></p><p>  if(keynum1==0)</p><p>  if(num1==nnum1&num2==nnum2&num3==nnum3)</p><p><b>  {</b></p><p><b>  buzzer=0;</b

117、></p><p>  delayms(5000);</p><p><b>  buzzer=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b>

118、;</p><p>  void T0_time() interrupt 1</p><p><b>  {</b></p><p>  TH0=(65536-50000)/256;</p><p>  TL0=(65536-50000)%256;</p><p><b>  num++

119、;</b></p><p>  if(num==20)</p><p><b>  {</b></p><p><b>  num=0;</b></p><p><b>  num1++;</b></p><p>  if(num1==60)

120、</p><p><b>  num1=0;</b></p><p>  if(num1==0)</p><p><b>  {</b></p><p><b>  num2++;</b></p><p>  if(num2==60)</p>

121、<p><b>  num2=0;</b></p><p>  if(num2==0)</p><p><b>  {</b></p><p><b>  num3++;</b></p><p>  if(num3==24)</p><p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論