計算器電子競賽_第1頁
計算器電子競賽_第2頁
計算器電子競賽_第3頁
計算器電子競賽_第4頁
計算器電子競賽_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、電子設(shè)計大賽論文計算器組長:姓名: 組員:姓名: 姓名: 姓名:聯(lián)系方式:一、設(shè)計內(nèi)容本設(shè)計是基于52系列單片機來進(jìn)行的數(shù)字計算器系統(tǒng)設(shè)計,可以完成計算器的鍵盤輸入,進(jìn)行加、減、乘、除基本四則運算,并在LCD上顯示相應(yīng)的結(jié)果;設(shè)計電路采用STC89C52單片機為主要控制電路,利用MM74C922作為計算器4*4鍵盤的掃描IC讀取鍵盤上的輸入;顯示采用字符LCD靜態(tài)顯示;軟件方面使用C語言編程,并用PROTUES仿真,具體設(shè)計如下:(1)由于設(shè)計的計算器要進(jìn)行四則運算,為了得到較好的顯示效果,經(jīng)綜合分析后,最后采用LCD 顯示數(shù)據(jù)和結(jié)果。(2)采用鍵盤輸入方式,鍵盤包括數(shù)字鍵(09)、符號鍵(+

2、、-、×、÷)、清除鍵(onc)和等號鍵(=),故只需要16 個按鍵即可,設(shè)計中采用矩陣鍵盤。(3)在執(zhí)行過程中,開機顯示零,等待鍵入數(shù)值,當(dāng)鍵入數(shù)字,通過LCD顯示出來,當(dāng)鍵入+、-、*、/運算符,計算器在內(nèi)部執(zhí)行數(shù)值轉(zhuǎn)換和存儲,并等待再次鍵入數(shù)值,當(dāng)再鍵入數(shù)值后將顯示鍵入的數(shù)值,按等號就會在LCD上輸出運算結(jié)果。(4)錯誤提示:當(dāng)計算器執(zhí)行過程中有錯誤時,會在LCD上顯示相應(yīng)的提示,如:當(dāng)輸入的數(shù)值或計算得到的結(jié)果大于計算器的表示范圍時,計算器會在LCD上提示overflow;當(dāng)除數(shù)為0時,計算器會在LCD上提示error。二、總體框圖(1)系統(tǒng)模塊圖:(2)算術(shù)運算程

3、序流程圖:(3)系統(tǒng)總流程圖:三、功能模塊(一)、總體硬件設(shè)計:本設(shè)計選用STC89C52單片機為主控單元; 顯示部分:采用LCD靜態(tài)顯示;按鍵部分:采用4*4鍵盤;用MM74C922為4*4鍵盤掃描IC,讀取輸入的鍵值??傮w設(shè)計效果如下圖:(二)、單片機接口電路說明:1、手動上電復(fù)位電路:當(dāng)VCC上電時,C充電,在10K電阻上出現(xiàn)電壓,使得單片機復(fù)位;幾個毫秒后,C充滿,10K電阻上電流降為0,電壓也為0,使得單片機進(jìn)入工作狀態(tài)。工作期間,按下S,C放電。S松手,C又充電,在10K電阻上出現(xiàn)電壓,使得單片機復(fù)位。幾個毫秒后,單片機進(jìn)入工作狀態(tài)。2、內(nèi)部時鐘模式電路:當(dāng)單片機工作于內(nèi)部時鐘模式

4、的時候,只需在XTAL1和XTAL2引腳連接一個晶體振蕩器或者陶瓷振蕩器,并接兩個電容后接地即可,在使用時對于電容的選擇有一定的要求:當(dāng)外接晶體振蕩器的時候,電容值一般選擇C1=C2=30+10pF或30-10pF;當(dāng)外接陶瓷振蕩器的時候,電容值一般選擇C1=C2=40+10pF或40-10pF;3、單片機與復(fù)位、時鐘電路連接電路圖:(三)、鍵盤接口電路:計算器輸入數(shù)字和其他功能按鍵要用到很多按鍵,如果采用獨立按鍵的方式,在這種情況下,編程會很簡單,但是會占用大量的I/O 口資源,因此在很多情況下都不采用這種方式,而是采用矩陣鍵盤的方案。矩陣鍵盤采用四條I/O 線作為行線,四條I/O 線作為列

5、線組成鍵盤,在行線和列線的每個交叉點上設(shè)置一個按鍵。這樣鍵盤上按鍵的個數(shù)就為4×4個。這種行列式鍵盤結(jié)構(gòu)能有效地提高單片機系統(tǒng)中I/O 口的利用率。矩陣鍵盤的工作原理:計算器的鍵盤布局如圖1所示:一般有16個鍵組成,在單片機中正好可以用一個P口實現(xiàn)16個按鍵功能,這種形式在單片機系統(tǒng)中也最常用。圖 1 矩陣鍵盤布局圖矩陣鍵盤內(nèi)部電路圖如圖2所示: 圖 2為了進(jìn)一步節(jié)省單片機I/O口資源,我們在設(shè)計中使用了MM74C922芯片。MM74C922是一款4*4鍵盤掃描IC,它可檢測到與之相連的4*4鍵盤的按鍵輸入,并通過數(shù)據(jù)輸出口將按鍵相應(yīng)的編碼輸出。其引腳圖如圖3所示:圖3 MM94C2

6、2硬件圖MM74C922引腳說明:(1) Y1Y4(腳1腳4):4*4鍵盤第一列至第四。(2) X1X4(腳11、10、8、7):4*4鍵盤第一行至第四行。(3) DOA DOD(Dataout AD,腳1417):按鍵之BCD碼輸出,其中DOA為LSB,DOD為MSB。(4) VCC(腳18):電源腳,+3V+15V。ab126計算公式大全(5) GND(腳9):接地管腳。新藝圖庫(6) OSC(Oscillator,腳5):鍵盤掃描電路之頻率所需外加電容的連引腳。(7) KBM(Keyboard Mask,腳6):內(nèi)部消除開關(guān)彈跳電路所外加電容的引腳。(8) OE(Output Enabl

7、e,腳13):芯片使能腳,接低電位可使芯片使能。(9) DA(Data Available,腳12):數(shù)據(jù)有效輸出腳。任一按鍵按下時,此腳位會輸出高電位,按鍵釋放后此腳又會恢復(fù)為低電位。如下圖4所示,在本設(shè)計中,計算器輸入鍵盤的4條行線、列線分別連接到MM74C922的X1-X4、Y1-Y4引腳,MM74C922的數(shù)據(jù)輸出口與單片機的P2口相連,MM74C922的DA引腳經(jīng)過一個非門連接到單片機的/INT0腳,當(dāng)MM74C922檢測到鍵盤輸入時,DA產(chǎn)生高電平,與之相連的/INT0檢測到低電平,給單片機一個中斷,單片機從P2口的低四位讀入鍵盤上按下的鍵的值。圖4 鍵盤接口電路圖 (四)、LCD

8、顯示模塊:本設(shè)計采用LCD液晶顯示器來顯示輸出數(shù)據(jù)。通過D0-D7引腳向LCD寫指令字或?qū)憯?shù)據(jù)以使LCD實現(xiàn)不同的功能或顯示相應(yīng)數(shù)據(jù)。圖5 LCD 模塊(五)運算模塊(單片機控制):STC89C52 單片機是在一塊芯片中集成了CPU、RAM、ROM、定時器/計數(shù)器和多功能I/O等一臺計算機所需要的基本功能部件。如果按功能劃分,它由如下功能部件組成,即微處理器(CPU)、數(shù)據(jù)存儲器(RAM)、程序存儲器(ROM/EPROM)、并行I/O 口、串行口、定時器/計數(shù)器、中斷系統(tǒng)及特殊功能寄存器(SFR)。單片機是靠程序運行的,并且可以修改。通過不同的程序?qū)崿F(xiàn)不同的功能,尤其是特殊的獨特的一些功能,通

9、過使用單片機編寫的程序可以實現(xiàn)高智能,高效率,以及高可靠性!因此我們采用單片機作為計算器的主要功能部件,可以很快地實現(xiàn)運算功能。四、軟件編程:1、主函數(shù)設(shè)計:/*函數(shù)聲明*/#include<reg52.h>#include<math.h>#define uchar unsigned char#define uint unsigned intchar translate(int keycode);void arithmetic();void init_LCM();void write_data(char ddata);void write_com(char comman

10、d);void check_BF();void clearLCD();void display(long a);void dealerror(); void dataoverflow();/*定義變量和數(shù)組*/long x=0,y=0,num=0;int operators,input,iny=0;char key;char error5="error"char overflow8="overflow"sbit EN=P34;sbit R_W=P35;sbit RS=P36;/*主函數(shù)*/main()EA=1;EX0=1;IT0=1;P2=0xff;di

11、splay(0);init_LCM();write_data(0x30);while(1)2、分塊程序設(shè)計:(1)、鍵盤輸入檢測程序設(shè)計:有鍵按下時,單片機響應(yīng)外部中斷0,轉(zhuǎn)入外部中斷0中斷處理函數(shù),在中斷處理函數(shù)中完成對按鍵的判斷,以進(jìn)行下一步的程序處理。/*鍵值轉(zhuǎn)化為鍵盤上按鍵值函數(shù)*/char translate(int keycode)switch(keycode)case 0:return '7'break;case 1:return '4'break;case 2:return '1'break;case 3:return '

12、c'break;case 4:return '8'break;case 5:return '5'break;case 6:return '2'break;case 7:return '0'break;case 8:return '9'break;case 9:return '6'break;case 10:return '3'break;case 11:return '='break;case 12:return '/'break;case 1

13、3:return '*'break;case 14:return '-'break;case 15:return '+'break; /*外部中斷0處理函數(shù)*/void INT_0(void) interrupt 0 using 0key=translate(P2&0x0f);if(key<='9'&&key>='0') /判斷按下的鍵是否為數(shù)值num=num*10+(key-'0');if (operators>0)y=num;iny=1;elsex=nu

14、m;if(num<134217728&&num>-134217728) /當(dāng)前數(shù)值是否超出限定范圍display(num);elsedataoverflow();elseswitch(key)case 'c':x=0;y=0;num=0;iny=0;operators=0;display(num);break;case '=':arithmetic();iny=0;operators=0;num=0;break;case '+': if (operators)arithmetic();operators=1;num=0

15、;break;case '-': if (operators)arithmetic();operators=2;num=0;break;case '*': if (operators)arithmetic();operators=3;num=0;break;case '/':if (operators)arithmetic();operators=4;num=0;break;(2)、算術(shù)運算程序設(shè)計:/*算術(shù)運算函數(shù)*/void arithmetic()if (iny)switch(operators)case 1:x=x+y;num=x;if(

16、num<134217728&&num>-134217728)display(num);elsedataoverflow();break;case 2:x=x-y;num=x;if(num<134217728&&num>-134217728)display(num);elsedataoverflow();break;case 3:x=x*y;num=x;if(num<134217728&&num>-134217728)display(num);elsedataoverflow();break;case 4:if

17、(y=0)dealerror();elsex=x/y;num=x; if(num<134217728&&num>-134217728)display(num);elsedataoverflow();break;y=0;(3)、LCD顯示程序設(shè)計:利用LCD靜態(tài)顯示,通過程序向LCD寫指令字或數(shù)據(jù)使LCD完成不同功能或顯示相應(yīng)數(shù)據(jù)。/*LCD初始化函數(shù)*/void init_LCM()write_com(0x30);write_com(0x30);write_com(0x30);write_com(0x38);write_com(0x08);write_com(0x0

18、1);write_com(0x06);write_com(0x0e);/*LCD寫數(shù)據(jù)函數(shù)*/void write_data(char ddata)RS=1;/*寫指令*/R_W=0;EN=1;/*使能信號開*/P1=ddata;/*將數(shù)據(jù)送入p1口*/EN=0;/*使能信號關(guān)*/check_BF();/*LCD寫指令函數(shù)*/void write_com(char command)RS=0;/*寫指令*/R_W=0;EN=1;/*使能信號開*/P1=command;/*將數(shù)據(jù)送入p1口*/EN=0;/*使能信號關(guān)*/check_BF();/*LCD檢查忙碌函數(shù)*/void check_BF()

19、char i,x=0x80;P1=0xff;while(x&0x80)RS=0;R_W=1;EN=1;x=P1;EN=0;for (i=0;i<10;i+);EN=0;/*關(guān)閉使能信號*/*LCD清屏函數(shù)*/void clearLCD()write_com(0x01);/*LCD顯示函數(shù)*/void display(long a)long temp,b,c=-1;int lenth=1,i,j;clearLCD();if(a<0)a=a*c;write_data('-'); temp=a;while(temp=temp/10)!=0)lenth+;for(i

20、=lenth;i>0;i-)b=1;for(j=0;j<i-1;j+)b=b*10;write_data(0x30+a/b);a=a%b;(4)、錯誤處理及提示程序設(shè)計:/*除數(shù)為處理函數(shù)*/void dealerror()int i=0;clearLCD();for(i=0;i<5;i+)write_data(errori);/*數(shù)值溢出處理函數(shù)*/void dataoverflow()int i=0;clearLCD();for(i=0;i<8;i+)write_data(overflowi);五、聯(lián)機調(diào)試:在聯(lián)機調(diào)試的過程中,由于一開始設(shè)的液晶顯示器的電壓過高,使得屏幕太亮,所以沒有數(shù)字顯示。在我們的耐心調(diào)試之下,發(fā)現(xiàn)電壓在1.5一2V是液晶顯示器正常工作電壓。修改后,LCD顯示正確。六、心得體會這是我們進(jìn)入大學(xué)來的第三個關(guān)于設(shè)計類的課題。第一個是C語言,第二個是電子科技競賽。這次與前兩次的不同在于這個留給我的更多的是抽象與糾結(jié)。在這次長通杯競賽中,我學(xué)到了好多東西,有些甚至是課本上面所沒有的。1、我們對proteus仿真軟件有了初步的了解和認(rèn)識。通過使用proteus仿真軟件,可以讓我們在虛擬的環(huán)境中進(jìn)行實驗,可以先通過它來檢驗電路的正確性和可行性,而不需要真實

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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

提交評論