基于AT89C51單片機(jī)簡易計(jì)算器的設(shè)計(jì)說明_第1頁
基于AT89C51單片機(jī)簡易計(jì)算器的設(shè)計(jì)說明_第2頁
基于AT89C51單片機(jī)簡易計(jì)算器的設(shè)計(jì)說明_第3頁
基于AT89C51單片機(jī)簡易計(jì)算器的設(shè)計(jì)說明_第4頁
基于AT89C51單片機(jī)簡易計(jì)算器的設(shè)計(jì)說明_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、微機(jī)原理與單片機(jī)課程設(shè)計(jì)課程設(shè)計(jì)報(bào)告基于51單片機(jī)的簡易計(jì)算器設(shè)計(jì)學(xué)生卓國煥()專業(yè)電子信息工程所在班級1141學(xué)號 6指導(dǎo)老師歐觸靈日期2016.10.312016.11.4一、設(shè)計(jì)目的 單片機(jī)的出現(xiàn)是計(jì)算機(jī)制造技術(shù)高速發(fā)展的產(chǎn)物,它是嵌入式控制系統(tǒng)的核心,如今,它已廣泛的應(yīng)用到我們生活的各個(gè)領(lǐng)域,電子、科技、通信、汽車、工業(yè)等。本設(shè)計(jì)是基于51系列單片機(jī)來進(jìn)行的簡單數(shù)字計(jì)算器設(shè)計(jì),可以完成計(jì)算器的鍵盤輸入,進(jìn)行加、減、乘、除六位整數(shù)數(shù)圍的基本四則運(yùn)算,并在LED上顯示相應(yīng)的結(jié)果。軟件方面使用C語言編程,并用PROTUES仿真。二、總體設(shè)計(jì)與功能介紹根據(jù)功能和指標(biāo)要求,本系統(tǒng)選用MCS-51

2、系列單片機(jī)為主控機(jī),實(shí)現(xiàn)對計(jì)算器的設(shè)計(jì)。具體設(shè)計(jì)與功能如下:(1)由于要設(shè)計(jì)的是簡單的計(jì)算器,可以進(jìn)行四則運(yùn)算,為了得到較好的顯示效果,采用LED 顯示數(shù)據(jù)和結(jié)果。(2)另外鍵盤包括數(shù)字鍵(09)、符號鍵(+、-、×、÷)、清除鍵和等號鍵,故只需要16 個(gè)按鍵即可,設(shè)計(jì)中采用集成的計(jì)算鍵盤。(3)執(zhí)行過程:開機(jī)顯示零,等待鍵入數(shù)值,當(dāng)鍵入數(shù)字,通過LED顯示出來,當(dāng)鍵入+、-、*、/運(yùn)算符,計(jì)算器在部執(zhí)行數(shù)值轉(zhuǎn)換和存儲,并等待再次鍵入數(shù)值,當(dāng)再鍵入數(shù)值后將顯示鍵入的數(shù)值,按等號就會在LED上輸出運(yùn)算結(jié)果。(4)錯(cuò)誤提示:當(dāng)計(jì)算器執(zhí)行過程中有錯(cuò)誤時(shí),會在LED上顯示相應(yīng)的提示

3、,如:當(dāng)輸入的數(shù)值或計(jì)算得到的結(jié)果大于計(jì)算器的表示圍時(shí),計(jì)算器會在LED上顯示“CUO”,提示溢出。三、系統(tǒng)模塊組成框圖:輸入模塊51單片機(jī)運(yùn)算模塊LED顯示模塊二、硬件設(shè)計(jì)(一)、總體硬件設(shè)計(jì)本設(shè)計(jì)選用AT89C51單片機(jī)為主控單元。顯示部分:采用LED動(dòng)態(tài)顯示。按鍵部分:采用4*4集成計(jì)算鍵盤;總電路圖:(1) 4×4集成計(jì)算鍵盤 集成計(jì)算鍵盤本質(zhì)上是4×4矩陣鍵盤,矩陣鍵盤采用四條I/O 線作為行線,四條I/O 線作為列線組成鍵盤,在行線和列線的每個(gè)交叉點(diǎn)上設(shè)置一個(gè)按鍵。這樣鍵盤上按鍵的個(gè)數(shù)就為4×4個(gè)。這種行列式鍵盤結(jié)構(gòu)能有效地提高單片機(jī)系統(tǒng)中I/O 口的

4、利用率。矩陣鍵盤的工作原理:計(jì)算器的鍵盤布局如圖2所示:一般有16個(gè)鍵組成,在單片機(jī)中正好可以用一個(gè)P口實(shí)現(xiàn)16個(gè)按鍵功能,這種形式在單片機(jī)系統(tǒng)中也最常用。矩陣鍵盤部電路圖如圖所示:(三)、LED顯示模塊如圖本設(shè)計(jì)采用LED共陰數(shù)碼管來顯示輸出數(shù)據(jù)。共陰數(shù)碼管的每一位都是公共的陰極,只有輸入低電平的時(shí)候才有可能被點(diǎn)亮,所以位選的時(shí)候被選中的位必須是低電平。本設(shè)計(jì)采用兩個(gè)74HC573鎖存器來驅(qū)動(dòng)數(shù)碼管,引腳如上圖所示。74HC573-1是控制段選的,74HC573-2是控制位選的,P2.6和P2.7端口是鎖存使能位,置高電平時(shí)鎖存器透明(即輸入和輸出一樣),置低電平時(shí)鎖存。74HC573的八個(gè)

5、鎖存器都是透明的D 型鎖存器,當(dāng)使能(G)為高時(shí),Q 輸出將隨數(shù)據(jù)(D)輸入而變。當(dāng)使能為低時(shí),輸出將鎖存在已建立的數(shù)據(jù)電平上。輸出控制不影響鎖存器的部工作,即老數(shù)據(jù)可以保持,甚至當(dāng)輸出被關(guān)閉時(shí),新的數(shù)據(jù)也可以置入。這種電路可以驅(qū)動(dòng)大電容或低阻抗負(fù)載,可以直接與系統(tǒng)總線接口并驅(qū)動(dòng)總線,而不需要外接口。特別適用于緩沖寄存器,I/O 通道,雙向總線驅(qū)動(dòng)器和工作寄存器。HC573引腳功能: 引腳號 符號 名稱與功能1 OE 3態(tài)輸出使能輸入(低電平)2-9 D0 - D7 數(shù)據(jù)輸入12-19Q0 - Q7 3態(tài)鎖存輸出11 LE 鎖存使能輸入10 GND 接地(0V)20 VCC 電源電壓(四)運(yùn)算

6、模塊(51單片機(jī)控制)51 單片機(jī)是在一塊芯片中集成了CPU、RAM、ROM、定時(shí)器/計(jì)數(shù)器和多功能I/O等一臺計(jì)算機(jī)所需要的基本功能部件。如果按功能劃分,它由如下功能部件組成,即微處理器(CPU)、數(shù)據(jù)存儲器(RAM)、程序存儲器(ROM/EPROM)、并行I/O 口、串行口、定時(shí)器/計(jì)數(shù)器、中斷系統(tǒng)與特殊功能寄存器(SFR)。單片機(jī)是靠程序運(yùn)行的,并且可以修改。通過不同的程序?qū)崿F(xiàn)不同的功能,尤其是特殊的獨(dú)特的一些功能,通過使用單片機(jī)編寫的程序可以實(shí)現(xiàn)高智能,高效率,以與高可靠性!因此我們采用單片機(jī)作為計(jì)算器的主要功能部件,可以很快地實(shí)現(xiàn)運(yùn)算功能。單片機(jī)最小系統(tǒng)復(fù)位時(shí)單片機(jī)的初始化操作,只要

7、給RST引腳加上兩個(gè)機(jī)器周期以上的高電平信號,就可以使STC89C51單片機(jī)復(fù)位。本次采用的是12M晶振,按鈕復(fù)位電路。三、軟件設(shè)計(jì)現(xiàn)實(shí)生活中人們熟知的計(jì)算器,其功能主要如下:1、 鍵盤輸入;2、 數(shù)值顯示;3、 加、減、乘、除四則運(yùn)算;針對上述功能,計(jì)算器軟件程序要完成以下程序的設(shè)計(jì):1、 鍵盤輸入檢測程序2、 LED顯示程序3、 算術(shù)運(yùn)算程序1、程序流程圖系統(tǒng)總流程圖開始初始化參數(shù)初始化LED顯示有鍵輸入?讀取鍵碼LED顯示數(shù)字鍵清零鍵功能鍵狀態(tài)清零輸入數(shù)值數(shù)值送顯示緩沖YN等待數(shù)值輸入結(jié)果送顯示緩沖根據(jù)上次功能鍵和輸入的數(shù)據(jù)計(jì)算結(jié)果本次功能鍵?等待數(shù)值輸入結(jié)果送顯示緩沖等待數(shù)值輸入結(jié)果送

8、顯示緩沖算術(shù)運(yùn)算程序流程圖開始運(yùn)算符是?加乘減除運(yùn)算結(jié)果溢出?錯(cuò)誤信息送顯示緩沖數(shù)值送顯示緩沖YYN2、程序清單#include<reg52.h>#include<math.h>#define uchar unsigned char#define uint unsigned int#define ulong unsigned longsbit wela=P27; /定義端口sbit dula=P26;long in1,in2,out,x;intt,i,flag;uchar code num=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

9、0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; /LED顯示字模,共陰void delay(uint xms) /延時(shí)函數(shù)uint j;for(i=xms;i>0;i-)for(j=114;j>0;j-);void display() /顯示函數(shù)聲明uchar w1,w2,w3,w4,w5,w6,f=0;long y;if(x>=0) /顯示六位計(jì)時(shí)數(shù)if(x>=1e6)P0=0xff;wela=1;P0=0xf7;wela=0;dula=1;P0=num12;dula=0;delay(2);P0=0xff;wela=1;P0=0xef

10、;wela=0;dula=1;P0=0x3e;dula=0;delay(2);P0=0xff;wela=1;P0=0xdf;wela=0;dula=1;P0=num0;dula=0;delay(2);return;w1=x%10;w2=x/10%10;w3=x/100%10;w4=x/1000%10;w5=x/10000%10;w6=x/100000%10;if(f=1|w6)f=1;P0=0xff;wela=1;P0=0xfe;wela=0;dula=1;P0=numw6;dula=0;delay(2);if(f=1|w5)f=1;P0=0xff;wela=1;P0=0xfd;wela=0;

11、dula=1;P0=numw5;dula=0;delay(2);if(f=1|w4)f=1;P0=0xff;wela=1;P0=0xfb;wela=0;dula=1;P0=numw4;dula=0;delay(2);if(f=1|w3)f=1;P0=0xff;wela=1;P0=0xf7;wela=0;dula=1;P0=numw3;dula=0;delay(2);if(f=1|w2)f=1;P0=0xff;wela=1;P0=0xef;wela=0;dula=1;P0=numw2;dula=0;delay(2);P0=0xff;wela=1;P0=0xdf;wela=0;dula=1;P0=

12、numw1;dula=0;delay(2);elsey=labs(x);if(y>=1e5)P0=0xff;wela=1;P0=0xf7;wela=0;dula=1;P0=num12;dula=0;delay(2);P0=0xff;wela=1;P0=0xef;wela=0;dula=1;P0=0x3e;dula=0;delay(2);P0=0xff;wela=1;P0=0xdf;wela=0;dula=1;P0=num0;dula=0;delay(2);return;w1=y%10;w2=y/10%10;w3=y/100%10;w4=y/1000%10;w5=y/10000%10;if

13、(f=1|w5)if(f=0)P0=0xff;wela=1;P0=0xfe;wela=0;dula=1;P0=0x40;dula=0;delay(2);f=1;P0=0xff;wela=1;P0=0xfd;wela=0;dula=1;P0=numw5;dula=0;delay(2);if(f=1|w4)if(f=0)P0=0xff;wela=1;P0=0xfd;wela=0;dula=1;P0=0x40;dula=0;delay(2);f=1;P0=0xff;wela=1;P0=0xfb;wela=0;dula=1;P0=numw4;dula=0;delay(2);if(f=1|w3)if(f

14、=0)P0=0xff;wela=1;P0=0xfb;wela=0;dula=1;P0=0x40;dula=0;delay(2);f=1;P0=0xff;wela=1;P0=0xf7;wela=0;dula=1;P0=numw3;dula=0;delay(2);if(f=1|w2)if(f=0)P0=0xff;wela=1;P0=0xf7;wela=0;dula=1;P0=0x40;dula=0;delay(2);f=1;P0=0xff;wela=1;P0=0xef;wela=0;dula=1;P0=numw2;dula=0;delay(2);if(f=0)P0=0xff;wela=1;P0=0

15、xef;wela=0;dula=1;P0=0x40;dula=0;delay(2);P0=0xff;wela=1;P0=0xdf;wela=0;dula=1;P0=numw1;dula=0;delay(2);void keyscan() /鍵盤掃描函數(shù)uchar temp;P1=0xfe;temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay(8);temp=P1;temp=temp&0xf0;if(temp!=0xf0)temp=P1;switch(temp)case 0xee:if(cnt<6)cnt+;if(flag=0)in1=in1

16、*10+7;x=in1;elsein2=in2*10+7;x=in2;break;case 0xde:if(cnt<6)cnt+;if(flag=0)in1=in1*10+8;x=in1;elsein2=in2*10+8;x=in2;break;case 0xbe:if(cnt<6)cnt+;if(flag=0)in1=in1*10+9;x=in1;elsein2=in2*10+9;x=in2;break;case 0x7e:if(cnt!=0&&flag=0)cnt=0;flag=4;break;while(temp!=0xf0)temp=P1;temp=temp

17、&0xf0; P1=0xfd;temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay(8);temp=P1;temp=temp&0xf0;if(temp!=0xf0)temp=P1;switch(temp)case 0xed:if(cnt<6)cnt+;if(flag=0)in1=in1*10+4;x=in1;elsein2=in2*10+4;x=in2;break;case 0xdd:if(cnt<6)cnt+;if(flag=0)in1=in1*10+5;x=in1;elsein2=in2*10+5;x=in2;break;

18、case 0xbd:if(cnt<6)cnt+;if(flag=0)in1=in1*10+6;x=in1;elsein2=in2*10+6;x=in2;break;case 0x7d:if(cnt!=0&&flag=0)cnt=0;flag=3;break;while(temp!=0xf0)temp=P1;temp=temp&0xf0; P1=0xfb;temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay(8);/消除抖動(dòng)temp=P1;temp=temp&0xf0;if(temp!=0xf0)temp=P1;swi

19、tch(temp)case 0xeb:if(cnt<6)cnt+;if(flag=0)in1=in1*10+1;x=in1;elsein2=in2*10+1;x=in2;break;case 0xdb:if(cnt<6)cnt+;if(flag=0)in1=in1*10+2;x=in1;elsein2=in2*10+2;x=in2;break;case 0xbb:if(cnt<6)cnt+;if(flag=0)in1=in1*10+3;x=in1;elsein2=in2*10+3;x=in2;break;case 0x7b:if(cnt!=0&&flag=0)

20、cnt=0;flag=2;break;while(temp!=0xf0) temp=P1;temp=temp&0xf0; P1=0xf7;temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay(8);temp=P1;temp=temp&0xf0;if(temp!=0xf0) /證明有鍵按下,if語句是為了讓鍵盤松開temp=P1;switch(temp)case 0xe7:cnt=0;in1=0;in2=0;out=0;flag=0;x=0;break;case 0xd7:if(cnt<6)cnt+;if(flag=0)in1=in1

21、*10+0;x=in1;elsein2=in2*10+0;x=in2;break;case 0xb7: /如果得到符號位switch(flag)case 1:out=in1+in2;/加break;case 2:out=in1-in2;/減break;case 3:out=in1*in2;/乘break;case 4:if(in2)out=in1/in2;/除break;x=out;in1=0;in2=0;cnt=0;flag=0;break;case 0x77:if(cnt!=0&&flag=0)cnt=0;flag=1;break;while(temp!=0xf0) /等待按鍵松開temp=P1;temp=temp&0xf0; void

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論