51單片機的簡單計算器設計和仿真_第1頁
51單片機的簡單計算器設計和仿真_第2頁
51單片機的簡單計算器設計和仿真_第3頁
51單片機的簡單計算器設計和仿真_第4頁
51單片機的簡單計算器設計和仿真_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

...wd......wd......wd...基于單片機的簡易計算器設計與仿真設計題目:基于單片機的簡易計算器設計與仿真一、設計實驗條件:地點:自動化系實驗室實驗設備:PC機〔裝有Keil;Protues;Word;Visio〕二、設計任務:本系統(tǒng)選用AT89C51單片機為主控機。通過擴展必要的外圍接口電路,實現(xiàn)對計算器的設計,具體設計如下:〔1〕由于設計的計算器要進展四則運算,為了得到較好的顯示效果,經(jīng)綜合分析后,最后采用LCD顯示數(shù)據(jù)和結果?!?〕采用鍵盤輸入方式,鍵盤包括數(shù)字鍵〔0~9〕、符號鍵〔+、-、×、÷〕、去除鍵(on\c)和等號鍵〔=〕,故只需要16個按鍵即可,設計中采用集成的計算鍵盤。〔3〕在執(zhí)行過程中,開機顯示零,等待鍵入數(shù)值,當鍵入數(shù)字,通過LCD顯示出來,當鍵入+、-、*、/運算符,計算器在內(nèi)部執(zhí)行數(shù)值轉(zhuǎn)換和存儲,并等待再次鍵入數(shù)值,當再鍵入數(shù)值后將顯示鍵入的數(shù)值,按等號就會在LCD上輸出運算結果?!?〕錯誤提示:當計算器執(zhí)行過程中有錯誤時,會在LCD上顯示相應的提示,如:當輸入的數(shù)值或計算得到的結果大于計算器的表示范圍時,計算器會在LCD上提示overflow;當除數(shù)為0時,計算器會在LCD上提示error。設計要求:分別對鍵盤輸入檢測模塊;LCD顯示模塊;算術運算模塊;錯誤處理及提示模塊進展設計,并用Visio畫系統(tǒng)方框圖,keil與protues仿真分析其設計結果。三、設計時間與設計時間安排:1、設計時間:6月27日~7月8日2、設計時間安排:熟悉課題、收集資料:3天〔6月27日~6月29日)具體設計〔含上機實驗〕:6天〔6月30日~7月5日)編寫課程設計說明書:2天〔7月6日~7月7日)辯論:1天〔7月8日〕四、設計說明書的內(nèi)容:1、前言:(自己寫,組員之間不能一樣,寫完后將紅字刪除,排版時注意對齊〕本設計是基于51系列單片機來進展的數(shù)字計算器系統(tǒng)設計,可以完成計算器的鍵盤輸入,進展加、減、乘、除根本四則運算,并在LCD上顯示相應的結果;設計電路采用AT89C51單片機為主要控制電路,利用MM74C922作為計算器4*4鍵盤的掃描IC讀取鍵盤上的輸入;顯示采用字符LCD靜態(tài)顯示;軟件方面使用C語言編程,并用PROTUES仿真。2、設計題目與設計任務:現(xiàn)實生活中人們熟知的計算器,其功能主要如下:〔1〕鍵盤輸入;〔2〕數(shù)值顯示;〔3〕加、減、乘、除四則運算;(4)對錯誤的控制及提示。針對上述功能,計算器軟件程序要完成以下模塊的設計:(1)鍵盤輸入檢測模塊;〔2〕LCD顯示模塊;〔3〕算術運算模塊;〔4〕錯誤處理及提示模塊。3、主體設計局部:〔1〕、系統(tǒng)模塊圖:〔2〕、算術運算程序流程圖:〔3〕、系統(tǒng)總流程圖:〔4〕、硬件設計:〔一〕、總體硬件設計:本設計選用AT89C51單片機為主控單元;顯示局部:采用LCD靜態(tài)顯示;按鍵局部:采用4*4鍵盤;用MM74C922為4*4鍵盤掃描IC,讀取輸入的鍵值??傮w設計效果如以下列圖:〔二〕、單片機接口電路說明:1、手動上電復位電路:當VCC上電時,C充電,在10K電阻上出現(xiàn)電壓,使得單片機復位;幾個毫秒后,C充滿,10K電阻上電流降為0,電壓也為0,使得單片機進入工作狀態(tài)。工作期間,按下S,C放電。S松手,C又充電,在10K電阻上出現(xiàn)電壓,使得單片機復位。幾個毫秒后,單片機進入工作狀態(tài)。2、內(nèi)部時鐘模式電路:當單片機工作于內(nèi)部時鐘模式的時候,只需在XTAL1和XTAL2引腳連接一個晶體振蕩器或者陶瓷振蕩器,并接兩個電容后接地即可,在使用時對于電容的選擇有一定的要求:當外接晶體振蕩器的時候,電容值一般選擇C1=C2=30+10pF或30-10pF;當外接陶瓷振蕩器的時候,電容值一般選擇C1=C2=40+10pF或40-10pF;3、AT89C51單片機引腳介紹:VCC:供電電壓。GND:接地。P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P0口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0口作為原碼輸入口,當FIASH進展校驗時,P0輸出原碼,此時P0外部必須被拉高。P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1〞時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進展存取時,P2口輸出地址的高八位。在給出地址“1〞時,它利用內(nèi)部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進展讀寫時,P2口輸出其特殊功能存放器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1〞后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流〔ILL〕這是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口:P3.0RXD〔串行輸入口〕P3.1TXD〔串行輸出口〕P3.2/INT0〔外部中斷0〕P3.3/INT1〔外部中斷1〕P3.4T0〔記時器0外部輸入〕P3.5T1〔記時器1外部輸入〕P3.6/WR〔外部數(shù)據(jù)存儲器寫選通〕P3.7/RD〔外部數(shù)據(jù)存儲器讀選通〕P3口同時為閃爍編程和編程校驗接收一些控制信號。RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想制止ALE的輸出可在SFR8EH地址上置0。此時,ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE制止,置位無效。/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。/EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器〔0000H-FFFFH〕,不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源〔VPP〕。XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。4、單片機與復位、時鐘電路連接電路圖:〔三〕、鍵盤接口電路:計算器輸入數(shù)字和其他功能按鍵要用到很多按鍵,如果采用獨立按鍵的方式,在這種情況下,編程會很簡單,但是會占用大量的I/O口資源,因此在很多情況下都不采用這種方式,而是采用矩陣鍵盤的方案。矩陣鍵盤采用四條I/O線作為行線,四條I/O線作為列線組成鍵盤,在行線和列線的每個穿插點上設置一個按鍵。這樣鍵盤上按鍵的個數(shù)就為4×4個。這種行列式鍵盤構造能有效地提高單片機系統(tǒng)中I/O口的利用率。矩陣鍵盤的工作原理:計算器的鍵盤布局如圖1所示:一般有16個鍵組成,在單片機中正好可以用一個P口實現(xiàn)16個按鍵功能,這種形式在單片機系統(tǒng)中也最常用。圖1矩陣鍵盤布局圖矩陣鍵盤內(nèi)部電路圖如圖2所示:為了進一步節(jié)省單片機I/O口資源,我們在設計中使用了MM74C922芯片。MM74C922是一款4*4鍵盤掃描IC,它可檢測到與之相連的4*4鍵盤的按鍵輸入,并通過數(shù)據(jù)輸出口將按鍵相應的編碼輸出。其引腳圖如圖3所示:圖3MM94C22硬件圖MM74C922引腳說明:(1)Y1~Y4〔腳1~腳4〕:4*4鍵盤第一列至第四。(2)X1~X4〔腳11、10、8、7〕:4*4鍵盤第一行至第四行。(3)DOA~DOD〔DataoutA~D,腳14~17〕:按鍵之BCD碼輸出,其中DOA為LSB,DOD為MSB。(4)VCC〔腳18〕:電源腳,+3V~+15V。\o"ab126計算公式大全\"\\t\"_blank"ab126計算公式大全(5)GND〔腳9〕:接地管腳。\o"新藝圖庫\"\\t\"_blank"新藝圖庫(6)OSC〔Oscillator,腳5〕:鍵盤掃描電路之頻率所需外加電容的連引腳。(7)KBM〔KeyboardMask,腳6〕:內(nèi)部消除開關彈跳電路所外加電容的引腳。(8)OE〔OutputEnable,腳13〕:芯片使能腳,接低電位可使芯片使能。(9)DA〔DataAvailable,腳12〕:數(shù)據(jù)有效輸出腳。任一按鍵按下時,此腳位會輸出高電位,按鍵釋放后此腳又會恢復為低電位。MM74C922對各按鍵的響應如下表所示:如以下列圖4所示,在本設計中,計算器輸入鍵盤的4條行線、列線分別連接到MM74C922的X1-X4、Y1-Y4引腳,MM74C922的數(shù)據(jù)輸出口與單片機的P2口相連,MM74C922的DA引腳經(jīng)過一個非門連接到單片機的/INT0腳,當MM74C922檢測到鍵盤輸入時,DA產(chǎn)生高電平,與之相連的/INT0檢測到低電平,給單片機一個中斷,單片機從P2口的低四位讀入鍵盤上按下的鍵的值。圖4鍵盤接口電路圖〔四〕、LCD顯示模塊:本設計采用LCD液晶顯示器來顯示輸出數(shù)據(jù)。通過D0-D7引腳向LCD寫指令字或?qū)憯?shù)據(jù)以使LCD實現(xiàn)不同的功能或顯示相應數(shù)據(jù)。圖5LCD模塊〔五〕運算模塊〔單片機控制〕:MCS-51單片機是在一塊芯片中集成了CPU、RAM、ROM、定時器/計數(shù)器和多功能I/O等一臺計算機所需要的根本功能部件。如果按功能劃分,它由如下功能部件組成,即微處理器〔CPU〕、數(shù)據(jù)存儲器〔RAM〕、程序存儲器〔ROM/EPROM〕、并行I/O口、串行口、定時器/計數(shù)器、中斷系統(tǒng)及特殊功能存放器〔SFR〕。單片機是靠程序運行的,并且可以修改。通過不同的程序?qū)崿F(xiàn)不同的功能,尤其是特殊的獨特的一些功能,通過使用單片機編寫的程序可以實現(xiàn)高智能,高效率,以及高可靠性!因此我們采用單片機作為計算器的主要功能部件,可以很快地實現(xiàn)運算功能。3.5、軟件編程:1、主函數(shù)設計:/******************函數(shù)聲明*****************/#include<reg51.h>#include<math.h>#defineucharunsignedchar#defineuintunsignedint chartranslate(intkeycode);voidarithmetic();voidinit_LCM();voidwrite_data(charddata);voidwrite_com(charcommand);voidcheck_BF();voidclearLCD();voiddisplay(longa);voiddealerror(); voiddataoverflow();/******************定義變量和數(shù)組*****************/longx=0,y=0,num=0;intoperators,input,iny=0;charkey;charerror[5]="error";charoverflow[8]="overflow";sbitEN=P3^4;sbitR_W=P3^5;sbitRS=P3^6;/******************主函數(shù)*****************/main(){EA=1;EX0=1;IT0=1;P2=0xff;display(0);init_LCM();write_data(0x30);while(1){}}2、分塊程序設計:〔1〕、鍵盤輸入檢測程序設計:有鍵按下時,單片機響應外部中斷0,轉(zhuǎn)入外部中斷0中斷處理函數(shù),在中斷處理函數(shù)中完成對按鍵的判斷,以進展下一步的程序處理。/**********鍵值轉(zhuǎn)化為鍵盤上按鍵值函數(shù)*************/chartranslate(intkeycode){switch(keycode){case0:return'7';break;case1:return'4';break;case2: return'1'; break;case3: return'c'; break;case4: return'8'; break;case5: return'5'; break;case6: return'2'; break;case7: return'0'; break;case8: return'9'; break;case9: return'6'; break;case10: return'3'; break;case11: return'='; break;case12: return'/'; break;case13: return'*'; break;case14: return'-'; break;case15: return'+'; break; }}/***********外部中斷0處理函數(shù)*************/voidINT_0(void)interrupt0using0{key=translate(P2&0x0f);if(key<='9'&&key>='0')//判斷按下的鍵是否為數(shù)值{num=num*10+(key-'0');if(operators>0){y=num;iny=1;}elsex=num;if(num<134217728&&num>-134217728)//當前數(shù)值是否超出限定范圍{ display(num);}elsedataoverflow();}else{switch(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; 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ù)*************/voidarithmetic(){if(iny){switch(operators){case1:x=x+y;num=x;if(num<134217728&&num>-134217728){display(num);}elsedataoverflow();break;case2:x=x-y;num=x;if(num<134217728&&num>-134217728){ display(num);}elsedataoverflow();break;case3:x=x*y;num=x;if(num<134217728&&num>-134217728){ display(num);}elsedataoverflow();break;case4:if(y==0)dealerror();else{x=x/y;num=x;if(num<134217728&&num>-134217728){ display(num);}elsedataoverflow();} break;}y=0;}}〔3〕、LCD顯示程序設計:利用LCD靜態(tài)顯示,通過程序向LCD寫指令字或數(shù)據(jù)使LCD完成不同功能或顯示相應數(shù)據(jù)。/**************LCD初始化函數(shù)*************/voidinit_LCM(){write_com(0x30);write_com(0x30);write_com(0x30);write_com(0x38);write_com(0x08);write_com(0x01);write_com(0x06);write_com(0x0e);}/***********LCD寫數(shù)據(jù)函數(shù)*************/voidwrite_data(charddata){RS=1;/*寫指令*/R_W=0; EN=1;/*使能信號開*/P1=ddata;/*將數(shù)據(jù)送入p1口*/EN=0;/*使能信號關*/check_BF();}/***********LCD寫指令函數(shù)*************/voidwrite_com(charcommand){ RS=0;/*寫指令*/R_W=0; EN=1;/*使能信號開*/P1=command;/*將數(shù)據(jù)送入p1口*/EN=0;/*使能信號關*/check_BF();}/************LCD檢查忙碌函數(shù)***********/voidcheck_BF(){chari,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;/*關閉使能信號*/}/**********LCD清屏函數(shù)**********/voidclearLCD(){write_com(0x01);}/**********LCD顯示函數(shù)**********/voiddisplay(longa){longtemp,b,c=-1;intlenth=1,i,j;clearLCD();if(a<0){a=a*c;write_data('-');} temp=a;while((temp=temp/10)!=0){lenth++;}for(i=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ù)**********/voiddealerror(){inti=0;clearLCD();for(i=0;i<5;i++)write_data(error[i]);}/*********數(shù)值溢出處理函數(shù)**********/voiddataoverflow(){inti=0;clearLCD();for(i=0;i<8

溫馨提示

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

評論

0/150

提交評論