單片機(jī)計(jì)算器(重理工大二課程設(shè)計(jì))計(jì)算范圍_第1頁(yè)
單片機(jī)計(jì)算器(重理工大二課程設(shè)計(jì))計(jì)算范圍_第2頁(yè)
單片機(jī)計(jì)算器(重理工大二課程設(shè)計(jì))計(jì)算范圍_第3頁(yè)
單片機(jī)計(jì)算器(重理工大二課程設(shè)計(jì))計(jì)算范圍_第4頁(yè)
單片機(jī)計(jì)算器(重理工大二課程設(shè)計(jì))計(jì)算范圍_第5頁(yè)
已閱讀5頁(yè),還剩9頁(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)介

本文格式為Word版,下載可任意編輯——單片機(jī)計(jì)算器(重理工大二課程設(shè)計(jì))計(jì)算范圍

課程:電子綜合設(shè)計(jì)試驗(yàn)

項(xiàng)目:計(jì)算器

學(xué)期:2023.2~2023.7

學(xué)院:電子信息與自動(dòng)化學(xué)院專(zhuān)業(yè):自動(dòng)化班級(jí):713姓名:王瀚興學(xué)號(hào):10807010325指導(dǎo)教師:陳古波

電工電子技術(shù)試驗(yàn)中心

一、設(shè)計(jì)任務(wù)和目標(biāo)

1.1設(shè)計(jì)任務(wù)

利用單片機(jī)設(shè)計(jì)一個(gè)計(jì)算器,要求

(1)鍵盤(pán)包含加、減、乘、除及數(shù)字鍵。

(2)能夠顯示輸入數(shù)字并顯示公式,計(jì)算結(jié)果。(3)四種運(yùn)算都可以實(shí)現(xiàn)。

1.2性能指標(biāo)

(1)單片機(jī)程序設(shè)計(jì)使用KeilC51實(shí)現(xiàn)。編譯器使用longint,因此運(yùn)算范圍為±2147483648,并且浮點(diǎn)數(shù)精度總是15位。假使數(shù)據(jù)溢出,自動(dòng)提醒溢出錯(cuò)誤信息。

(2)可運(yùn)算加、減、乘、除在內(nèi)的四種運(yùn)算。包括顯示正數(shù)與負(fù)數(shù)。除零錯(cuò)誤將自動(dòng)提醒。顯示公式。

(3)ON鍵用于清空并重新輸入。

二、設(shè)計(jì)方案

依照單片機(jī)設(shè)計(jì)功能的要求,初步確定硬件系統(tǒng)由主控模塊,顯示模塊,鍵掃描電路模塊等組成。電路構(gòu)成框圖如圖2-1所示。主控芯片使用51系列AT89C52單片機(jī),該單片機(jī)采用高性能靜態(tài)89C51設(shè)計(jì),由先進(jìn)工藝制造,并帶有非易失性Flash程序存儲(chǔ)器。它是一種高性能,低功耗8位CMOS處理芯片,市場(chǎng)應(yīng)用好多。

圖2-1計(jì)算器電路構(gòu)成原理圖

軟件系統(tǒng)由鍵盤(pán)掃描模塊、數(shù)據(jù)計(jì)算模塊、數(shù)據(jù)糾錯(cuò)模塊、數(shù)據(jù)顯示模塊等構(gòu)成。

三、系統(tǒng)硬件設(shè)計(jì)

3.1單片機(jī)最小系統(tǒng)

單片機(jī)最小系統(tǒng)就是支持主芯片正常工作的最小部分,包括主控芯片和晶振電路部分。

主控芯片選取STC89C52RC芯片,因其具有良好的性能和穩(wěn)定性,價(jià)格低廉使用便利。晶振選用1MHZ,晶振旁電容選用1pf。下面是單片機(jī)最小系統(tǒng)的電路圖:

圖3-1單片機(jī)最小系統(tǒng)電路圖

3.2鍵盤(pán)接口電路

計(jì)算器所需按鍵有數(shù)字鍵:“0〞、“1〞、“2〞、“3〞、“4〞、“5〞、“6〞、“7〞、“8〞、“9〞。功能鍵:“+〞、“-〞、“×〞、“÷〞、“=〞、“ON(清零)〞。

共計(jì)16個(gè)按鍵,行列均連接有公共端,連接至單片機(jī)的P3.0—P3.7端口。這樣掃描P3口就可以完成對(duì)所有鍵盤(pán)的掃描,通過(guò)對(duì)16個(gè)按鍵的編碼,從而得到鍵盤(pán)端口地址。分別進(jìn)行行掃描和列掃描,確定按鍵,經(jīng)過(guò)單片機(jī)處理后輸入數(shù)據(jù)至LED顯示屏,完成了鍵盤(pán)的功能。

下面為鍵盤(pán)接口電路圖。

圖3-2鍵盤(pán)接口電路

3.3數(shù)碼顯示電路

數(shù)碼顯示電路采用的是LM016L顯示器?;緟?shù)及引腳功能

1602LCD分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的比不帶背光的厚,是否帶背光在應(yīng)用中并無(wú)區(qū)別,兩者尺寸區(qū)別如下圖10-54所示:

1602LCD尺寸圖

1602LCD主要技術(shù)參數(shù):顯示容量:16×2個(gè)字符芯片工作電壓:4.5—5.5V工作電流:2.0mA(5.0V)模塊最正確工作電壓:5.0V字符尺寸:2.95×4.35(W×H)引腳功能說(shuō)明

1602LCD采用標(biāo)準(zhǔn)的14腳(無(wú)背光)或16腳(帶背光)接口,各引腳接口說(shuō)明如表10-13所示:

編符引腳說(shuō)明編符引腳說(shuō)明號(hào)號(hào)號(hào)號(hào)

1V9D2電源地?cái)?shù)據(jù)

SS2V10D3電源正極數(shù)據(jù)

DD3V11D4液晶顯示偏壓數(shù)據(jù)

L4RS12D5數(shù)據(jù)/命令選擇數(shù)據(jù)5R/13D6讀/寫(xiě)選擇數(shù)據(jù)

W6E14D7使能信號(hào)數(shù)據(jù)7D015BL背光源正極數(shù)據(jù)

A

8D116BL背光源負(fù)極數(shù)據(jù)

K

表10-13:引腳接口說(shuō)明表第1腳:VSS為地電源。

第2腳:VDD接5V正電源。

第3腳:VL為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影〞,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度。

第4腳:RS為寄放器選擇,高電平日選擇數(shù)據(jù)寄放器、低電平日選擇指令寄放器。第5腳:R/W為讀寫(xiě)信號(hào)線,高電平日進(jìn)行讀操作,低電平日進(jìn)行寫(xiě)操作。當(dāng)RS和R/W共同為低電平日可以寫(xiě)入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平日可以讀忙信號(hào),當(dāng)RS為高電平R/W為低電平日可以寫(xiě)入數(shù)據(jù)。

第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平日,液晶模塊執(zhí)行命令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負(fù)極。2LCD的指令說(shuō)明及時(shí)序

1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表10-14所示:

RRDDDDDD序指令

D0

S/W7654321號(hào)

1000000001清顯示200000001*光標(biāo)返回

I/置輸入模

30000000S

D式

顯示開(kāi)/關(guān)

40000001CB

控制光標(biāo)或字

S

5000001/**符移位

/C

L

D置功能

600001N**

L

置字符發(fā)字符發(fā)生存貯器地址

70001

生存貯器地址

置數(shù)據(jù)存顯示數(shù)據(jù)存貯器地址

8001

貯器地址

B讀忙標(biāo)志計(jì)數(shù)器地址

901

F或地址

寫(xiě)數(shù)到要寫(xiě)的數(shù)據(jù)內(nèi)容

1

10CGRAM或

0

DDRAM)

從讀出的數(shù)據(jù)內(nèi)容

1

11CGRAM或

1

DDRAM讀數(shù)表10-14:控制命令表

1602液晶模塊的讀寫(xiě)操作、屏幕和光標(biāo)的操作都是通過(guò)指令編程來(lái)實(shí)現(xiàn)的。(說(shuō)明:1為高電平、0為低電平)

圖字符代碼與圖形對(duì)應(yīng)表下面為數(shù)碼顯示電路電路圖。

圖3-3數(shù)碼顯示電路

四、系統(tǒng)軟件設(shè)計(jì)

4.1鍵盤(pán)掃描程序設(shè)計(jì)

要進(jìn)行數(shù)據(jù)計(jì)算就需要先進(jìn)行數(shù)據(jù)的輸入,也就必需確定按鍵輸入的數(shù)值是什么,這就需要對(duì)按鍵進(jìn)行掃描,從而確定是哪個(gè)按鍵按下了。

按鍵掃描的程序代碼十分明了易懂,并且寫(xiě)好了解釋。下面是源代碼。

//按鍵處理命令//獲取按鍵位置//16為無(wú)按鍵按下ucharKeyPosRowScan()//返回行掃描結(jié)果

{

ucharTemp=0;//掃描狀態(tài)暫存。ucharRow;//行號(hào)P3=0x0f;

Temp=P3;//暫存P2狀態(tài)for(Row=0;Row9999||Data[3]

}}}

return7;

4-4程序顯示功能設(shè)計(jì)。

LM016L顯示器需要初始化,寫(xiě)端口等操作。voidWaitCheck()//等待空閑{

do{

P0=0xFF;

RS=0;//選擇指令寄放器

RW=1;//讀rsrw值為01時(shí),忙標(biāo)志和地址計(jì)數(shù)器讀出EN=0;//E=0,阻止讀寫(xiě)

Delay(1);//等待,液晶顯示器處理數(shù)據(jù)EN=1;//E=1,允許讀寫(xiě)

}while(BUSY==1);//判斷是否為空閑,1為忙,0為空閑}

voidWriteCom(ucharcom)//寫(xiě)指令{

P0=com;RS=0;RW=0;EN=0;

WaitCheck();EN=1;}

然后需要進(jìn)行初始化voidInit()//初始化{

EN=1;//使能信號(hào)為高電平WriteCom(0x38);//顯示模式設(shè)置

WriteCom(0x0e);//顯示開(kāi),光標(biāo)開(kāi),不閃爍WriteCom(0x06);//光標(biāo)右移文字移動(dòng)無(wú)效WriteCom(0x80);//設(shè)置訪問(wèn)地址}

初始化完成后我寫(xiě)了幾個(gè)基本的命令,用來(lái)擴(kuò)展對(duì)LCD屏幕更簡(jiǎn)單的顯示。//設(shè)置命令

voidSetLine1Pos(ucharpos)//設(shè)置光標(biāo)位置{

WriteCom(0x80|pos);}

voidSetLine2Pos(ucharpos)//設(shè)置光標(biāo)位置

{

WriteCom(0xC0|pos);}

voidSetCursorStyle(ucharstyle)//0光標(biāo)左移1光標(biāo)右移{

if(style)WriteCom(0x04);//光標(biāo)左移elseWriteCom(0x06);//光標(biāo)右移}

//運(yùn)算命令

uintAbs(intnumber){

if(number32767||number9999)bitnum=10000;elseif(number>999)bitnum=1000;elseif(number>99)bitnum=100;elseif(number>9)bitnum=10;elseif(number>=0)bitnum=1;//SetCursorStyle(1);

if(minusflag)ShowChar(0x2d);//顯示負(fù)號(hào)while(bitnum>0){

bitbuf=number/bitnum;ShowBitNum(bitbuf);

number-=(bitbuf*bitnum);bitnum/=10;}}

voidShowFormula()//顯示公式命令,用來(lái)顯示公式{

SetLine1Pos(0);

ShowNumber(Data[0]);switch(Data[1]){

case10:ShowChar('+');break;case11:ShowChar('-');break;case12:ShowChar('*');break;case13:ShowChar('/');break;}

ShowNumber(Data[2]);ShowChar('=');SetLine2Pos(0);

ShowStr(\ShowNumber(Data[3]);

}

if((Data[1]==13)}

4.4主程序設(shè)計(jì)

下面為主程序

主程序既把各個(gè)功能串聯(lián)一起,又能夠進(jìn)行循環(huán)執(zhí)行。

首先進(jìn)行LCD的初始化,再進(jìn)行歡迎詞,在進(jìn)行鍵盤(pán)掃描,根據(jù)ShowFlag變量的值進(jìn)行顯示錯(cuò)誤提醒或者顯示結(jié)果或者顯示數(shù)值等。

voidmain(){

Init();

while(Welcome(10));while(1){

if(KeyPosScan()==12){

DataInit();

if(ShowFlag<3)ShowFlag=InputChar(//勿影響顯示

if(ShowFlag<3)ShowFlag=InputChar(//結(jié)果和錯(cuò)誤

}

RegisterShowFlag();}}

還有部分代碼未貼出,整體程序清單見(jiàn)附錄。

五、調(diào)試及分析1調(diào)試分析

做好器件后先不要把芯片插在芯片板上,先驗(yàn)證電源是否好用,有無(wú)短路等狀況,接上低電源測(cè)試各個(gè)點(diǎn)無(wú)誤后方可插上芯片。

芯片插好后進(jìn)行測(cè)試各個(gè)硬件模塊是否能夠完成功能,包括按鍵是否好用,顯示是否正常等。

2性能分析

(1)單片機(jī)程序設(shè)計(jì)由于使用的是KeilC51。為擴(kuò)大運(yùn)算范圍,使用longint范圍。假如數(shù)據(jù)溢出,自動(dòng)提醒溢出錯(cuò)誤信息。

(2)可運(yùn)算加、減、乘、除在內(nèi)的四種運(yùn)算。包括顯示正數(shù)與負(fù)數(shù)。除零錯(cuò)誤將自動(dòng)提醒等信息。

(3)可以顯示運(yùn)算的公式。

六、心得體會(huì)

通過(guò)本次課程設(shè)計(jì)我真正的完成了自己設(shè)計(jì)計(jì)算器的目標(biāo),了解了從設(shè)計(jì)硬件,電路設(shè)計(jì),電路板設(shè)計(jì),軟件設(shè)計(jì),成品調(diào)試等各方面的過(guò)程,從而從整體學(xué)到了多方面的知識(shí),為以后工作打下了一定的基本基礎(chǔ)。

另外從本次試驗(yàn)中我也發(fā)現(xiàn)了自己有好多的不足,對(duì)知識(shí)了解的可能仍不夠扎實(shí),做事不夠穩(wěn)定等。相信同樣的問(wèn)題以后能夠很好的解決,并能夠把單片機(jī)做的更好。

七、

程序源代碼

#include#include

#defineuintunsignedint#defineucharunsignedchar

sbitEN=P2^2;//定義引腳sbitRS=P2^0;sbitRW=P2^1;sbitBUSY=P0^7;sbitP13=P1^3;//鍵盤(pán)數(shù)據(jù)

ucharLineScan[4]={0xE0,0xD0,0xB0,0x70};//列線掃描電壓,分為第1,2,3,4根列線ucharRowScan[4]={0x0E,0x0D,0x0B,0x07};//行線掃描電壓,分為第1,2,3,4根行線//計(jì)算類(lèi)定義

ucharShowFlag=9;//0顯示Data[0]1正常允許進(jìn)行下一步2顯示Data[2]3顯示Data[3]4顯示溢出錯(cuò)誤5顯示除零錯(cuò)誤6顯示錯(cuò)誤7初始化程序8操作錯(cuò)誤9提醒按初始化

鍵99無(wú)法預(yù)計(jì)錯(cuò)誤

ucharDivFloatFlag=0;//是否顯示除法所得的float數(shù)據(jù)//該變量設(shè)置取消ucharDivFloatData[15]={0};ucharFloatShowNum=0;

longintData[4]={0,10,0,0};//記錄運(yùn)算數(shù)據(jù)及結(jié)果//系統(tǒng)端口操作函數(shù)voidDelay(uinto){uinti,j;for(i=0;i2147483647||number=0;bitbuf--){ShowBitNum(idnumbuf[bitbuf]);}return0;}

voidShowFormula(){SetLine1Pos(0);ShowNumber(Data[0]);switch(Data[1]){case10:ShowChar('+');break;case11:ShowChar('-');break;case12:ShowChar('*');break;case13:ShowChar('/');break;

}ShowNumber(Data[2]);ShowChar('=');SetLine2Pos(0);ShowNumber(Data[3]);if(Data[1]==13){ShowChar('.');for(FloatShowNum=0;FloatShowNumucharKeyPosScan()//返回按鍵位置{returnKeyPosRowScan()*4+KeyPosLineScan();}

//返回指定位置按鍵的鍵值

ucharGetPosKeyID(ucharkeypos){switch(keypos)

溫馨提示

  • 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)論