電子系統(tǒng)課程設(shè)計(jì)_第1頁
已閱讀1頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  物理機(jī)電學(xué)院課程設(shè)計(jì)報(bào)告</p><p>  課程名稱:電子系統(tǒng)課程設(shè)計(jì) </p><p>  專業(yè)班級: 電子信息工程2班 </p><p>  學(xué)生姓名: </p><p>  學(xué) 號: </p&

2、gt;<p>  指導(dǎo)教師: </p><p>  完成時間: 2013年6月25日 </p><p>  報(bào)告成績: </p><p><b>  電子系統(tǒng)設(shè)計(jì)</b></p><p>  第1章 設(shè)計(jì)任務(wù)與要求

3、1</p><p><b>  1.1軟件任務(wù)1</b></p><p><b>  1.2硬件任務(wù)1</b></p><p>  第2章 方案的設(shè)計(jì)與論證2</p><p>  2.1 單片機(jī)型號的選擇2</p><p>  2.2 按鍵的選擇2</p&g

4、t;<p>  2.3 顯示器的選擇2</p><p>  2.4 計(jì)時部分的選擇3</p><p>  2.5 發(fā)音部分的設(shè)計(jì)3</p><p>  2.6 顯示器驅(qū)動電路3</p><p>  2.7 電源的選擇3</p><p>  2.8 函數(shù)信號發(fā)生器3</p><

5、;p>  第3章 硬件電路設(shè)計(jì)5</p><p>  3.1 設(shè)計(jì)原理5</p><p>  3.2 AT89C51單片機(jī)簡介6</p><p>  3.3 鍵盤電路的設(shè)計(jì)7</p><p>  3.4 段碼驅(qū)動電路7</p><p>  3.5 蜂鳴器驅(qū)動電路7</p><p&g

6、t;  3.6函數(shù)信號發(fā)生器數(shù)模轉(zhuǎn)換器8</p><p>  3.7函數(shù)信號發(fā)生器鍵盤接口電路8</p><p>  3.8 電子系統(tǒng)電路總原理圖9</p><p>  3.9 電子系統(tǒng)PCB圖10</p><p>  第4章 軟件設(shè)計(jì)11</p><p>  4.1 主程序部分的設(shè)計(jì)11</p&g

7、t;<p>  4.2 系統(tǒng)初始化顯示功能12</p><p>  4.3 密碼顯示界面與密碼輸入12</p><p>  4.4 功能選擇界面12</p><p>  4.5 鍵盤掃描函數(shù)12</p><p>  4.6 時間和鬧鐘的設(shè)置12</p><p>  4.7 秒表設(shè)置13<

8、/p><p>  4.8 函數(shù)信號發(fā)生器流程圖15</p><p>  第5章 仿真過程與仿真結(jié)果16</p><p>  第6章 安裝與調(diào)試20</p><p><b>  結(jié)論與心得22</b></p><p><b>  參考文獻(xiàn)23</b></p>

9、<p><b>  附 錄24</b></p><p><b>  設(shè)計(jì)任務(wù)與要求</b></p><p><b>  1.1軟件任務(wù)</b></p><p><b>  設(shè)計(jì)任務(wù)1:</b></p><p>  增加系統(tǒng)初始化顯示功能&l

10、t;/p><p>  LED顯示部分每1秒鐘點(diǎn)亮1段LED,依次8秒后全亮</p><p>  LCD顯示部分控制10秒倒計(jì)時</p><p><b>  設(shè)計(jì)任務(wù)2:</b></p><p>  增加密碼功能,要求正確輸入密碼才能進(jìn)入系統(tǒng)</p><p><b>  設(shè)計(jì)任務(wù)3:</

11、b></p><p>  進(jìn)入系統(tǒng)后有相應(yīng)的功能模塊選擇:F1,F2,F2等進(jìn)入</p><p><b>  設(shè)計(jì)任務(wù)4:</b></p><p>  具有串行通訊功能,能夠通過串口與PC機(jī)通訊,每1秒鐘可以將本選定功能相關(guān)的數(shù)據(jù)上傳。</p><p><b>  1.2 硬件任務(wù)</b>&l

12、t;/p><p><b>  函數(shù)信號發(fā)生器</b></p><p>  目標(biāo):掌握如何設(shè)計(jì)函數(shù)信號發(fā)生器</p><p>  要求:設(shè)計(jì)的函數(shù)信號發(fā)生器最起碼能夠產(chǎn)生三角波和正弦波且頻率可調(diào),幅值小于5V。通過按鍵可以選擇產(chǎn)生三角波還是正弦波。</p><p><b>  方案設(shè)計(jì)與論證</b><

13、;/p><p>  本設(shè)計(jì)應(yīng)解決的主要問題有兩大方面,即硬件電路設(shè)計(jì)和軟件設(shè)計(jì)兩大方面。其中硬件電路部分又可分為四個模塊:鍵盤模塊、顯示模塊、計(jì)時模塊和發(fā)聲模塊。硬件電路部分致力于低成本、低功耗和易實(shí)現(xiàn)性。軟件部分則應(yīng)做到代碼的精簡、準(zhǔn)確、易讀懂。</p><p>  2.1單片機(jī)型號的選擇</p><p>  通過對多種單片機(jī)性能的分析,最終認(rèn)為AT89C51是最理想

14、的電子時鐘開發(fā)芯片。AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器的低電壓,高性能CMOS8位微處理器,器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,而且它與MCS-51兼容,且具有4K字節(jié)可編程序存儲器和1000次擦寫循環(huán),數(shù)據(jù)保留時間為10年,是最好的選擇。</p>

15、;<p><b>  2.2 按鍵的選擇</b></p><p>  方案一:4×4矩陣式鍵盤。如果選擇此方案,那么在修改時鐘或設(shè)置鬧鈴時間時就可以直接從鍵盤輸入,方便、快捷,但程序較為復(fù)雜。 方案二:獨(dú)立式按鍵。如果設(shè)置過多按鍵,將會占用較多I/O口,而且會給布線帶來不便,因此,此方案適用于按鍵較少的情況。如果選擇此方案,由于按鍵較少,在修改時間或設(shè)置鬧鈴時

16、間時就不能直接輸入,只能通過加或減完成,稍為麻煩一些,但其程序簡單。 由于并不需要經(jīng)常修改時間和設(shè)置鬧鈴時間,而且方案二的程序簡單,按鍵少、成本低,因此,選擇方案二。</p><p>  2.3 顯示器的選擇</p><p>  方案一:液晶顯示器。如果選擇此方案,將會降低系統(tǒng)的功耗,這樣就可以用電池供電,便于攜帶。但液晶顯示器的驅(qū)動電路復(fù)雜,使用起來有一定的難度。 方案二:

17、用數(shù)碼管作為顯示器。數(shù)碼管的驅(qū)動電路簡單,使用方便,如果選擇了此方案,那么在夜間看時間的時候就不需要有光源,非常方便。其缺點(diǎn)是功耗較大。</p><p>  由于數(shù)碼管使用起來較為方便,在夜間看時間也很方便,因此我選擇了方案二。</p><p>  2.4 計(jì)時部分的選擇</p><p>  如果使用時鐘芯片,系統(tǒng)就不怕掉電且時間精確。但這種芯片比較貴,況且,設(shè)計(jì)本

18、系統(tǒng)主要是為了學(xué)習(xí)單片機(jī)程序的編寫和調(diào)試以及設(shè)計(jì)硬件電路的一些方法,因此采用軟件的方法來計(jì)時而沒有采用價格較高的時鐘芯片。</p><p>  2.5 發(fā)音部分的設(shè)計(jì)</p><p>  通過三極管放大后驅(qū)動蜂鳴器工作,再通過軟件這時產(chǎn)生等時時間方波驅(qū)動蜂鳴器發(fā)出間斷嘀聲,這樣就可以省去硬件振蕩電路,降低成本。</p><p>  2.6顯示器驅(qū)動電路</p&

19、gt;<p>  由于通過數(shù)碼管公共及的電流較大且避免過多地使用分立元件,采用了一片74HC573來驅(qū)動段碼,用P3口作位碼驅(qū)動。</p><p><b>  2.7電源的選擇</b></p><p>  如果是用電池供電,就比較方便攜帶,但是本系統(tǒng),采用了數(shù)碼管作為顯示器,功耗較大,需要經(jīng)常更換電池。況且,本系統(tǒng)的體積較大,即使使用電池供電也不能隨身攜

20、帶,因此,用電池供電不大合適,所以用5V外部穩(wěn)壓電源來供電。</p><p>  2.8函數(shù)信號發(fā)生器</p><p>  方案一:采用模擬分立元件或單片函數(shù)發(fā)生器就可以產(chǎn)生正弦波、方波、三角波,方法簡單。通過調(diào)整外部元件也可以實(shí)現(xiàn)輸出頻率的改變,但采用模擬元器件造成元件分散性太大,從而產(chǎn)生的頻率穩(wěn)定性較差、抗干擾能力低、靈活性較差、而且精度低,不能實(shí)現(xiàn)任意波形轉(zhuǎn)換和波形運(yùn)算輸出等方面自主

21、控制功能。</p><p>  方案二:采用專業(yè)的鎖相式頻率合成方案,這種鎖相式頻率合成是一種高穩(wěn)定度和高精確度的大量離散技術(shù),他能夠準(zhǔn)確的產(chǎn)生波形,可以很好的解決頻率穩(wěn)定精確的情況下又要求頻率在較大的范圍內(nèi)可調(diào)的問題。但是頻率受VCO可變頻率范圍上的影響,高低頻率比無法做到很高,還有其只能產(chǎn)生正弦波或方波,不能滿足產(chǎn)生三角波的要求。</p><p>  方案三:采用AT89C51單片機(jī)和

22、數(shù)模轉(zhuǎn)換器DAC0832實(shí)現(xiàn)波形的產(chǎn)生。波形的產(chǎn)生方法是用AT89C51單片機(jī)執(zhí)行波形程序,向DAC0832轉(zhuǎn)換器的輸入端輸入相應(yīng)的數(shù)據(jù),從而在DA轉(zhuǎn)換電路輸出端再通過運(yùn)放電路轉(zhuǎn)換得到相應(yīng)的電壓波形。在AT89C51的P1口接按鍵控制波形的種類和波形的頻率,每種波形對應(yīng)一種按鍵方式。此方案原理簡單,同時適合操作,實(shí)現(xiàn)起來也相對較容易。</p><p>  經(jīng)比較,方案三的設(shè)計(jì)能夠更好的實(shí)現(xiàn)和完成題目的要求,產(chǎn)生的

23、三種波形和頻率可由按鍵控制,并通過按鍵改變來轉(zhuǎn)換不同的波形,也能夠在示波器上顯示出所要求的波形。波形的頻率步進(jìn)也可以實(shí)現(xiàn)調(diào)節(jié),具有線路簡單、可行性高、符合設(shè)計(jì)要求等優(yōu)點(diǎn)。在本設(shè)計(jì)的基礎(chǔ)上,加上LCD顯示,從而能夠在LCD上顯示出頻率值、幅度值信息。輸出的波形也較穩(wěn)定,精度較高,通過濾波電路使得系統(tǒng)的抗干擾性增強(qiáng),電路簡單,性價比高。綜上所述,我們選擇了第三種</p><p><b>  硬件電路設(shè)計(jì)&l

24、t;/b></p><p><b>  3.1設(shè)計(jì)原理</b></p><p><b>  系統(tǒng)原理圖:</b></p><p><b>  函數(shù)信號發(fā)生器:</b></p><p>  圖3-1 系統(tǒng)原理圖</p><p>  3.2AT89C5

25、1單片機(jī)簡介</p><p>  AT89C51是一款單片封裝的微控制器,適合于許多要求高集成度、低成本的場合。可以滿足多方面的性能要求。AT89C51采用了高性能的處理器結(jié)構(gòu),指令執(zhí)行時間只需2到4個時鐘周期。6倍于標(biāo)準(zhǔn)51單片機(jī)器件。AT89C51集成了許多系統(tǒng)級的功能,這樣可大大減少元件的數(shù)目和電路板面積并降低系統(tǒng)的成本。AT89C51單片機(jī)內(nèi)部主要有以下部件:8031CPU、振蕩電路、總線控制部件、中斷控

26、制部件、片內(nèi)Flash存儲器、并行I/O接口、定時器和串行I/O接口。</p><p>  圖3-2 AT89C51單片機(jī)</p><p>  3.3鍵盤電路的設(shè)計(jì)</p><p>  鍵盤采用4個獨(dú)立按鍵配以4個上拉電阻實(shí)現(xiàn)對時鐘和鬧鐘的設(shè)定及修改。</p><p>  圖3-3 鍵盤輸入電路</p><p>&l

27、t;b>  3.4段碼驅(qū)動電路</b></p><p>  由于通過數(shù)碼管公共及的電流較大且避免過多地使用分立元件,采用了一片74HC573來驅(qū)動段碼,用P0口作位碼驅(qū)動。</p><p>  圖3-4 段碼驅(qū)動器74HC573</p><p>  3.5蜂鳴器驅(qū)動電路</p><p>  發(fā)音部分是通過三極管放大驅(qū)動蜂鳴器

28、工作,再通過軟件這時產(chǎn)生等時時間方波驅(qū)動蜂鳴器發(fā)出間斷嘀聲,這樣就可以省去硬件振蕩電路,降低成本。</p><p>  圖3-5 蜂鳴器驅(qū)動電路</p><p>  3.6函數(shù)信號發(fā)生器數(shù)模轉(zhuǎn)換器</p><p>  由于單片機(jī)輸出的是數(shù)字信號,因?yàn)橐玫侥M信號的波形就必須對其進(jìn)行數(shù)模換。我們采用了DAC0832 數(shù)模轉(zhuǎn)換器,該芯片由8 位輸入鎖存器、8 位DAC

29、 寄存器、8 位D/A 轉(zhuǎn)換器及轉(zhuǎn)換控制電路四部分構(gòu)成。由于其輸出為電流輸出,因?yàn)橥饧舆\(yùn)算放大器OP07 使之裝換為電壓輸出。最后通過示波器顯示輸出的波形。</p><p>  圖3-6 D/A轉(zhuǎn)換電路</p><p>  3.7 函數(shù)信號發(fā)生器鍵盤接口電路</p><p>  常用的鍵盤電路一般為矩陣式,但是對于此設(shè)計(jì),為了方便程序的簡單化,我們采用了一般的鍵盤接

30、口輸出信號。具體實(shí)現(xiàn)方法:P2.1用來作為波形選擇,其輸出正弦波、三角波、方波。P2.3、P2.4用來作為頻率調(diào)節(jié); </p><p>  圖3-7鍵盤接口電路</p><p>  3.8 電子系統(tǒng)電路總原理圖</p><p>  圖3-8 電路總原理圖</p><p>  3.9 電子系統(tǒng)PCB圖</p><p> 

31、 圖3-7 PCB圖</p><p><b>  軟件設(shè)計(jì)</b></p><p>  4.1主程序部分的設(shè)計(jì)</p><p>  程序部分主要采用了程序結(jié)構(gòu)的模塊化設(shè)計(jì),避免了一些函數(shù)的不必要的重復(fù)書寫,使程序變得單間易懂。程序在執(zhí)行時,主程序要須通過調(diào)用子函數(shù)就可完成相應(yīng)的功能 。主程序流程圖如下圖4-1。</p><

32、p>  圖4-1 主程序流程圖</p><p>  4.2 系統(tǒng)初始化顯示功能</p><p>  LED顯示部分每1秒鐘點(diǎn)亮1段LED,依次8秒后全亮</p><p>  使用定時器延時,8個數(shù)碼管同時點(diǎn)亮,定時器每延時一秒點(diǎn)亮一段LED,依次8秒后全亮。</p><p>  4.3 密碼顯示界面與密碼輸入</p>&l

33、t;p>  系統(tǒng)初始化顯示之后就進(jìn)入密碼顯示界面,界面顯示為P - - - -。通過按鍵S1選擇當(dāng)前要輸入的密碼,通過按鍵S2、S3進(jìn)行對值的加減,通過S4進(jìn)行確認(rèn)操作。</p><p>  密碼輸入完成之后會顯示F,覆蓋之前輸入的數(shù)值,對密碼進(jìn)行保護(hù)。</p><p>  密碼輸入正確顯示- - -ON- - -,然后進(jìn)入功能選擇界面</p><p>  密

34、碼輸入錯誤顯示- - - - - - - -,回到密碼輸入界面,繼續(xù)輸入密碼。</p><p>  4.4 功能選擇界面</p><p>  功能界面顯示為F1-F2-F3,可以設(shè)置三個功能,目前只設(shè)置了F1、F2兩個功能,F(xiàn)3為待定功能。在功能界面仍然是S1進(jìn)行選擇,S4進(jìn)行確認(rèn)操作。</p><p><b>  4.5鍵盤掃描函數(shù)</b>&

35、lt;/p><p>  這些函數(shù)主要是判斷是否有按鍵按下,并根據(jù)相應(yīng)按鍵按下的情況調(diào)用相關(guān)函數(shù)執(zhí)行。</p><p>  4.6時間和鬧鐘的設(shè)置</p><p>  此部分主要是通過判斷cnt在不同值時通過調(diào)用加1、減1子函數(shù)對時間和鬧鐘的時、分、秒進(jìn)行設(shè)置。在鬧鐘設(shè)置時,判斷按鍵S4按下情況我,進(jìn)行鬧鐘的開啟與關(guān)閉,相關(guān)流程圖如下圖4-7。</p>&l

36、t;p>  圖4-2 時間/鬧鐘設(shè)置流程圖</p><p><b>  4.7 秒表的設(shè)置</b></p><p>  本實(shí)驗(yàn)利用單片機(jī)的定時器/計(jì)數(shù)器定時和記數(shù)的原理,通過采用proteus仿真軟件來模擬實(shí)現(xiàn)。模擬利用AT89C51單片機(jī)、LED數(shù)碼管以及控件來控制秒表的計(jì)數(shù)以及計(jì)數(shù)的開啟/暫停/繼續(xù)與復(fù)位!</p><p>  圖4

37、-3 秒表設(shè)置流程圖</p><p>  4.8 函數(shù)信號發(fā)生器</p><p>  圖4-4 函數(shù)信號發(fā)生器流程圖</p><p><b>  仿真過程與仿真結(jié)果</b></p><p>  此電子系統(tǒng)設(shè)計(jì)是利用Proteus仿真軟件進(jìn)行仿真,基本上實(shí)現(xiàn)了課程設(shè)計(jì)要求實(shí)現(xiàn)的功能。</p><p>

38、;  硬件部分設(shè)置了的三個按鍵S1、S2、S3、S4。</p><p>  圖5-1 系統(tǒng)初始化顯示8段全亮</p><p>  圖5-2 密碼輸入界面</p><p>  輸入密碼時顯示P- - - -,輸入完成之后顯示P F F F。</p><p>  圖5-3 功能選擇界面</p><p>  圖5-4 電子時

39、鐘界面</p><p>  當(dāng)按鍵S1第一次按下時,停止計(jì)時進(jìn)入鬧鐘1的秒設(shè)置,當(dāng)按鍵S1第二、第三次按下時,分別進(jìn)入鬧鐘1的分設(shè)置和時設(shè)置,當(dāng)按S1第四 、第五、第六次按下時分別進(jìn)入鬧鐘2的秒、分、時設(shè)置,當(dāng)按S1第七 、第八、第九次按下時分別進(jìn)入鬧鐘3的秒、分、時設(shè)置,當(dāng)按S1第十 、第二一、第十二次按下時分別進(jìn)入時間的秒、分、時設(shè)置,在S1按下的各階段,可用按鍵S2、S3進(jìn)行時間和鬧鈴時間的時、分、秒進(jìn)行加

40、減設(shè)置;當(dāng)按鍵S1第十三次按下時恢復(fù)到時間顯示功能。當(dāng)顯示的時間和定時設(shè)置的時間一致時,蜂鳴器發(fā)出等時間斷蜂鳴聲,鬧鈴時間設(shè)置為60秒。在各個鬧鐘設(shè)置階段,如果有S4按下,則相應(yīng)鬧鐘功能關(guān)閉或開啟;如在鬧鈴時有S4按下則提前停止鬧鈴。</p><p><b>  圖5-5 秒表界面</b></p><p>  S1按清零,S2開始和暫停,可以長達(dá)9分鐘的計(jì)時。<

41、/p><p>  圖5-6 函數(shù)信號發(fā)生器仿真圖</p><p><b>  正弦波</b></p><p><b>  三角波</b></p><p>  產(chǎn)生三角波的原理:三角波產(chǎn)生是通過P0口將00H送入寄存器A中,DAC0832輸出A中的內(nèi)容,通過A中數(shù)值的加1遞升,同時延時,當(dāng)A中的內(nèi)容為0F

42、F時,A中的內(nèi)容減1遞減,從而循環(huán)產(chǎn)生三角波。</p><p><b>  方波</b></p><p>  產(chǎn)生方波的原理:方波產(chǎn)生是通過P0口將00H輸出給DAC0808,輸出對應(yīng)模擬量,然后讀取P2口的狀態(tài),取反后作為延時常量,延時時間到,將FFH輸出時,同樣輸出對應(yīng)模擬量,再延時,從而得到方波。</p><p><b>  安

43、裝與調(diào)試</b></p><p>  首先制作電路板:在PROTEL DXP軟件上畫出實(shí)訓(xùn)原理圖,接著導(dǎo)入制作PCB電路板,最后經(jīng)打印、熱轉(zhuǎn)印、腐蝕、打孔,最后做出電路板。</p><p><b>  1、步驟如下:</b></p><p>  第一步:利用一個能生成圖像的軟件生成一些圖像文件,這里使用版本為Altium2004組織

44、SCH文件,再利用網(wǎng)絡(luò)表生成相應(yīng)PCB圖(可自動布線,也可手工布線),接著畫PCB圖,以備打??; 第二步:將PCB圖打印到熱轉(zhuǎn)印紙上; 第三步:將打印好PCB的轉(zhuǎn)印紙平鋪在覆銅板上,準(zhǔn)備轉(zhuǎn)?。?第四步:用熱應(yīng)機(jī)加溫將轉(zhuǎn)印紙上黑色油墨粉壓在覆銅板上形成高精度的抗腐; 第五步:熱應(yīng)機(jī)加溫加壓成功轉(zhuǎn)印后的效果; 第六步:準(zhǔn)備好三氯化鐵溶液進(jìn)行腐蝕; </p><p>  

45、第七步:腐蝕結(jié)束,清洗干凈,晾干之后進(jìn)行打孔。 第八步:將焊盤銑刀裝到臺鉆上,清理出焊盤部分,剩下的部分用于阻焊; 第九步:安裝所需預(yù)定原件并焊接好。</p><p><b>  2、硬件調(diào)試</b></p><p>  拿到電路板后,首先要檢查加工質(zhì)量,在確保沒任何質(zhì)量問題時再安裝元器件。元器件在安裝前要足逐一檢查,用萬用表測其數(shù)值,看是否與所需相

46、同,完成焊接后應(yīng)先空載上電(芯片座不插芯片),并檢查各引腳的電位是否正確。若一切正常,方可在斷電的情況下將芯片插入,再次檢查各引腳的電位及其邏輯關(guān)系。將萬用表的探針放到單片機(jī)接電源的引腳上檢測一下,看是否符合要求。</p><p>  在調(diào)試時我遇到了一個問題:用STC下載器無法將程序下載到單片機(jī)中,經(jīng)檢查,是COM端口和波特率選的不正確,應(yīng)更改STC下載器的COM端口使之與電腦的COM端口相對應(yīng),波特率改為96

47、00~115200即可下載成功。</p><p><b>  時間顯示界面</b></p><p>  圖6-1 時鐘運(yùn)行圖</p><p><b>  鬧鐘設(shè)置界面</b></p><p>  圖6-2 鬧鐘設(shè)置圖</p><p><b>  結(jié)論與心得</

48、b></p><p>  做了一周的課程設(shè)計(jì),有很多的心得體會,有關(guān)于單片機(jī)的,也有關(guān)于模電數(shù)電等基礎(chǔ)科目的。</p><p>  因?yàn)閱纹瑱C(jī)已經(jīng)很久沒復(fù)習(xí),剛拿到題目,不知道從哪入手,后來通過對書本的回顧,加深了對單片機(jī)的記憶。有些知識會遷移和聯(lián)系模電數(shù)電。課堂教學(xué)考慮到大多數(shù)同學(xué)的需求,主要強(qiáng)調(diào)“基本”——基本知識、基本理論、基本方法、基本技能。而這次設(shè)計(jì)正是為我們提供了一個深入

49、學(xué)習(xí)、探索的機(jī)會,成為課堂教學(xué)的有益補(bǔ)充。我們正面臨就業(yè)問題,這次課設(shè)給了我們一個機(jī)會去試驗(yàn)。</p><p>  單片機(jī)理論的學(xué)習(xí)是為課程的設(shè)計(jì)作準(zhǔn)備的,但有時學(xué)習(xí)的理論也解決不了實(shí)踐中的問題。實(shí)踐中獲得的知識能讓我對單片機(jī)的知識有更好的認(rèn)識和理解。雖然這次的課程設(shè)計(jì)我參考了一些文獻(xiàn)資料,沒有做到創(chuàng)新,但在對程序的讀寫過程中我明白了許多。這次課程設(shè)計(jì)的最大收獲是只有把理論用到實(shí)踐中我們才能真正掌握好所學(xué)知識。&

50、lt;/p><p><b>  參考文獻(xiàn)</b></p><p>  [1]李全利、 遲榮強(qiáng),單片機(jī)原理及接口技術(shù)[M],北京:高等教育出版社,2004</p><p>  [2]凌玉華,單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計(jì)[M],長沙:中南大學(xué)出版社,2006</p><p>  [3]張道德,單片機(jī)接口技術(shù)(C51版)[M],北京:

51、中國水利水電出版社,2007</p><p>  [4] 王幸之、鐘愛琴、王雷、王閃,AT89系列單片機(jī)原理與接口技術(shù)[M],北京:北京航空航天大學(xué)出版社,2004</p><p>  [5]何立明,單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)[M],北京:北京航空航天大學(xué)出版社,1990</p><p>  [6]陳光東,單片機(jī)微型計(jì)算機(jī)原理與接口技術(shù)[M],武漢:華中理工大學(xué)出版社,19

52、98</p><p><b>  附 錄1</b></p><p>  //****************************頭文件********************************</p><p>  #include<reg51.h> </p><p>  

53、#include<intrins.h></p><p>  //****************************宏定義********************************</p><p>  #define uchar unsigned char </p><p>  #define uint unsigned int<

54、/p><p>  //****************************位聲明********************************</p><p>  sbit key1=P1^0; </p><p>  sbit key2=P1^1;</p><p>  sbit key3=P1^2;</p

55、><p>  sbit key4=P1^3;</p><p>  sbit fmq=P2^1;</p><p>  //************************數(shù)碼管顯示的數(shù)值**************************</p><p>  uchar code table[]={~0xc0,~0xf9,~0xa4,~0xb0,

56、~0x99,~0x92,</p><p>  // 0 1 2 3 4 5</p><p>  ~0x82,~0xf8,~0x80,~0x90,~0xbf,~0x0ff,0x73,0x71,0x80}; </p><p>  // 6 7 8 9 -

57、 滅 pf .</p><p>  table6[8]={0x06,0x71,0x40,0x5b,0x71,0x40, 0x4f,0x71};</p><p>  //1 F - 2 F - 3 F </p><p>  uchar table7[5]={0x40,0x40,0x40,0x40,0

58、x73};</p><p>  // - -- - P</p><p>  uchar table8[8]={0x40,0x40,0x40,0x37,0x3f,0x40,0x40,0x40};</p><p>  uchar code table10[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f}; </

59、p><p>  //****************************函數(shù)聲明******************************</p><p>  void jia(); </p><p>  void jian(); </p><p>  void jia1(); </p><p>  vo

60、id jian1();</p><p>  void shijian1();</p><p>  void display5();</p><p>  void displayxz();</p><p>  void display6();</p><p>  void key_scan1();</p>

61、<p>  void shijian();</p><p>  void display7(uchar,uchar,uchar); </p><p>  void keyscan4(); </p><p>  void miaobiao(); </p><p>  //************

62、********數(shù)組定義,數(shù)組內(nèi)含有8個數(shù)值******************</p><p>  uchar table1[8],table2[8],table3[8],table4[8];</p><p>  uchar password[]={1,2,1,2};</p><p>  uchar save[8];</p><p>  u

63、char table5[8];</p><p>  //**************************時間顯示初始值**************************</p><p>  uchar shi=12,fen=0,miao=0; </p><p>  //**************************定義全局變量*************

64、***************</p><p>  uchar shi1,fen1,miao1,shi2,fen2,miao2,shi3,fen3,miao3;</p><p>  uchar shi4,fen4,miao4;</p><p>  uchar flag, flag1, wss, cnt, cnt1, alm1, alm2, alm3;</p&g

65、t;<p>  // 1秒 等時 位閃 次數(shù) 校時 鬧1 鬧2 鬧3</p><p>  uint flag2;</p><p><b>  // 蜂鳴 </b></p><p>  uchar conflag;</p><p>  uchar cnt2,s1,s2,s3,s4,

66、cnt3;</p><p><b>  uchar n;</b></p><p>  uchar minute,second,second0_1,num2;</p><p>  uchar t=0;</p><p>  uchar num=0;</p><p>  //**************

67、*******延時函數(shù),用于動態(tài)掃描數(shù)碼管*****************</p><p>  void delay(uchar i) </p><p><b>  { </b></p><p>  uchar x,y;</p><p>  fo

68、r(x=i;x>0;x--)</p><p>  for(y=120;y>0;y--);</p><p><b>  }</b></p><p>  //*******************************初始化函數(shù)*************************</p><p>  void i

69、nit() </p><p>  { TMOD|=0x01; //工作方式1 </p><p>  TH0=0x3c; //定時時間為:50ms(65536-50000)/256</p><p>  TL0=0x0b0; //(65536-50000)%256</p>&

70、lt;p>  ET0=1; //打開定時器</p><p>  EA=1; //開總中斷</p><p>  TR0=1; //啟動定時器</p><p><b>  }</b></p><p>  void UART_init(void)&

71、lt;/p><p><b>  {</b></p><p>  SCON = 0x50;</p><p>  TMOD|= 0x20;</p><p>  TH1 = 0xF3;</p><p>  TL1 = 0xF3;</p><p><b>  TR1

72、= 1;</b></p><p><b>  ES = 1;</b></p><p><b>  EA = 1;</b></p><p><b>  }</b></p><p>  //********************顯示子函數(shù),用于顯示時間數(shù)值**

73、***************</p><p>  void display() </p><p>  { uchar i,j;</p><p>  if(cnt!=10||wss==0)</p><p>  { table1[0]=miao%10; //分離秒的個位與十位</p><p>  tab

74、le1[1]=miao/10;</p><p><b>  }</b></p><p><b>  else</b></p><p>  { table1[0]=table1[1]=11;}</p><p>  if(cnt!=11||wss==0)</p><p>  {

75、table1[3]=fen%10; //分離分的個位與十位</p><p>  table1[4]=fen/10;</p><p><b>  }</b></p><p><b>  else</b></p><p>  { table1[3]=table1[4]=11;}</

76、p><p>  if(cnt!=12||wss==0)</p><p>  { table1[6]=shi%10; //分離時的個位與十位</p><p>  table1[7]=shi/10;</p><p><b>  }</b></p><p><b>  else&l

77、t;/b></p><p>  { table1[6]=table1[7]=11;}</p><p>  table1[2]=table1[5]=10;</p><p><b>  j=0x7f; </b></p><p>  for(i=0;i<=7;i++) //從秒到時的掃描</

78、p><p><b>  { P2=j;</b></p><p>  P0=table[table1[i]]; //顯示數(shù)值</p><p>  delay(10);</p><p>  j=_cror_(j,1); //循環(huán)右移 </p><p><b>  }</b

79、></p><p><b>  }</b></p><p>  //*******************顯示子函數(shù),用于顯示定時1時間*****************</p><p>  void display1() </p><p>  { uchar i,j;</p><p> 

80、 if(alm1==0)</p><p>  { if(cnt!=1||wss==0)</p><p>  { table2[0]=miao1%10; //以下含義同上</p><p>  table2[1]=miao1/10;</p><p><b>  }</b></p><p>

81、;<b>  else</b></p><p>  { table2[0]=table2[1]=11;}</p><p>  if(cnt!=2||wss==0)</p><p>  { table2[3]=fen1%10;</p><p>  table2[4]=fen1/10;</p><p>

82、;<b>  }</b></p><p><b>  else</b></p><p>  { table2[3]=table2[4]=11;}</p><p>  if(cnt!=3||wss==0)</p><p>  { table2[6]=shi1%10;</p><p&

83、gt;  table2[7]=shi1/10;</p><p><b>  }</b></p><p><b>  else</b></p><p>  { table2[6]=table2[7]=11;}</p><p><b>  }</b></p><

84、p><b>  else</b></p><p>  table2[0]=table2[1]=table2[3]=table2[4]=table2[6]=table2[7]=10;</p><p>  table2[2]= table2[5]=10;</p><p><b>  j=0x7f;</b></p&g

85、t;<p>  for(i=0;i<=7;i++)</p><p><b>  { P2=j;</b></p><p>  P0=table[table2[i]];</p><p>  delay(10);</p><p>  j=_cror_(j,1); </p><p>

86、<b>  }</b></p><p><b>  }</b></p><p>  //********************顯示子函數(shù),用于顯示定時2時間******************</p><p>  void display2() </p><p>  { uchar i,j;&l

87、t;/p><p>  if(alm2==0)</p><p>  { if(cnt!=4||wss==0)</p><p>  { table3[0]=miao2%10; //以下含義同上</p><p>  table3[1]=miao2/10;</p><p><b>  }</b>

88、</p><p><b>  else</b></p><p>  { table3[0]=table3[1]=11;}</p><p>  if(cnt!=5||wss==0)</p><p>  { table3[3]=fen2%10;</p><p>  table3[4]=fen2/10;

89、</p><p><b>  }</b></p><p><b>  else</b></p><p>  { table3[3]=table3[4]=11;}</p><p>  if(cnt!=6||wss==0)</p><p>  { table3[6]=shi2%1

90、0;</p><p>  table3[7]=shi2/10;</p><p><b>  }</b></p><p><b>  else</b></p><p>  { table3[6]=table3[7]=11;}</p><p><b>  }</b

91、></p><p><b>  else</b></p><p>  table3[0]=table3[1]=table3[3]=table3[4]=table3[6]=table3[7]=10;</p><p>  table3[2]= table3[5]=10;</p><p><b>  j=0x7

92、f;</b></p><p>  for(i=0;i<=7;i++)</p><p><b>  { P2=j;</b></p><p>  P0=table[table3[i]];</p><p>  delay(10);</p><p>  j=_cror_(j,1); &

93、lt;/p><p><b>  }</b></p><p><b>  }</b></p><p>  //***************顯示子函數(shù),用于顯示定時3時間數(shù)值****************//</p><p>  void display3() </p><p>

94、;  { uchar i,j;</p><p>  if(alm3==0)</p><p>  { if(cnt!=7||wss==0)</p><p>  { table4[0]=miao3%10; //分離秒的個位與十位</p><p>  table4[1]=miao3/10;</p><p>

95、<b>  }</b></p><p><b>  else</b></p><p>  { table4[0]=table4[1]=11;}</p><p>  if(cnt!=8||wss==0)</p><p>  { table4[3]=fen3%10; //分離分的個位與十

96、位</p><p>  table4[4]=fen3/10;</p><p><b>  }</b></p><p><b>  else</b></p><p>  {table4[3]=table4[4]=11;}</p><p>  if(cnt!=9||wss==0

97、)</p><p>  { table4[6]=shi3%10; //分離時的個位與十位</p><p>  table4[7]=shi3/10;</p><p><b>  }</b></p><p><b>  else</b></p><p>  {t

98、able4[6]=table4[7]=11;}</p><p><b>  }</b></p><p><b>  else</b></p><p>  table4[0]=table4[1]=table4[3]=table4[4]=table4[6]=table4[7]=10;</p><p> 

99、 table4[2]= table4[5]=10;</p><p>  j=0x7f; //從秒到時的掃描</p><p>  for(i=0;i<=7;i++)</p><p><b>  { P2=j;</b></p><p>  P0=table[table4[i]];

100、 //顯示數(shù)值</p><p>  delay(10);</p><p>  j=_cror_(j,1); //循環(huán)右移 </p><p><b>  }</b></p><p><b>  }</b></p><p>  //****************

101、*******時間子函數(shù) *****************************//</p><p>  void shijian() </p><p>  { if(flag>=20) //判斷是否到一秒</p><p>  { wss=~wss;</p><p>  flag=0;

102、 //到了,則標(biāo)志位清零</p><p>  if(cnt1!=0)</p><p>  { miao4++; //秒加1</p><p>  if( miao4>59) //判斷秒是否到60s</p><p>  { miao4=0; //到了,則清零</p>&l

103、t;p>  fen4++; //分加1</p><p>  if(fen4>59) //以下含義同上</p><p><b>  { fen4=0;</b></p><p><b>  shi4++;</b></p><p>  if(shi4>23)</p&g

104、t;<p>  shi4=0; </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  } </b></p><p><b>  else</b></

105、p><p>  { miao++; //秒加1</p><p>  if( miao>59) //判斷秒是否到60s</p><p>  { miao=0; //到了,則清零</p><p>  fen++; //分加1</p><p>  if(fen>59)

106、//以下含義同上</p><p><b>  { fen=0;</b></p><p><b>  shi++;</b></p><p>  if(shi>23)</p><p>  shi=0; </p><p><b>  }

107、</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //************

108、**************鍵盤掃描子函數(shù)************************//</p><p>  void key_scan() </p><p>  { if(key1==0)</p><p>  { while(!key1) //防止掉顯</p><p>  { if(cnt==1||cnt==2

109、||cnt==3)</p><p>  { display1(); }</p><p>  if(cnt==4||cnt==5||cnt==6)</p><p>  { display2(); }</p><p>  if(cnt==7||cnt==8||cnt==9)</p><p>  { display3();

110、}</p><p>  if(cnt==0||cnt==10||cnt==11||cnt==12||cnt==13)</p><p>  { display(); }</p><p><b>  }</b></p><p>  cnt++; //記下按鍵key1按下的次數(shù) </p>

111、;<p>  if(cnt==10&&cnt1==0)</p><p>  { miao4=miao;</p><p><b>  fen4=fen;</b></p><p><b>  shi4=shi;</b></p><p><b>  cnt1++;&

112、lt;/b></p><p><b>  }</b></p><p>  if(cnt==13)</p><p><b>  { cnt=0;</b></p><p>  if(cnt1==1)</p><p>  { miao=miao4;</p>&l

113、t;p><b>  fen=fen4;</b></p><p><b>  shi=shi4;</b></p><p><b>  }</b></p><p><b>  cnt1=0; </b></p><p>  } </p

114、><p><b>  }</b></p><p>  if(key2==0) //判斷key2是否按下</p><p>  { while(!key2) //防止掉顯</p><p>  { if(cnt==1||cnt==2||cnt==3)</p><p

115、>  { display1(); }</p><p>  if(cnt==4||cnt==5||cnt==6)</p><p>  { display2(); }</p><p>  if(cnt==7||cnt==8||cnt==9)</p><p>  { display3(); }</p><p>  if

116、(cnt==0||cnt==10||cnt==11||cnt==12||cnt==13)</p><p>  { display(); }</p><p><b>  }</b></p><p><b>  jia();</b></p><p><b>  }</b></

117、p><p>  if(key3==0) //判斷key3是否按下</p><p>  { while(!key3) //防止掉顯</p><p>  { if(cnt==1||cnt==2||cnt==3)</p><p>  { display1(); }</p><p>

118、  if(cnt==4||cnt==5||cnt==6)</p><p>  { display2(); }</p><p>  if(cnt==7||cnt==8||cnt==9)</p><p>  { display3(); } </p><p>  if(cnt==0||cnt==10||cnt==11||cnt==12||cnt==

119、13)</p><p>  { display(); }</p><p><b>  }</b></p><p>  jian(); //調(diào)用減1子函數(shù) </p><p><b>  }</b></p><p>  if(key4==0)

120、 //判斷key4是否按下</p><p>  {while(!key4) //防止掉</p><p>  { if(cnt==1||cnt==2||cnt==3)</p><p>  { alm1=~alm1;</p><p>  display1();</p><p><b>  }</b

121、></p><p>  if(cnt==4||cnt==5||cnt==6)</p><p>  { alm2=~alm2;</p><p>  display2();</p><p><b>  }</b></p><p>  if(cnt==7||cnt==8||cnt==9)<

122、/p><p>  { alm3=~alm3;</p><p>  display3(); </p><p><b>  }</b></p><p>  if(cnt==0||cnt==10||cnt==11||cnt==12||cnt==13)</p><p>  { display();}<

123、/p><p>  while(key4) //跳回選擇菜單</p><p><b>  { </b></p><p>  if(cnt3==1||cnt3==2||cnt3==3)</p><p>  { display6(); }</p><p>  if(cnt3==0)</p&g

124、t;<p><b>  { </b></p><p>  displayxz(); }</p><p>  shijian1();</p><p>  key_scan1();</p><p><b>  }</b></p><p><b>  } &

125、lt;/b></p><p><b>  } </b></p><p><b>  }</b></p><p>  //****************************加1子函數(shù)***************************</p><p>  void jia()

126、 </p><p>  { if(cnt==1) //判斷key1按下的次數(shù)是否為1</p><p>  { miao1++; //是,則秒加1</p><p>  if(miao1>59) //判斷秒是否大于60,是,則秒清零</p><p><b>  miao1=0;</b>

127、;</p><p><b>  }</b></p><p>  if(cnt==2) //以下含意同上</p><p>  { fen1++;</p><p>  if(fen1>59)</p><p><b>  fen1=0;</b></p>

128、<p><b>  }</b></p><p>  if(cnt==3)</p><p>  { shi1++;</p><p>  if(shi1>23)</p><p><b>  shi1=0;</b></p><p><b>  }<

129、/b></p><p>  if(cnt==4)</p><p>  { miao2++;</p><p>  if(miao2>59)</p><p><b>  miao2=0;</b></p><p><b>  }</b></p><

130、p>  if(cnt==5)</p><p>  { fen2++;</p><p>  if(fen2>59)</p><p><b>  fen2=0;</b></p><p><b>  }</b></p><p>  if(cnt==6)</p&g

溫馨提示

  • 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

提交評論