51單片機(jī)的簡(jiǎn)單計(jì)算器設(shè)計(jì)與仿真_第1頁(yè)
51單片機(jī)的簡(jiǎn)單計(jì)算器設(shè)計(jì)與仿真_第2頁(yè)
51單片機(jī)的簡(jiǎn)單計(jì)算器設(shè)計(jì)與仿真_第3頁(yè)
51單片機(jī)的簡(jiǎn)單計(jì)算器設(shè)計(jì)與仿真_第4頁(yè)
51單片機(jī)的簡(jiǎn)單計(jì)算器設(shè)計(jì)與仿真_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、設(shè)計(jì)題目:基于單片機(jī)的簡(jiǎn)易計(jì)算器設(shè)計(jì)與仿真一、設(shè)計(jì)實(shí)驗(yàn)條件:地 點(diǎn):自動(dòng)化系實(shí)驗(yàn)室實(shí)驗(yàn)設(shè)備:PC機(jī)( 裝有Keil;Protues;Word ;Visio )二、設(shè)計(jì)任務(wù):本系統(tǒng)選用AT89C51單片機(jī)為主控機(jī)。通過(guò)擴(kuò)展必要的外圍接口電路,實(shí)現(xiàn)對(duì)計(jì)算器的設(shè)計(jì),具體設(shè)計(jì)如下:(1)由于設(shè)計(jì)的計(jì)算器要進(jìn)行四則運(yùn)算,為了得到較好的顯示效果,經(jīng)綜合分析后,最后采用LCD 顯示數(shù)據(jù)和結(jié)果。(2)采用鍵盤(pán)輸入方式,鍵盤(pán)包括數(shù)字鍵(09)、符號(hào)鍵(+、-、×、÷)、清除鍵(onc)和等號(hào)鍵(=),故只需要16 個(gè)按鍵即可,設(shè)計(jì)中采用集成的計(jì)算鍵盤(pán)。(3)在執(zhí)行過(guò)程中,開(kāi)機(jī)顯示零,等待鍵入

2、數(shù)值,當(dāng)鍵入數(shù)字,通過(guò)LCD顯示出來(lái),當(dāng)鍵入+、-、*、/運(yùn)算符,計(jì)算器在內(nèi)部執(zhí)行數(shù)值轉(zhuǎn)換和存儲(chǔ),并等待再次鍵入數(shù)值,當(dāng)再鍵入數(shù)值后將顯示鍵入的數(shù)值,按等號(hào)就會(huì)在LCD上輸出運(yùn)算結(jié)果。(4)錯(cuò)誤提示:當(dāng)計(jì)算器執(zhí)行過(guò)程中有錯(cuò)誤時(shí),會(huì)在LCD上顯示相應(yīng)的提示,如:當(dāng)輸入的數(shù)值或計(jì)算得到的結(jié)果大于計(jì)算器的表示范圍時(shí),計(jì)算器會(huì)在LCD上提示overflow;當(dāng)除數(shù)為0時(shí),計(jì)算器會(huì)在LCD上提示error。設(shè)計(jì)要求:分別對(duì)鍵盤(pán)輸入檢測(cè)模塊;LCD顯示模塊;算術(shù)運(yùn)算模塊;錯(cuò)誤處理及提示模塊進(jìn)行設(shè)計(jì),并用Visio畫(huà)系統(tǒng)方框圖,keil與protues仿真分析其設(shè)計(jì)結(jié)果。三、設(shè)計(jì)時(shí)間與設(shè)計(jì)時(shí)間安排:1、設(shè)計(jì)

3、時(shí)間:6月27日7月8日2、設(shè)計(jì)時(shí)間安排:熟悉課題、收集資料: 3天(6月27日 6月29日) 具體設(shè)計(jì)(含上機(jī)實(shí)驗(yàn)): 6天(6月30日 7月5日)編寫(xiě)課程設(shè)計(jì)說(shuō)明書(shū): 2天(7月6日 7月7日)答辯: 1天(7月8日)四、設(shè)計(jì)說(shuō)明書(shū)的內(nèi)容:1、前言:(自己寫(xiě),組員之間不能相同,寫(xiě)完后將紅字刪除,排版時(shí)注意對(duì)齊)本設(shè)計(jì)是基于51系列單片機(jī)來(lái)進(jìn)行的數(shù)字計(jì)算器系統(tǒng)設(shè)計(jì),可以完成計(jì)算器的鍵盤(pán)輸入,進(jìn)行加、減、乘、除基本四則運(yùn)算,并在LCD上顯示相應(yīng)的結(jié)果;設(shè)計(jì)電路采用AT89C51單片機(jī)為主要控制電路,利用MM74C922作為計(jì)算器4*4鍵盤(pán)的掃描IC讀取鍵盤(pán)上的輸入;顯示采用字符LCD靜態(tài)顯示;

4、軟件方面使用C語(yǔ)言編程,并用PROTUES仿真。2、設(shè)計(jì)題目與設(shè)計(jì)任務(wù):現(xiàn)實(shí)生活中人們熟知的計(jì)算器,其功能主要如下:(1)鍵盤(pán)輸入;(2)數(shù)值顯示;(3)加、減、乘、除四則運(yùn)算;(4)對(duì)錯(cuò)誤的控制及提示。針對(duì)上述功能,計(jì)算器軟件程序要完成以下模塊的設(shè)計(jì):(1)鍵盤(pán)輸入檢測(cè)模塊;(2)LCD顯示模塊;(3)算術(shù)運(yùn)算模塊;(4)錯(cuò)誤處理及提示模塊。3、主體設(shè)計(jì)部分:(1)、系統(tǒng)模塊圖:(2)、算術(shù)運(yùn)算程序流程圖:(3)、系統(tǒng)總流程圖:(4)、硬件設(shè)計(jì):(一)、總體硬件設(shè)計(jì):本設(shè)計(jì)選用AT89C51單片機(jī)為主控單元; 顯示部分:采用LCD靜態(tài)顯示;按鍵部分:采用4*4鍵盤(pán);用MM74C922為4*4

5、鍵盤(pán)掃描IC,讀取輸入的鍵值。總體設(shè)計(jì)效果如下圖:(二)、單片機(jī)接口電路說(shuō)明:1、手動(dòng)上電復(fù)位電路:當(dāng)VCC上電時(shí),C充電,在10K電阻上出現(xiàn)電壓,使得單片機(jī)復(fù)位;幾個(gè)毫秒后,C充滿,10K電阻上電流降為0,電壓也為0,使得單片機(jī)進(jìn)入工作狀態(tài)。工作期間,按下S,C放電。S松手,C又充電,在10K電阻上出現(xiàn)電壓,使得單片機(jī)復(fù)位。幾個(gè)毫秒后,單片機(jī)進(jìn)入工作狀態(tài)。 2、內(nèi)部時(shí)鐘模式電路:當(dāng)單片機(jī)工作于內(nèi)部時(shí)鐘模式的時(shí)候,只需在XTAL1和XTAL2引腳連接一個(gè)晶體振蕩器或者陶瓷振蕩器,并接兩個(gè)電容后接地即可,在使用時(shí)對(duì)于電容的選擇有一定的要求:當(dāng)外接晶體振蕩器的時(shí)候,電容值一般選擇C1=C2=30+

6、10pF或30-10pF;當(dāng)外接陶瓷振蕩器的時(shí)候,電容值一般選擇C1=C2=40+10pF或40-10pF;3、AT89C51單片機(jī)引腳介紹:VCC: 供電電壓。 GND:接地。 P0口:P0口為一個(gè)8位漏級(jí)開(kāi)路雙向I/O口,每腳可吸收8TTL門(mén)電流。當(dāng)P0口的管腳第一次寫(xiě)1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。 P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門(mén)電流。P1口管腳寫(xiě)入1后,被內(nèi)部上拉為高

7、,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。 P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門(mén)電流,當(dāng)P2口被寫(xiě)“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫(xiě)時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高

8、八位地址信號(hào)和控制信號(hào)。 P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門(mén)電流。當(dāng)P3口寫(xiě)入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。 P3口也可作為AT89C51的一些特殊功能口:P3.0 RXD(串行輸入口) P3.1 TXD(串行輸出口) P3.2 /INT0(外部中斷0) P3.3 /INT1(外部中斷1) P3.4 T0(記時(shí)器0外部輸入) P3.5 T1(記時(shí)器1外部輸入) P3.6 /WR(外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通) P3.7 /RD(外部數(shù)據(jù)存儲(chǔ)器讀選通) P3口同時(shí)為閃爍

9、編程和編程校驗(yàn)接收一些控制信號(hào)。 RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。 ALE/PROG:當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過(guò)一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí), ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止

10、,置位無(wú)效。 /PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。 /EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。 XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。 XTAL2:來(lái)自反向振蕩器的輸出。4、單片機(jī)與復(fù)位、時(shí)鐘電路連接電路圖:(三)、鍵盤(pán)接口電

11、路:計(jì)算器輸入數(shù)字和其他功能按鍵要用到很多按鍵,如果采用獨(dú)立按鍵的方式,在這種情況下,編程會(huì)很簡(jiǎn)單,但是會(huì)占用大量的I/O 口資源,因此在很多情況下都不采用這種方式,而是采用矩陣鍵盤(pán)的方案。矩陣鍵盤(pán)采用四條I/O 線作為行線,四條I/O 線作為列線組成鍵盤(pán),在行線和列線的每個(gè)交叉點(diǎn)上設(shè)置一個(gè)按鍵。這樣鍵盤(pán)上按鍵的個(gè)數(shù)就為4×4個(gè)。這種行列式鍵盤(pán)結(jié)構(gòu)能有效地提高單片機(jī)系統(tǒng)中I/O 口的利用率。矩陣鍵盤(pán)的工作原理:計(jì)算器的鍵盤(pán)布局如圖1所示:一般有16個(gè)鍵組成,在單片機(jī)中正好可以用一個(gè)P口實(shí)現(xiàn)16個(gè)按鍵功能,這種形式在單片機(jī)系統(tǒng)中也最常用。圖 1 矩陣鍵盤(pán)布局圖矩陣鍵盤(pán)內(nèi)部電路圖如圖2所

12、示:為了進(jìn)一步節(jié)省單片機(jī)I/O口資源,我們?cè)谠O(shè)計(jì)中使用了MM74C922芯片。MM74C922是一款4*4鍵盤(pán)掃描IC,它可檢測(cè)到與之相連的4*4鍵盤(pán)的按鍵輸入,并通過(guò)數(shù)據(jù)輸出口將按鍵相應(yīng)的編碼輸出。其引腳圖如圖3所示:圖3 MM94C22硬件圖MM74C922引腳說(shuō)明:(1) Y1Y4(腳1腳4):4*4鍵盤(pán)第一列至第四。(2) X1X4(腳11、10、8、7):4*4鍵盤(pán)第一行至第四行。(3) DOA DOD(Dataout AD,腳1417):按鍵之BCD碼輸出,其中DOA為L(zhǎng)SB,DOD為MSB。(4) VCC(腳18):電源腳,+3V+15V。ab126計(jì)算公式大全(5) GND(腳

13、9):接地管腳。新藝圖庫(kù)(6) OSC(Oscillator,腳5):鍵盤(pán)掃描電路之頻率所需外加電容的連引腳。(7) KBM(Keyboard Mask,腳6):內(nèi)部消除開(kāi)關(guān)彈跳電路所外加電容的引腳。(8) OE(Output Enable,腳13):芯片使能腳,接低電位可使芯片使能。(9) DA(Data Available,腳12):數(shù)據(jù)有效輸出腳。任一按鍵按下時(shí),此腳位會(huì)輸出高電位,按鍵釋放后此腳又會(huì)恢復(fù)為低電位。MM74C922對(duì)各按鍵的響應(yīng)如下表所示:如下圖4所示,在本設(shè)計(jì)中,計(jì)算器輸入鍵盤(pán)的4條行線、列線分別連接到MM74C922的X1-X4、Y1-Y4引腳,MM74C922的數(shù)據(jù)

14、輸出口與單片機(jī)的P2口相連,MM74C922的DA引腳經(jīng)過(guò)一個(gè)非門(mén)連接到單片機(jī)的/INT0腳,當(dāng)MM74C922檢測(cè)到鍵盤(pán)輸入時(shí),DA產(chǎn)生高電平,與之相連的/INT0檢測(cè)到低電平,給單片機(jī)一個(gè)中斷,單片機(jī)從P2口的低四位讀入鍵盤(pán)上按下的鍵的值。圖4 鍵盤(pán)接口電路圖(四)、LCD顯示模塊:本設(shè)計(jì)采用LCD液晶顯示器來(lái)顯示輸出數(shù)據(jù)。通過(guò)D0-D7引腳向LCD寫(xiě)指令字或?qū)憯?shù)據(jù)以使LCD實(shí)現(xiàn)不同的功能或顯示相應(yīng)數(shù)據(jù)。圖5 LCD 模塊(五)運(yùn)算模塊(單片機(jī)控制):MCS-51 單片機(jī)是在一塊芯片中集成了CPU、RAM、ROM、定時(shí)器/計(jì)數(shù)器和多功能I/O等一臺(tái)計(jì)算機(jī)所需要的基本功能部件。如果按功能劃分

15、,它由如下功能部件組成,即微處理器(CPU)、數(shù)據(jù)存儲(chǔ)器(RAM)、程序存儲(chǔ)器(ROM/EPROM)、并行I/O 口、串行口、定時(shí)器/計(jì)數(shù)器、中斷系統(tǒng)及特殊功能寄存器(SFR)。單片機(jī)是靠程序運(yùn)行的,并且可以修改。通過(guò)不同的程序?qū)崿F(xiàn)不同的功能,尤其是特殊的獨(dú)特的一些功能,通過(guò)使用單片機(jī)編寫(xiě)的程序可以實(shí)現(xiàn)高智能,高效率,以及高可靠性!因此我們采用單片機(jī)作為計(jì)算器的主要功能部件,可以很快地實(shí)現(xiàn)運(yùn)算功能。3.5、軟件編程:1、主函數(shù)設(shè)計(jì):/*函數(shù)聲明*/#include<reg51.h>#include<math.h>#define uchar unsigned char#d

16、efine uint unsigned intchar translate(int keycode);void arithmetic();void init_LCM();void write_data(char ddata);void write_com(char command);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;cha

17、r 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;display(0);init_LCM();write_data(0x30);while(1)2、分塊程序設(shè)計(jì):(1)、鍵盤(pán)輸入檢測(cè)程序設(shè)計(jì):有鍵按下時(shí),單片機(jī)響應(yīng)外部中斷0,轉(zhuǎn)入外部中斷0中斷處理函數(shù),在中斷處理函數(shù)中完成對(duì)按鍵的判斷,以進(jìn)行下一步的程序處理。/*鍵值轉(zhuǎn)化為鍵盤(pán)上按鍵值函數(shù)*/char translate(i

18、nt keycode)switch(keycode)case 0:return '7'break;case 1:return '4'break;case 2:return '1'break;case 3:return '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'b

19、reak;case 9:return '6'break;case 10:return '3'break;case 11:return '='break;case 12:return '/'break;case 13:return '*'break;case 14:return '-'break;case 15:return '+'break; /*外部中斷0處理函數(shù)*/void INT_0(void) interrupt 0 using 0key=translate(P2&0

20、x0f);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) /當(dāng)前數(shù)值是否超出限定范圍display(num);elsedataoverflow();elseswitch(key)case 'c':x=0;y=0;num=0;iny=0;operators=0;dis

21、play(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 '/':

22、if (operators)arithmetic();operators=4;num=0;break;(2)、算術(shù)運(yùn)算程序設(shè)計(jì):/*算術(shù)運(yùn)算函數(shù)*/void arithmetic()if (iny)switch(operators)case 1:x=x+y;num=x;if(num<134217728&&num>-134217728)display(num);elsedataoverflow();break;case 2:x=x-y;num=x;if(num<134217728&&num>-134217728)display(num);e

23、lsedataoverflow();break;case 3:x=x*y;num=x;if(num<134217728&&num>-134217728)display(num);elsedataoverflow();break;case 4:if (y=0)dealerror();elsex=x/y;num=x; if(num<134217728&&num>-134217728)display(num);elsedataoverflow();break;y=0;(3)、LCD顯示程序設(shè)計(jì):利用LCD靜態(tài)顯示,通過(guò)程序向LCD寫(xiě)指令字或數(shù)據(jù)

24、使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(0x01);write_com(0x06);write_com(0x0e);/*LCD寫(xiě)數(shù)據(jù)函數(shù)*/void write_data(char ddata)RS=1;/*寫(xiě)指令*/R_W=0;EN=1;/*使能信號(hào)開(kāi)*/P1=ddata;/*將數(shù)據(jù)送入p1口*/EN=0;/*使能信號(hào)關(guān)*/check_BF();/*LCD寫(xiě)指令函數(shù)*/void write_com(char command)RS=0;/*寫(xiě)指令*/R_W=0;EN=1;/*使能信號(hào)開(kāi)*/P1=command;/*將數(shù)據(jù)送入p1口*/EN=0;/*使能信號(hào)關(guān)*/check_BF();/*LCD檢查忙碌函數(shù)*/void check_BF()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)閉使

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論