計算器課程設(shè)計報告_第1頁
已閱讀1頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論