版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、微機原理與單片機課程設計課程設計報告基于51單片機的簡易計算器設計學生卓國煥()專業(yè)電子信息工程所在班級1141學號 6指導老師歐觸靈日期2016.10.312016.11.4一、設計目的 單片機的出現(xiàn)是計算機制造技術高速發(fā)展的產物,它是嵌入式控制系統(tǒng)的核心,如今,它已廣泛的應用到我們生活的各個領域,電子、科技、通信、汽車、工業(yè)等。本設計是基于51系列單片機來進行的簡單數(shù)字計算器設計,可以完成計算器的鍵盤輸入,進行加、減、乘、除六位整數(shù)數(shù)圍的基本四則運算,并在LED上顯示相應的結果。軟件方面使用C語言編程,并用PROTUES仿真。二、總體設計與功能介紹根據(jù)功能和指標要求,本系統(tǒng)選用MCS-51
2、系列單片機為主控機,實現(xiàn)對計算器的設計。具體設計與功能如下:(1)由于要設計的是簡單的計算器,可以進行四則運算,為了得到較好的顯示效果,采用LED 顯示數(shù)據(jù)和結果。(2)另外鍵盤包括數(shù)字鍵(09)、符號鍵(+、-、×、÷)、清除鍵和等號鍵,故只需要16 個按鍵即可,設計中采用集成的計算鍵盤。(3)執(zhí)行過程:開機顯示零,等待鍵入數(shù)值,當鍵入數(shù)字,通過LED顯示出來,當鍵入+、-、*、/運算符,計算器在部執(zhí)行數(shù)值轉換和存儲,并等待再次鍵入數(shù)值,當再鍵入數(shù)值后將顯示鍵入的數(shù)值,按等號就會在LED上輸出運算結果。(4)錯誤提示:當計算器執(zhí)行過程中有錯誤時,會在LED上顯示相應的提示
3、,如:當輸入的數(shù)值或計算得到的結果大于計算器的表示圍時,計算器會在LED上顯示“CUO”,提示溢出。三、系統(tǒng)模塊組成框圖:輸入模塊51單片機運算模塊LED顯示模塊二、硬件設計(一)、總體硬件設計本設計選用AT89C51單片機為主控單元。顯示部分:采用LED動態(tài)顯示。按鍵部分:采用4*4集成計算鍵盤;總電路圖:(1) 4×4集成計算鍵盤 集成計算鍵盤本質上是4×4矩陣鍵盤,矩陣鍵盤采用四條I/O 線作為行線,四條I/O 線作為列線組成鍵盤,在行線和列線的每個交叉點上設置一個按鍵。這樣鍵盤上按鍵的個數(shù)就為4×4個。這種行列式鍵盤結構能有效地提高單片機系統(tǒng)中I/O 口的
4、利用率。矩陣鍵盤的工作原理:計算器的鍵盤布局如圖2所示:一般有16個鍵組成,在單片機中正好可以用一個P口實現(xiàn)16個按鍵功能,這種形式在單片機系統(tǒng)中也最常用。矩陣鍵盤部電路圖如圖所示:(三)、LED顯示模塊如圖本設計采用LED共陰數(shù)碼管來顯示輸出數(shù)據(jù)。共陰數(shù)碼管的每一位都是公共的陰極,只有輸入低電平的時候才有可能被點亮,所以位選的時候被選中的位必須是低電平。本設計采用兩個74HC573鎖存器來驅動數(shù)碼管,引腳如上圖所示。74HC573-1是控制段選的,74HC573-2是控制位選的,P2.6和P2.7端口是鎖存使能位,置高電平時鎖存器透明(即輸入和輸出一樣),置低電平時鎖存。74HC573的八個
5、鎖存器都是透明的D 型鎖存器,當使能(G)為高時,Q 輸出將隨數(shù)據(jù)(D)輸入而變。當使能為低時,輸出將鎖存在已建立的數(shù)據(jù)電平上。輸出控制不影響鎖存器的部工作,即老數(shù)據(jù)可以保持,甚至當輸出被關閉時,新的數(shù)據(jù)也可以置入。這種電路可以驅動大電容或低阻抗負載,可以直接與系統(tǒng)總線接口并驅動總線,而不需要外接口。特別適用于緩沖寄存器,I/O 通道,雙向總線驅動器和工作寄存器。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 電源電壓(四)運算
6、模塊(51單片機控制)51 單片機是在一塊芯片中集成了CPU、RAM、ROM、定時器/計數(shù)器和多功能I/O等一臺計算機所需要的基本功能部件。如果按功能劃分,它由如下功能部件組成,即微處理器(CPU)、數(shù)據(jù)存儲器(RAM)、程序存儲器(ROM/EPROM)、并行I/O 口、串行口、定時器/計數(shù)器、中斷系統(tǒng)與特殊功能寄存器(SFR)。單片機是靠程序運行的,并且可以修改。通過不同的程序實現(xiàn)不同的功能,尤其是特殊的獨特的一些功能,通過使用單片機編寫的程序可以實現(xiàn)高智能,高效率,以與高可靠性!因此我們采用單片機作為計算器的主要功能部件,可以很快地實現(xiàn)運算功能。單片機最小系統(tǒng)復位時單片機的初始化操作,只要
7、給RST引腳加上兩個機器周期以上的高電平信號,就可以使STC89C51單片機復位。本次采用的是12M晶振,按鈕復位電路。三、軟件設計現(xiàn)實生活中人們熟知的計算器,其功能主要如下:1、 鍵盤輸入;2、 數(shù)值顯示;3、 加、減、乘、除四則運算;針對上述功能,計算器軟件程序要完成以下程序的設計:1、 鍵盤輸入檢測程序2、 LED顯示程序3、 算術運算程序1、程序流程圖系統(tǒng)總流程圖開始初始化參數(shù)初始化LED顯示有鍵輸入?讀取鍵碼LED顯示數(shù)字鍵清零鍵功能鍵狀態(tài)清零輸入數(shù)值數(shù)值送顯示緩沖YN等待數(shù)值輸入結果送顯示緩沖根據(jù)上次功能鍵和輸入的數(shù)據(jù)計算結果本次功能鍵?等待數(shù)值輸入結果送顯示緩沖等待數(shù)值輸入結果送
8、顯示緩沖算術運算程序流程圖開始運算符是?加乘減除運算結果溢出?錯誤信息送顯示緩沖數(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ù)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) /顯示六位計時數(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);/消除抖動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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年TFT系列偏光片合作協(xié)議書
- 廣西壯族自治區(qū)桂林市第十八中2024年高三第二次適應性考試數(shù)學試題
- 2024年耐高溫合成云母層壓板項目發(fā)展計劃
- 鹽城師范學院《新能源熱利用與熱發(fā)電原理及系統(tǒng)》2023-2024學年期末試卷
- 2024公司授權委托書合同
- 浙教版五年級上冊數(shù)學第一單元 小數(shù)的意義與加減法 測試卷及完整答案(必刷)
- 2024年塑料擠吹中空成型機項目合作計劃書
- 2024年內螺紋球閥項目發(fā)展計劃
- 2024房產贈與合同范本寫
- 車輛檢修工必知必會練習試題及答案(一)
- 《萬維網(wǎng)安全新協(xié)議》課件 2024-2025學年人教版新教材初中信息技術七年級全一冊
- 全國職業(yè)院校技能大賽高職組(商務數(shù)據(jù)分析賽項)備賽試題及答案
- 部編版道德與法治二年級上冊第8課《裝扮我們的教室》精美課件
- 2024年新高考Ⅱ卷高考英語真題(答案版)
- 部編版歷史高一上學期期中試卷與參考答案(2024-2025學年)
- 數(shù)據(jù)備份與恢復應急預案
- 情感表達 課件 2024-2025學年人教版(2024)初中美術七年級上冊
- 印刷包裝崗位招聘筆試題與參考答案(某大型國企)
- 2024屆湖北省武漢市高三下學期4月調研(二模)英語 試題
- 變電站新建工程三通一平場地平整施工方案
- 結婚函調報告表
評論
0/150
提交評論