

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 通信與信息工程學院</b></p><p> 2012 /2013 學年 第 一 學期</p><p> 課程設(shè)計 實驗報告</p><p> 模 塊 名 稱 51單片機課程設(shè)計</p><p> 專 業(yè) 通信工程 </p>
2、<p><b> 摘 要</b></p><p> 本次課程設(shè)計設(shè)計一個電風扇模擬控制系統(tǒng)設(shè)計?;贏T89C51芯片實現(xiàn)了用數(shù)碼管低兩位實時顯示電風扇的工作狀態(tài),高位顯示風類:“自然風”顯示“1” 、“常風”顯示“2” 、“睡眠風”顯示“3”。低位顯示風速,“低”顯示“1” 、“中”顯示“2” 、“高”顯示“3”:設(shè)置一個搖頭健,通過三四兩位數(shù)碼管小數(shù)點閃動反應(yīng)搖
3、頭狀態(tài);設(shè)置一個定時鍵,觸發(fā)后數(shù)碼管高兩位五六位動態(tài)倒計時顯示剩余的定時時間,倒計時到0風扇關(guān)閉,最終完成了設(shè)計任務(wù)。</p><p><b> 目 錄</b></p><p><b> 1.設(shè)計要求2</b></p><p> 2 Keil的使用3</p><p> 2.1軟件
4、的打開3</p><p><b> 2.2工作界面3</b></p><p> 2.3 電風扇實例程序設(shè)計4</p><p> 3 電風扇硬件控制系統(tǒng)8</p><p> 3.1設(shè)計方案特點8</p><p> 3.2關(guān)于AT89C51單片機的介紹8</p>&
5、lt;p> 3.2.1主要特性:9</p><p> 3.2.2管腳說明:9</p><p> 3.2.3.振蕩器特性:11</p><p> 4.設(shè)計中遇見的問題11</p><p><b> 總 結(jié)12</b></p><p><b> 附 錄
6、13</b></p><p> 1.設(shè)計要求 </p><p> 題目:電風扇模擬控制系統(tǒng)設(shè)計</p><p><b> 基本要求:</b></p><p> 用LED/LCD顯示電風扇的工作狀態(tài)(1,2,3,4四檔風力),</p><p>
7、 顯示風類:“自然風”、 “常風”和“睡眠風”。</p><p> 設(shè)計 “自然風”、 “常風”和“睡眠風” 三個風類鍵用于設(shè)置風類;</p><p> 設(shè)計一個“搖頭” 鍵用于控制電機搖頭。 </p><p> 設(shè)計一個“定時”鍵,用于定時時間長短設(shè)置;</p><p><b> 顯示格式:</b>&l
8、t;/p><p> LED數(shù)碼管/LCD屏顯示方法自定</p><p><b> 2 Keil的使用</b></p><p> 學習和使用單片機, keilC51軟件應(yīng)該掌握,我們要通過它來編寫和調(diào)試單片機程序。keilC51軟件是眾多單片機應(yīng)用開發(fā)的優(yōu)勢軟件之一,它集編輯,編譯,仿真于一體,支持匯編,PLM語言和C語言的程序設(shè)計,界面友好,
9、易學易用。</p><p><b> 2.1軟件的打開</b></p><p> 雙擊桌面上的Keil uVision3 圖標或者單擊屏幕左下方的“開始”→“程序”→“Keil uVision3”,出現(xiàn)如圖1.3所示界面,隨后就進入了Keil uVision3集成環(huán)境。</p><p> 圖1.3啟動Keil uVision3時的界面&l
10、t;/p><p><b> 2.2工作界面</b></p><p> Keil uVision2的工作界面是一種標準的Windows界面,包括:標題欄、主菜單、標準工具欄、代碼窗口等,如圖1.4所示。</p><p><b> 圖1.4工作界面</b></p><p> 關(guān)于該軟件的使用,與學習
11、其他軟件的方法沒有多大區(qū)別,當然我們也不是每個功能都使用,沒必要逐一介紹,下面舉一個例子說明使用就行了,如果想詳細了解,請搜索其詳細使用資料。</p><p> 2.3 電風扇實例程序設(shè)計</p><p> 建立一個新工程,單擊Project菜單,在彈出的下拉菜單中選中New Project選項,如圖1.5所示。</p><p> 圖1.5 選擇建
12、立工程菜單</p><p> 確定之后選擇你要保存的路徑,輸入工程文件的名字,比如保存到“電風扇”目錄里,工程文件的名字為“電風扇”如下圖1.6所示,然后點擊保存。</p><p><b> 圖1.6 創(chuàng)建工程</b></p><p> 隨后會彈出一個對話框,要求你選擇單片機的型號,你可以根據(jù)你使用的單片機來選擇,KeilC51
13、幾乎支持所有的單片機,由于Proteus選用AT89C52原理圖,那么選擇AT89C52之后,右邊欄是對這個單片機的基本的說明,然后點擊確定即可,如圖1.7所示。</p><p> 圖1.7選擇單片機的型號</p><p> 完成上一步驟后,工程到此就已經(jīng)創(chuàng)建起來了,其屏幕如圖1.8所示</p><p><b> 。</b></p&
14、gt;<p> 圖1.8已創(chuàng)建好的工程</p><p> 工程雖然已經(jīng)創(chuàng)建好,即已經(jīng)建立好了一個工程來管理跑電風扇這樣一個項目,但我們還沒寫一行程序,因此還需要建立相應(yīng)的C文件或匯編文件。下面我們就來新建一個C文件,新建之后并保存,如圖1.9所示。</p><p> 圖1.9新建C文件并保存</p><p> 把剛才新建的電風扇.c添加到工程來
15、添加后的界面如圖1.10所示。</p><p> 圖1.10 添加完成后的界面</p><p> 單擊“Project”菜單,再在下拉菜單中單擊“ ” 在下圖中,單擊“Output”中單擊“Create HEX File” 選項,使程序編譯后產(chǎn)生HEX代碼,以便在Proteus里加載可執(zhí)行代碼,并單擊“Target”選項,更改晶振頻率(本例使用12M晶振),其如圖1.11所示。<
16、/p><p> 圖1.11 修改晶振頻率</p><p> 到此,設(shè)置工作已完成,下面我們將編譯、鏈接、轉(zhuǎn)換成可執(zhí)行文件(.HEX的文件)。</p><p> 編譯、鏈接、生成可執(zhí)行文件。如圖3.18所示。</p><p> 圖1.12 編譯、鏈接、生成可執(zhí)行文件圖標</p><p> 依次單擊上述圖
17、2-12所示圖標,如果沒有語法錯誤,將會生成可執(zhí)行文件,即本例可執(zhí)行文件為“電風扇.hex”。</p><p> 3 電風扇硬件控制系統(tǒng)</p><p><b> 3.1設(shè)計方案特點</b></p><p> 初始加電時,電風扇不加電,數(shù)碼顯示器顯示00,只有按下“自然風”,“常風”和“睡眠風”任意按鍵,電風扇開始工作。同時,定時器只要不
18、進行時間設(shè)置,電路就將按系統(tǒng)默認控制負責定時工作的時間方式自動開始運行。</p><p> 電路允許用戶隨時通過按鍵開關(guān)設(shè)置定時關(guān)閉,觸發(fā)定時開關(guān),開始30s倒計時,數(shù)碼管高兩位動態(tài)顯示剩余時間。</p><p> 按下“搖頭”鍵,通過三四位數(shù)碼管小數(shù)點左右閃動反映搖頭狀態(tài)。</p><p> 在整個定時狀態(tài)下,電路具有允許用戶隨時自行選擇風類,風速,是否搖頭
19、。</p><p> 3.2關(guān)于AT89C51單片機的介紹</p><p> AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標準的MCS-51指令集和輸出管
20、腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。如圖2.1。</p><p><b> 圖2.1</b></p><p> 3.2.1主要特性:oe^4V-P33461電子園51單片機學習網(wǎng),_8i3u'{5rrtu·與MC
21、S-51 兼容電子園51單片機學習網(wǎng) k1`*k"G3?u7w]0oaI數(shù)據(jù)保留時間:10年電子園51單片機學習網(wǎng)o,o `LJ#QN·全靜態(tài)工作:0Hz-24Hz電子園51單片機學習網(wǎng) R\@.Ju]e·三級程序存儲器鎖定電子園51單片機學習網(wǎng)|q&A1`&_mh-m{!q#G I·128*8位內(nèi)部RAM電子園51單片機學習網(wǎng)1nOcBzz6~
22、·32可編程I/O線NB f+T!MV5{/Cb!J33461·兩個16位定時器/計數(shù)器電子園51單片機學習網(wǎng){;ma2xSs+kHs2v33461·可編程串行通道電子園51單片機學習網(wǎng)-?"JA4xF;|Tme·低功耗的閑置和掉電模式電子園51單片機學習網(wǎng)"~ZD{6N&U9r aC·片內(nèi)振蕩器和時鐘電路</p&g
23、t;<p> )w5} Kb2n33461 </p><p> 3.2.2管腳說明:zoc!FT口管腳 備選功能電子園51單片機學習網(wǎng) iL(N9F,{veP3.2 /INT0(外部中斷0)電子園51單片機學習網(wǎng)%H:P xFfl]w;k t1vP3.3 /INT1(外部中斷1)o,q _{R%h0Z4~33461P3.4 T0(記時器0外部輸入)IF8
24、XthwOM c RST:復(fù)位輸入。當振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高電平時間。@\7a f%JnQ334XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅(qū)動器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。</p>
25、<p> 4.設(shè)計中遇見的問題</p><p><b> 關(guān)于搖頭</b></p><p> 設(shè)計要求需要指示風扇搖頭狀態(tài),最開始我想通過板上的LED彩燈使用類似于流水燈的方式表示,編程后發(fā)現(xiàn)按下?lián)u頭健后彩燈雖然后從左到右,從右到左的閃動,但是此時LED數(shù)碼管部分出現(xiàn)了全1的亂碼,查看原理圖發(fā)現(xiàn),8個LED彩燈和8位數(shù)碼管串聯(lián),改變彩燈電平后,數(shù)碼
26、管的位選和數(shù)選也隨之改變,從而出現(xiàn)亂碼,由于硬件是做好的,該方案不可行。因此采用了用三四兩位的小數(shù)點指示搖頭狀態(tài),這樣不會和顯示風類,風力,定時的數(shù)碼管位產(chǎn)生沖突。</p><p> 驗收時候老師提出是否可以用八位數(shù)碼管的小數(shù)點同時反映搖頭狀態(tài),同時不影響定時,風類,風力正常的顯示。對此我的初步設(shè)計思路是:采用掃描判斷的方式,比如從左到右高兩位五六位是顯示定時的,若沒有觸發(fā)定時功能,則直接顯示小數(shù)點,若在定時過
27、程中,則進行判斷,進行替換,如將“2”替換成“2.”,依次類推,三四位沒有用作其他顯示,可以直接顯示小數(shù)點,一二位顯示風速,風類,需要采用掃描判斷。-</p><p><b> 總 結(jié)</b></p><p> 本系統(tǒng)是以單片機AT89C51芯片為核心部件,實現(xiàn)了電風扇系統(tǒng)控制功能,上網(wǎng)找資料,上圖書館,盡可能的了解有關(guān)于電風扇的知識。通過這次設(shè)計,使我得到
28、了一次用專業(yè)知識、專業(yè)技能分析和解決問題全面系統(tǒng)的鍛煉。使我在單片機的基本原理、單片機應(yīng)用系統(tǒng)開發(fā)過程,以及在常用編程設(shè)計思路技巧的掌握方面都能向前邁了一大步。</p><p> 本應(yīng)用系統(tǒng)設(shè)計的目的是通過在“單片機原理及應(yīng)用”課堂上學習的知識,以及查閱資料,培養(yǎng)一種自學的能力。并且引導(dǎo)一種創(chuàng)新的思維,把學到的知識應(yīng)用到日常生活當中。在設(shè)計的過程中,不斷的學習,思考和同學間的相互討論,運用科學的分析問題的方法解
29、決遇到的困難,掌握單片機系統(tǒng)一般的開發(fā)流程,學會對常見問題的處理方法,積累設(shè)計系統(tǒng)的經(jīng)驗,充分發(fā)揮教學與實踐的結(jié)合。全能提高個人系統(tǒng)開發(fā)的綜合能力,開拓了思維,為今后能在相應(yīng)工作崗位上的工作打下了堅實的基礎(chǔ)。</p><p> 通過本次課程的設(shè)計,不但加深我對在課程上所學到的單片機理論知識的認識和理解,重新讓自己認識到了這門學科的在應(yīng)用方面的廣闊前景,并且通過知識與應(yīng)用于實踐的結(jié)合更加豐富了自己的知識。擴展了知
30、識面,不但掌握了本專業(yè)的相關(guān)知識,而且對其他專業(yè)的知識也有所了解,而且較系統(tǒng)的掌握單片機應(yīng)用系統(tǒng)的開發(fā)過程,因而自身的綜合素質(zhì)有了全面的提高 。</p><p> 經(jīng)過這次一個較完整的產(chǎn)品設(shè)計和制作過程,對于認識到自己在知識方面存在的不足,明確今后的學習方向是非常有益的,為將來的的就業(yè)提前打了下堅實的基礎(chǔ)。在設(shè)計過程中,得到了我的指導(dǎo)老師的悉心指導(dǎo)與幫助,還有其他老師和同學的大力支持和協(xié)助,在此一并表示衷心的感
31、謝。</p><p><b> 附 錄</b></p><p> #include<reg51.h></p><p> #include"keyscanmode.h"</p><p> /***************************************</
32、p><p><b> 數(shù)碼管顯示編碼</b></p><p> ***************************************/</p><p> const unsigned char display_seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f}
33、;</p><p> //數(shù)碼管的段編碼// 0 1 2 3 4 5 6 7 8 9 . const unsigned char seg_position[]={0xef,0xdf};//數(shù)碼管的位選擇編碼</p><p> // 5 6 位數(shù)碼管</p><p>
34、 union mytime{//利用這一聯(lián)合體結(jié)構(gòu)便于實現(xiàn)數(shù)碼管的動態(tài)顯示</p><p> unsigned char time[2];</p><p><b> struct{</b></p><p> unsigned char ge;</p><p> unsigned char shi;</p&
35、gt;<p><b> }split;</b></p><p><b> };</b></p><p> union mytime mt;</p><p> unsigned char xx,location,flag;//數(shù)碼管顯示位標志</p><p> #define
36、SEG P0</p><p> /*************************************</p><p><b> 聲明為外部變量</b></p><p> *************************************/</p><p> extern xdata unsigne
37、d char PA8255ADDR ;</p><p> extern xdata unsigned char PB8255ADDR ;</p><p> extern xdata unsigned char PC8255ADDR ;</p><p> extern xdata unsigned char CON8255ADDR;</p><
38、;p> void main(void)</p><p><b> {</b></p><p> unsigned char KeyValue=0,temp=0,temp1=0,temp2=4,temp3=0,temp4=0,i,j=0,k=3;</p><p> unsigned char xx=0,location=0,flag
39、=0;//數(shù)碼管顯示位標志</p><p> mt.split.ge = 0;</p><p> mt.split.shi = k;</p><p><b> while(1)</b></p><p><b> {</b></p><p> if((KeyValu
40、e=keyscan())!=0xff)//判斷是否有按鍵按下,如有讀取鍵值</p><p><b> {</b></p><p> if(KeyValue==0||KeyValue==1||KeyValue==2||KeyValue==3)// 風力</p><p> temp1=KeyValue ;</p><p&
41、gt; if(KeyValue==4||KeyValue==5||KeyValue==6) //風類</p><p> temp2=KeyValue ; </p><p> if(KeyValue==7)//搖頭</p><p><b> {</b></p><p><b> t
42、emp3++;</b></p><p> temp3=temp3%2;</p><p><b> } </b></p><p> if(KeyValue==12) //定時</p><p><b> {</b></p><p><b>
43、 temp4++;</b></p><p> temp4=temp4%2;</p><p><b> }</b></p><p> if(KeyValue==15)//啟動</p><p><b> {</b></p><p><b
44、> temp++;</b></p><p> temp=temp%2;</p><p><b> }</b></p><p><b> }</b></p><p> if(temp==1)//風扇啟動</p><p><b>
45、{</b></p><p> if(temp1==0)//風力</p><p><b> { </b></p><p><b> P0=0xf9;</b></p><p><b> P1=0xfe;</b></p><p><
46、;b> } </b></p><p> if(temp1==1)</p><p><b> { </b></p><p><b> P0=0xa4;</b></p><p><b> P1=0xfe;</b></p><p>
47、<b> } </b></p><p> if(temp1==2)</p><p><b> { </b></p><p><b> P0=0xb0;</b></p><p><b> P1=0xfe;</b></p><p
48、><b> } </b></p><p> if(temp1==3)</p><p><b> { </b></p><p><b> P0=0x99;</b></p><p><b> P1=0xfe;</b></p>&l
49、t;p><b> } </b></p><p> SoftDelay(1);</p><p> if(temp2==4) //風類</p><p><b> { </b></p><p><b> P0=0xf9;</b></p><
50、p><b> P1=0xfd;</b></p><p><b> } </b></p><p> if(temp2==5)</p><p><b> { </b></p><p><b> P0=0xa4;</b></p>&
51、lt;p><b> P1=0xfd;</b></p><p><b> } </b></p><p> if(temp2==6)</p><p><b> { </b></p><p><b> P0=0xb0;</b></p>
52、<p><b> P1=0xfd;</b></p><p><b> } </b></p><p> SoftDelay(1);</p><p> if(temp3==1) //搖頭</p><p><b> {</b></p>&l
53、t;p><b> if(j<200)</b></p><p><b> {</b></p><p><b> P0=0x7f;</b></p><p><b> P1 =0xfb;</b></p><p> SoftDelay(1);
54、</p><p><b> j++;</b></p><p><b> }</b></p><p> if(j>=200&&j<600)</p><p><b> {</b></p><p><b> P0
55、=0x7f;</b></p><p><b> P1 =0xf7;</b></p><p> SoftDelay(1);</p><p><b> j++;</b></p><p><b> }</b></p><p> if(j=
56、=600)</p><p><b> j=0;</b></p><p><b> }</b></p><p> if(temp4==1)//定時</p><p><b> {</b></p><p> flag++; //先計數(shù)
57、</p><p> if(flag==200)</p><p><b> {</b></p><p><b> flag = 0;</b></p><p> mt.split.ge--;</p><p> if(mt.split.ge==-1)</p>
58、<p><b> {</b></p><p> mt.split.ge = 9;</p><p> mt.split.shi--;</p><p> if(mt.split.shi==-1)</p><p><b> {</b></p><p><
59、b> P1=0xff;</b></p><p> SoftDelay(1);</p><p><b> temp=0;</b></p><p><b> temp1=0;</b></p><p><b> temp2=4;</b></p>
60、<p><b> temp4=0;</b></p><p> mt.split.ge = 0;</p><p> mt.split.shi = k;</p><p><b> }</b></p><p><b> }</b></p><
61、;p><b> }</b></p><p><b> //再顯示</b></p><p> SEG = display_seg[mt.time[xx]];//獲取顯示位的段碼,顯示順序為</p><p><b> 個、十、百、千位</b></p><p> P1
62、 = seg_position[location];</p><p><b> xx++;</b></p><p> location++;</p><p> if(xx==2)//判斷數(shù)碼管掃描一次是否完成</p><p><b> {</b></p><p>&
63、lt;b> xx=0;</b></p><p> location=0;</p><p><b> }</b></p><p> SoftDelay(1);</p><p><b> }</b></p><p><b> else<
64、;/b></p><p> { P1=0xff;</p><p> SoftDelay(1);</p><p> mt.split.ge = 0;</p><p> mt.split.shi = k;</p><p><b> }</b></p><p>
65、<b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> P1=0xff;</b></p><p> //SoftDelay(1);</p><p>
66、 //temp4=0;</p><p> mt.split.ge = 0;</p><p> mt.split.shi = k;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b>
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能電風扇控制系統(tǒng)設(shè)計【開題報告】
- 電風扇課程設(shè)計
- 課程設(shè)計——基于單片機的智能電風扇控制系統(tǒng)
- 課程設(shè)計——基于單片機的智能電風扇控制系統(tǒng)
- 智能電風扇控制系統(tǒng)的設(shè)計【開題報告】
- proe課程設(shè)計--電風扇
- 智能電風扇控制系統(tǒng)
- 課程設(shè)計--家用電風扇控制邏輯
- 智能遙控電風扇畢業(yè)設(shè)計--遙控調(diào)速電風扇控制系統(tǒng)設(shè)計
- 家用電風扇課程設(shè)計---家用電風扇控制邏輯電路設(shè)計
- 家用電風扇課程設(shè)計
- proe課程設(shè)計--節(jié)能電風扇
- 智能電風扇控制系統(tǒng)設(shè)計【文獻綜述】
- 畢業(yè)設(shè)計---電風扇智能控制系統(tǒng)設(shè)計
- 智能電風扇控制系統(tǒng)的設(shè)計【文獻綜述】
- 課程設(shè)計---智能電風扇自動調(diào)速控制器
- 電風扇機械創(chuàng)新設(shè)計課程設(shè)計
- 單片機紅外遙控系統(tǒng)課程設(shè)計---電風扇
- 微機原理課程設(shè)計--模擬電風扇工作
- 課程設(shè)計--家用電風扇控制邏輯電路設(shè)計
評論
0/150
提交評論