單片機計算器課程設計報告_第1頁
單片機計算器課程設計報告_第2頁
單片機計算器課程設計報告_第3頁
單片機計算器課程設計報告_第4頁
單片機計算器課程設計報告_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

基于單片機的簡易計算器設計基于單片機的簡易計算器設計一、設計任務和性能指標1.1設計任務利用單片機及外圍接口電路(鍵盤接口和顯示接口電路)設計制作一個計算器,用四位一體數碼管顯示計算數值及結果。要求用Protel畫出系統(tǒng)的電路原理圖(要求以最少組件,實現系統(tǒng)設計所要求的功能),繪出程序流程圖,并給出程序清單(要求思路清晰,盡量簡潔,主程序和子程序分開,使程序有較強的可讀性)。1.2性能指標1加法:能夠計算四位以內的數的加法。2減法:能計算四位數以內的減法。3乘法:能夠計算兩位數以內的乘法。4除法:能夠計算四位數的乘法5有清零功能,能隨時對運算結果和數字輸入進行清零。二、系統(tǒng)設計方案按照系統(tǒng)設計的功能的要求,初步確定設計系統(tǒng)由單片機主控模塊、四位一體數碼管顯示模塊、鍵掃描接口電路共三個主要模塊組成。主控芯片使用51系列AT89C51單片機,采用高性能的靜態(tài)80C51設計,它由先進工藝制造,并帶有非易失性Flash程序存儲器。它是一種高性能、低功耗的8位COMS微處理芯片,市場應用最多。鍵盤電路采用4*4矩陣鍵盤電路。顯示模塊采用四位一體共陽極數碼管和SN74LS244鎖存芯片構成等器件構成。三、硬件系統(tǒng)設計1.單片機最小系統(tǒng)單片機最小系統(tǒng)就是支持主芯片正常工作的最小電路部分,包括主控芯片、復位電路和晶振電路。主控芯片選取STC89C51RC芯片,因其具有良好的性能及穩(wěn)定性,價格便宜應用方便。晶振選取11.0592MHz,晶振旁電容選取30pF。采用按鍵復位電路,電阻分別選取100Ω和10K,電容選取10μF。單片機最小系統(tǒng)硬件電路圖如圖(1)所示。圖(1)單片機最小系統(tǒng)2.鍵盤接口電路計算器所需按鍵有:數字鍵:’1’,’2’,’3’,’4’,’5’,’6’,’7’,’功能鍵:’+’,’-‘,’*’,’/’,’=’,’C(清零)’共計16個按鍵,采用4*4矩陣鍵盤,鍵盤的行和列之間都有公共端相連,四行采用端口P0.0~P0.3,四列采用端口P3.0~P3.3,通過8個端口的的高低電平完成對矩陣鍵盤的控制。通過對16個按鍵進行編碼,從而得到鍵盤的口地址,對比P1口德掃描結果和各按鍵的地址,我們就可以得到是哪個鍵按下,從而完成鍵盤的功能。3.數碼管顯示電路采用4位一體的數碼管對計算數據和結果進行顯示,這里選取共陽數碼管,利用NPN三極管對數碼管進行驅動,為了節(jié)省I/O資源,采取動態(tài)顯示的方法來顯示計算數據及結果。利用SN74LS244N鎖存器來實現數碼管的動態(tài)顯示,P1口輸出顯示值,P2.0~P2.3為位選端口。通過鎖存器對段選信號的鎖存,最終得到對數碼管輸入數據的控制。以下為數碼顯示電路的硬件電路圖,左圖為數碼管驅動電路,右圖為段選信號鎖存電路。四.軟件設計部分根據選題要求,系統(tǒng)編程如下所示:#include"reg51.h"sbitP3_0=P3^0;sbitP3_1=P3^1;sbitP3_2=P3^2;sbitP3_3=P3^3;sbitP3_4=P3^4;sbitP3_5=P3^5;sbitP3_6=P3^6;sbitP3_7=P3^7;unsignedcharsz[11],xs1[4],xs2[4],sj;inti,cs,bb,t1,t2,fh,s1,s2;voidchushihua(){ bb=1; xs1[0]=10;xs1[1]=10;xs1[2]=10;xs1[3]=10; xs2[0]=10;xs2[1]=10;xs2[2]=10;xs2[3]=10; t1=0;t2=0;s1=s2=0; fh=0; cs=1; }voidxianshi(unsignedcharxs[4]){ inti,j; unsignedcharzy; zy=0x08; for(i=0;i<4;i++) { P2=(0xff-zy); P1=sz[xs[i]]; zy=(zy>>1); for(j=0;j<100;j++) ; }// for(i=0;i<100;i++); return;}unsignedcharsaomiao(){ inti,j; unsignedcharpp; for(i=0;i<1000;i++); P0=0xfe; P3=0x0f; pp=P3; if(P3_0==0) {P3=0x0f;pp=P3;while(P3_0==0);for(i=0;i<1000;i++);return7;} if(P3_1==0) {P3=0x0f;pp=P3;while(P3_1==0);for(i=0;i<1000;i++);return8;} if(P3_2==0) {P3=0x0f;pp=P3;while(P3_2==0);for(i=0;i<1000;i++);return9;} if(P3_3==0) {P3=0x0f;pp=P3;while(P3_3==0);for(i=0;i<1000;i++);return11;} //==========1 P0=0xfd; P3=0x0f; pp=P3; if(P3_0==0) {P3=0x0f;pp=P3;while(P3_0==0);for(i=0;i<1000;i++);return4;} if(P3_1==0) {P3=0x0f;pp=P3;while(P3_1==0);for(i=0;i<1000;i++);return5;} if(P3_2==0) {P3=0x0f;pp=P3;while(P3_2==0);for(i=0;i<1000;i++);return6;} if(P3_3==0) {P3=0x0f;pp=P3;while(P3_3==0);for(i=0;i<1000;i++);return12;} //==========2 P0=0xfb; P3=0x0f; pp=P3; if(P3_0==0) {P3=0x0f;pp=P3;while(P3_0==0);for(i=0;i<1000;i++);return1;} if(P3_1==0) {P3=0x0f;pp=P3;while(P3_1==0);for(i=0;i<1000;i++);return2;} if(P3_2==0) {P3=0x0f;pp=P3;while(P3_2==0);for(i=0;i<1000;i++);return3;} if(P3_3==0) {P3=0x0f;pp=P3;while(P3_3==0);for(i=0;i<1000;i++);return13;} //==========3 P0=0xf7; P3=0x0f; pp=P3; if(P3_0==0) {P3=0x0f;pp=P3;while(P3_0==0);for(i=0;i<1000;i++);return16;} if(P3_1==0) {P3=0x0f;pp=P3;while(P3_1==0);for(i=0;i<1000;i++);return0;} if(P3_2==0) {P3=0x0f;pp=P3;while(P3_2==0);for(i=0;i<1000;i++);return15;} if(P3_3==0) {P3=0x0f;pp=P3;while(P3_3==0);for(i=0;i<1000;i++);return14;} //===========4 return10;}voidchuli(unsignedcharx){ inti; if(x==16) { cs=0; return; } if(x>=0&&x<10) { if(bb==1) { if(s1==4){cs=0;return;} else { for(i=3;i>0;i--) xs1[i]=xs1[i-1]; xs1[0]=x; s1++; t1=t1*10+x; } } if(bb==2) { if(s2==4){cs=0;return;} else { for(i=3;i>0;i--) xs2[i]=xs2[i-1]; xs2[0]=x; s2++; t2=t2*10+x; } } } if(x>10) { if(bb==1){fh=x;bb=2;return;} if(bb==2) { if(fh==11)t1=t1/t2; if(fh==12)t1=t1*t2; if(fh==13)t1=t1-t2; if(fh==14)t1=t1+t2; if(t1>=10000){cs=0;return;} else { if(t1>=0&&t1<10) {xs1[0]=t1;xs1[1]=10;xs1[2]=10;xs1[3]=10;} if(t1>=10&&t1<100) {xs1[0]=t1%10;xs1[1]=t1/10;xs1[2]=10;xs1[3]=10;} if(t1>=100&&t1<1000) {xs1[0]=t1%10;xs1[1]=(t1-(t1/100)*100)/10;xs1[2]=t1/100;xs1[3]=10;} if(t1>=1000&&t1<10000) {xs1[0]=t1%10;xs1[1]=t1%100/10;xs1[2]=(t1-(t1/1000)*1000)/100;xs1[3]=t1/1000;} bb=2; s2=0; t2=0; xs2[0]=10;xs2[1]=10;xs2[2]=10;xs2[3]=10; fh=x; } } }}voidmain(){ sz[0]=0xfc; sz[1]=0x60; sz[2]=0xda; sz[3]=0xf2; sz[4]=0x66; sz[5]=0xb6; sz[6]=0xbe; sz[7]=0xe0; sz[8]=0xfe; sz[9]=0xf6; sz[10]=0x00; cs=0; for(;;) { if(cs==0)chushihua(); if(cs==1)sj=saomiao(); if(cs==1&&sj!=10)chuli(sj); if(cs==1&&(bb==1||bb==2&&s2==0))xianshi(xs1); if(cs==1&&(bb==2&&s2!=0))xianshi(xs2); }}軟件設計好后,在KEIL上面進行仿真,把仿真得到的文件下載到Proteus里面進行仿真,得到Proteus仿真電路圖如下所示:圖(2)計算器Proteus仿真電路圖五.硬件電路焊接及調試根據電路圖紙,焊接好硬件電路,把程序下載到單片機芯片,接通好電源,進行調試。在焊接好器件后,先不要將芯片插在芯片座上,要先驗證先板上電源是否好用,有無短路等。接上USB電源,用萬用表測量個芯片座對應電源和地之間的電壓值,觀察電壓值是否正常。一切正常后方可將芯片插入芯片座,以繼續(xù)測試其他功能。將芯片插上后,對各個模塊進行調試,按鍵是否工作正常,數碼管是否顯示正常等。編寫相關部分的測試程序對其進行測試。各部分硬件檢測無誤后,下載程序進行整體調試,一切正常后,結束調試過程。用所設計的單片機進行數字計算,顯示結果與任務要求一致,焊接電路符合要求。六.課程設計心得兩周的時間,終于把單片機課程設計搞完了。整個體會還是比較多的。首先是題目的選擇,各方面的原因,自己還是想選個簡單點的題目,不過最后選來選去,還是選擇了計算器。由于自己對單片機編程還不是很熟悉,結果在設計的時候遇到了一系列問題,程序總是調試部處理,不過還好,最后在同學的幫助下終于把程序調試出來了,雖然程序設計實現的功能與老師要求的不盡相同,不過勉強還算可以。從這里我知道了基本知識的重要性。其實進行程序設計的時候主要是對各功能模塊的把握。計算器里面最難的一部分是矩陣鍵盤的掃描和編碼,那個費了很大力氣。另外一點就是硬件焊接調試部分。焊接的時候到時輕松,一個下午就焊接好了,然后是調試部分。調試花費的時間還是比較長的。不過有了上個學期數字電路焊接調試的經驗,這次單片機調試還算是比較順利。我也是從電路板的正負電源檢測起,一步一步來,最終得到了想要的結果。調試的時候主要遇到了兩個問題。一個是鍵盤總是沒有反應,為了這個自己調試了很久,前前后后把電路板檢查了幾次,最后才發(fā)現是鍵盤本身的問題,和同學們換了個好鍵盤才行。另一個問題是總是顯示不出來1、4、7這三個數字。檢測來檢測去,發(fā)現來是在測試最小系統(tǒng)時在一個位選端接了高電平,對位選信號產生了影響。當把那個高電平去掉后,終于得到了正確的結果。總的來說這次課程設計達到了完成了基本任務,達到了基本要求。通過親身對程序設計和電路焊接調試的體會,自己對單片機有

溫馨提示

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

評論

0/150

提交評論