版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 電子設(shè)計應(yīng)用軟件訓(xùn)練總結(jié)報告</p><p> 學(xué)生姓名: </p><p> 專 業(yè): 電子信息工程 </p><p> 班 級: </p><p> 學(xué) 號: </p><p> 指
2、導(dǎo)教師: </p><p> 訓(xùn)練時間:2012年 7月16日至 2012年7月20日</p><p><b> 一.任務(wù)說明</b></p><p> 利用AT89C51單片機、8位共陽極藍色數(shù)碼管和計算器鍵盤構(gòu)成一個計算器系統(tǒng),可以實現(xiàn)加減乘除功能。按照設(shè)計任務(wù)在Proteus 6 Professional中
3、繪制電路原理圖。根據(jù)設(shè)計任務(wù)的要求編寫程序,在Proteus下進行仿真,實現(xiàn)相應(yīng)功能。</p><p> 此次任務(wù)需要完成電路原理圖的繪制、單片機C語言的編程。目的是通過本次設(shè)計熟悉Proteus軟件的工作環(huán)境,掌握基本的操作及流程以及對單片機匯編語言的進一步學(xué)習(xí),使之前的學(xué)習(xí)得到鞏固。</p><p><b> 二.原理圖繪制說明</b></p>
4、<p> 要想實現(xiàn)其原理圖的繪制,首先需要安裝Proteus軟件。具體步驟如下:</p><p> 1.打開此軟件,進入Proteus界面,會出現(xiàn)查看樣例設(shè)計對話框,點擊取消鍵。</p><p> 2.畫圖之前要新建一個圖紙文件,在界面菜單欄中選擇File—New Design選項,會出現(xiàn)多種圖紙類型供選擇,在本次課程設(shè)計中選擇LandspaceA4紙張,鼠標(biāo)左鍵點中圖紙L
5、andspaceA4類型,然后點擊OK即可,操作如圖1所示:</p><p><b> 圖1 紙張選擇</b></p><p> 然后將文件保存到預(yù)先建立的文件夾中。設(shè)計窗口便新建完畢,如圖2所示:</p><p> 圖2 新建的設(shè)計窗口</p><p> 3. 元件的查找及放置。首先點擊工具箱左上角的“P”按
6、鈕,如圖3所示:</p><p> 圖3按鈕“P”所在位置</p><p> 彈出“Pick Devices”操作界面,如圖4所示:</p><p> 圖4 “Pick Devices”操作界面</p><p> 在關(guān)鍵字窗口輸入所需器件名稱,如AT89C51,系統(tǒng)會自動搜索到此元件,如圖5所示:</p><p&g
7、t; 圖5 元件搜索界面</p><p> 將所有元件搜索到以后按相應(yīng)位置在圖紙上放置好。本實驗所需的元器件如表1所示:</p><p> 表1 元件器件清單</p><p> 4.布線及調(diào)整。將鼠標(biāo)移至所要連接器件的管腳處,鼠標(biāo)箭頭會變成紅色虛線方框的樣式,此時按住鼠標(biāo)左鍵拖至將要連接的器件管腳處,松開左鍵即把兩器件連接。如果在連接器件時出現(xiàn)交叉或重疊
8、,可以對連線或元件位置進行適當(dāng)?shù)恼{(diào)整。布線后電路圖如圖6所示:</p><p><b> 圖6 電路原理圖</b></p><p> 三.程序編譯說明及流程圖</p><p> 1.MAIN程序說明</p><p> 主程序中調(diào)用了三個子函數(shù),分別是: 矩陣鍵盤掃描,數(shù)據(jù)顯示函數(shù),字符輸入及轉(zhuǎn)換。程序流程圖如下
9、所示。</p><p> 圖7 主程序流程圖</p><p> 2. 加減乘除四則運算模塊程序說明</p><p> 加減乘處四則運算子程序主要是用來識別輸入運算符號,并將輸入的第一個數(shù)和第二個數(shù)進行相應(yīng)的運算。程序流程圖如下所示:</p><p> 圖8 加減乘除四則運算程序流程圖</p><p> 2
10、. 運算結(jié)果轉(zhuǎn)換顯示模塊程序說明</p><p> 程序主要是用來轉(zhuǎn)化輸入輸出的數(shù)據(jù)為BCD碼,并通過八位數(shù)碼管動態(tài)掃描顯示。程序流程圖如下所示:</p><p> 圖9 運算結(jié)果轉(zhuǎn)換顯示程序流程圖</p><p> 3. 矩陣鍵盤模塊程序說明</p><p> 程序主要是用來對4*4鍵盤進行掃描并且編碼,該子程序的流程圖如下所示:
11、</p><p> 圖10 矩陣鍵盤模塊程序流程圖</p><p> 四.Proteus仿真說明</p><p> 將此程序在Keil中進行編譯生成“.hex”文件,將其導(dǎo)入單片機中,OK確定。點擊“開始”按鍵,進行仿真。載入“.hex”文件如見圖11所示:</p><p> 圖11 載入“.hex”文件</p>&
12、lt;p> 導(dǎo)入程序后,開始仿真。輸入第一個數(shù)為3和第二個數(shù)4,顯示結(jié)果如圖12~13所示:</p><p> 圖12 仿真結(jié)果數(shù)字3顯示</p><p> 圖13 仿真結(jié)果數(shù)字4顯示</p><p> 對輸入的第一個數(shù)和第二個數(shù)相加,仿真結(jié)果如圖14所示。</p><p> 圖14 仿真結(jié)果數(shù)字7顯示</p>
13、;<p> 對輸入的第一個數(shù)和第二個數(shù)相減,仿真結(jié)果如圖15所示。</p><p> 圖15 仿真結(jié)果數(shù)字-1顯示</p><p> 對輸入的第一個數(shù)和第二個數(shù)相乘,仿真結(jié)果如圖16所示。</p><p> 圖16 仿真結(jié)果數(shù)字12顯示</p><p> 對輸入的第一個數(shù)和第二個數(shù)相除,仿真結(jié)果如圖17所示。<
14、;/p><p> 圖17 仿真結(jié)果數(shù)字1顯示</p><p><b> 五.課程設(shè)計體會</b></p><p> 在本次的Proteus應(yīng)用軟件訓(xùn)練中,主要是針對Proteus軟件工作環(huán)境的熟悉以及掌握基本的操作,實現(xiàn)電路原理圖的繪制及電路仿真的實現(xiàn)。在這次的課程設(shè)計過程中,使我對Proteus的使用和仿真電路有了一定的了解和體會,對單片
15、機的C語言編程和電路設(shè)計也有了新的認識,并且還鍛煉了自己的思考能力和動手能力。鞏固了在單片機課中所學(xué)的知識,而且還學(xué)會了一些在書本以外的知識,豐富了我的單片機知識。</p><p> 通過這次的課程設(shè)計,我充分認識到理論與實際相結(jié)合的重要性,理論知識再豐富,沒有實際的操作經(jīng)驗,自身的能力是不會有所提高的。</p><p><b> 參考文獻</b></p&g
16、t;<p> 楊將新,李華軍,劉東駿等.單片機程序設(shè)計及應(yīng)用從基礎(chǔ)到實踐.北京:電子工業(yè)出版社,2006. </p><p> 【2】張毅剛,劉杰.單片機原理及應(yīng)用[M].哈爾濱:哈爾濱工業(yè)大學(xué)出版社,2008.</p><p> 【3】郭天祥. 新概念51單片機C語言教程:入門、提高、開發(fā)、拓展全攻略[M].北京:電子工業(yè)出版社,2009.</p>&l
17、t;p> 【4】沈德全等.MCS-51系列單片機接口電路與應(yīng)用程序?qū)嵗?北京:北京航空航天大學(xué)出版社,2004.</p><p> 【5】李學(xué)禮. 基于Proteus的8051單片機實例教程[M].北京:電子工業(yè)出版社,2008.6.</p><p> 【6】李勛,林廣艷等.單片微型計算機大學(xué)讀本. 北京:北京航空航天大學(xué)出版社,1998.11。</p><
18、p> 附錄Ⅱ 源程序代碼</p><p> #include<reg52.h></p><p> #define uint unsigned int</p><p> #define uchar unsigned char</p><p> unsigned char code table[]=</p>
19、;<p><b> {</b></p><p> 0x3f,0x06,0x5b,0x4f,</p><p> 0x66,0x6d,0x7d,0x07,</p><p> 0x7f,0x6f,0x77,0x7c,</p><p> 0x39,0x5e,0x79,0x71,0x40</p>
20、<p><b> };</b></p><p><b> int i,r;</b></p><p> unsigned int z,key,flag,temp,symbol;</p><p> long int result,first,second,sum;</p><p&
21、gt; uchar n,m,d ,c,h,y,q,u;</p><p> int a[20],buff[20];</p><p> //***延時約250us***//</p><p> void dlms(void) </p><p><b> {</b></p><p>&l
22、t;b> uchar i;</b></p><p> for(i=0;i<250;i++)</p><p><b> {}</b></p><p><b> }</b></p><p> //***鍵盤掃描延時函數(shù)***//</p><p>
23、 void delay1(uint m) </p><p><b> {</b></p><p><b> uint x,y;</b></p><p> for(x=m;x>0;x--)</p><p> for(y=110;y>0;y--);</p>
24、<p><b> }</b></p><p> //***LED動態(tài)掃描延時函數(shù)***//</p><p> void delay( z)</p><p><b> {</b></p><p> unsigned int y;</p><p> for
25、(y=0;y<z;y++);</p><p><b> }</b></p><p> //***運算并顯示函數(shù)***// </p><p> void display()</p><p><b> {</b></p><p> if(n==11&m=
26、=1) //判斷輸入的數(shù)正負</p><p><b> {</b></p><p><b> symbol=1;</b></p><p><b> }</b></p><p><b> else</b></p><p>
27、;<b> symbol=0;</b></p><p> if(n<=9)//判斷輸入是否為數(shù)值,并顯示</p><p><b> {</b></p><p><b> flag++;</b></p><p><b> q=flag;</b
28、></p><p> a[flag]=n;</p><p><b> }</b></p><p> if(n>9&n<15&n!=14) //判斷為運算符號,并清顯示</p><p><b> {</b></p><p>&
29、lt;b> c=1;</b></p><p><b> flag=0;</b></p><p><b> }</b></p><p> if(c==0) //將前后倆次輸入的數(shù)值轉(zhuǎn)化為十進制</p><p><b> {</b></p&
30、gt;<p> first=a[7]*1000000+a[6]*100000+a[5]*10000+a[4]*1000+a[3]*100+a[2]*10+a[1]*1;</p><p> if(symbol==1)</p><p><b> {</b></p><p> first=first*(-1);</p>
31、;<p> a[q+1]=16;//正數(shù)顯示1</p><p><b> }</b></p><p><b> else</b></p><p> {first=first;</p><p><b> symbol=0;</b></p>
32、<p><b> //負數(shù)顯示0</b></p><p><b> }</b></p><p><b> }</b></p><p> else if(c==1)</p><p><b> {</b></p><
33、p> second=a[7]*1000000+a[6]*100000+a[5]*10000+a[4]*1000+a[3]*100+a[2]*10+a[1]*1;</p><p> if(symbol==1)</p><p> {second=second*(-1);</p><p> a[q+1]=16;</p><p>&l
34、t;b> }</b></p><p><b> else</b></p><p> {second=second;</p><p><b> symbol=0;</b></p><p><b> }</b></p><p>
35、<b> }</b></p><p> switch(n)//將運算符號值存入變量保存</p><p><b> {</b></p><p> case 10:h=1; //+</p><p><b> break;</b></p><p>
36、; case 11:h=2; //-</p><p><b> break;</b></p><p> case 12:h=3; //x</p><p><b> break;</b></p><p> case 13:h=4; //%</p><p><
37、;b> break;</b></p><p> case 0:h=0; //%</p><p><b> break;</b></p><p> default:break;</p><p><b> } </b></p><p> if(fl
38、ag==0)</p><p><b> m++;</b></p><p> if(n==15) //對數(shù)值進行加減乘除運算</p><p><b> { </b></p><p> switch(h)</p><p><b> {</b&g
39、t;</p><p> case 1:result=first+second; //+</p><p><b> break;</b></p><p> case 2:result=first-second; //-</p><p><b> break;</b></p>
40、<p> case 3:result=first*second; //x</p><p><b> break;</b></p><p> case 4:result=first/second; //%</p><p><b> break;</b></p><p> case
41、 5:result=0;// rest</p><p><b> break;</b></p><p> default:break;</p><p><b> }</b></p><p> if(result<0) //對負數(shù)取絕對值,并顯示正負</p>&l
42、t;p><b> {</b></p><p> result=-result;</p><p><b> u=1;</b></p><p><b> }</b></p><p><b> else</b></p><p&
43、gt;<b> {</b></p><p><b> a[8]=0;</b></p><p><b> }</b></p><p> a[7]=result/1000000;//將結(jié)果輸出顯示</p><p> a[6]=result%1000000/100000
44、 ;</p><p> a[5]=result%100000/10000 ;</p><p> a[4]=result%10000/1000 ; </p><p> a[3]=result%1000/100; </p><p> a[2]=result%100/10 ;</p><p> a[1]=resu
45、lt%10;</p><p> for(i=1;i<=8;i++)</p><p> {if( a[i]>0)</p><p> buff[i]=1;</p><p> sum=sum+buff[i];</p><p><b> }</b></p><p
46、><b> if(u==1)</b></p><p><b> {</b></p><p> a[sum+1]=16;</p><p><b> u=0;</b></p><p><b> }</b></p><p>
47、;<b> y=1;</b></p><p><b> }</b></p><p> if(y==1&n==0)</p><p><b> {</b></p><p> //first=0;</p><p> //second=0;&
48、lt;/p><p><b> flag=0;</b></p><p><b> y=0;</b></p><p><b> result=0;</b></p><p><b> symbol=0;</b></p><p><
49、;b> c=0;</b></p><p><b> h=0;</b></p><p><b> sum=0;</b></p><p> for(i=1;i<=8;i++)</p><p><b> {</b></p><p&
50、gt;<b> a[i]=0;</b></p><p> buff[i]=0;</p><p><b> }</b></p><p><b> } </b></p><p><b> }</b></p><p>
51、uchar kbscan(void)</p><p><b> {</b></p><p> uchar p,a;//無符號數(shù)</p><p> P3=0xf0;//高位置高,低位置低</p><p> if((P3&0xf0)!=0xf0) //有按鍵則高位不全為 </p>
52、<p><b> {</b></p><p> dlms();//延時以防干擾</p><p> if((P3&0xf0)!=0xf0)//確實有按鍵</p><p><b> {</b></p><p> p=0xfe; // p= 1111 1110從第1行開
53、始掃描</p><p> while((p&0x10)!=0)//當(dāng)?shù)谖粸闀r停止循環(huán)掃描,此時已掃描行</p><p><b> {</b></p><p> P3=p; //裝入行掃描值</p><p> if((P3&0xf0)!=0xf0)//如果此行有按鍵,接下去獲取鍵值</p&g
54、t;<p><b> { </b></p><p> a=P3; //P口值送置a </p><p><b> //鍵碼對應(yīng)的數(shù)值</b></p><p> if(a==0xde)n=8;//數(shù)值為8 </p><p> if(a==0xed)n=4;//
55、數(shù)值為4 </p><p> if(a==0xdd)n=5;//數(shù)值為5 </p><p> if(a==0xbd)n=6;//數(shù)值為6 </p><p> if(a==0xeb)n=1;//數(shù)值為1 </p><p> if(a==0xdb)n=2;//數(shù)值為2 </p><p> if(a==0xbb)n
56、=3;//數(shù)值為3 </p><p> if(a==0xee)n=7;//數(shù)值為7 </p><p> if(a==0xbe)n=9;//數(shù)值為9</p><p> if(a==0xe7)n=0;//正負號</p><p> if(a==0xd7)n=14; //數(shù)值為0</p><p> if(a==0xb
57、7)n=15;// =</p><p> if(a==0x7e)n=13;// %</p><p> if(a==0x7d)n=12;//x</p><p> if(a==0x7b)n=11;//-</p><p> if(a==0x77)n=10;//+</p><p> while((P3&0x
58、f0)!=0xf0);//等待按鍵放開</p><p> display();//調(diào)用運算子函數(shù)</p><p> //return(n);//返回鍵值</p><p><b> }</b></p><p> else //不在第行,左移繼續(xù)掃描</p><p> p=
59、(p<<1)|0x01;//左移后低位為,所以將其置</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> return(16);//無按鍵返回初值</p><
60、p><b> }</b></p><p> //***LED動態(tài)掃描函數(shù)***//</p><p> void LED()</p><p> { for(i=0;i<=8;i++) //8個數(shù)碼管循環(huán)點亮 并顯示</p><p> {if(r>0x80)</p><p
61、><b> r=0x01;</b></p><p><b> else</b></p><p><b> r=r;</b></p><p> delay(40);</p><p><b> P2=r;</b></p><
62、p> switch(r) </p><p><b> {</b></p><p> case 0x01:P1=~table[a[1]];</p><p><b> break;</b></p><p> case 0x02:P1=~table[a[2]];</
63、p><p><b> break;</b></p><p> case 0x04:P1=~table[a[3]];</p><p><b> break;</b></p><p> case 0x08:P1=~table[a[4]];</p><p><b>
64、 break;</b></p><p> case 0x10:P1=~table[a[5]];</p><p><b> break;</b></p><p> case 0x20:P1=~table[a[6]];</p><p><b> break;</b></p>
65、;<p> case 0x40:P1=~table[a[7]];</p><p><b> break;</b></p><p> case 0x80:P1=~table[a[8]];</p><p><b> break;</b></p><p> default:brea
66、k;</p><p><b> }</b></p><p> delay(40);</p><p><b> r=r<<1; </b></p><p><b> }</b></p><p><b> }</b>
67、;</p><p> //***主函數(shù)***//</p><p> void main()</p><p><b> {</b></p><p> r=0x01;//LED移位變量賦值</p><p><b> while(1)</b></p><
68、;p><b> {</b></p><p> kbscan(); //調(diào)用鍵盤掃描和運算程序</p><p> LED(); //調(diào)用LED顯示程序</p><p><b> }</b></p><p><b> }</b></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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計報告---計算器設(shè)計
- java計算器課程設(shè)計報告---模擬科學(xué)計算器
- java課程設(shè)計報告—計算器
- 簡單計算器課程設(shè)計報告
- 簡易計算器課程設(shè)計報告
- 硬件課程設(shè)計報告--計算器
- java計算器課程設(shè)計報告
- vb計算器課程設(shè)計報告
- mfc計算器課程設(shè)計報告
- 簡單計算器課程設(shè)計報告
- java課程設(shè)計報告--計算器設(shè)計
- 課程設(shè)計-計算器
- 計算器java課程設(shè)計--簡單計算器
- 自解析計算器課程設(shè)計報告
- 模擬科學(xué)計算器 課程設(shè)計報告
- 簡易計算器vb課程設(shè)計報告
- 簡易計算器vb課程設(shè)計報告報告
- c++課程設(shè)計--計算器設(shè)計報告
- 計算器課程設(shè)計---計算器仿真程序設(shè)計
- java課程設(shè)計—計算器
評論
0/150
提交評論