




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025簽訂房屋買(mǎi)賣(mài)合同前需要注意的問(wèn)題
- 2025北京市民用建筑工程給排水計(jì)量裝置專(zhuān)項(xiàng)合同BC
- 2025年上海土地流轉(zhuǎn)合同模板
- 特種設(shè)備使用協(xié)議
- 山羊合作養(yǎng)殖合同范本
- 鋼琴出租協(xié)議書(shū)范本
- 2025甲乙雙方銀行國(guó)內(nèi)保理業(yè)務(wù)合同(應(yīng)收賬款池融資版)
- 2025企業(yè)單位與員工簽訂勞動(dòng)合同書(shū)模板
- 2025簡(jiǎn)化版企業(yè)合同范本
- 2025稅務(wù)師《涉稅服務(wù)相關(guān)法律》知識(shí)點(diǎn):合同法律效力的認(rèn)定與合同的解除
- 國(guó)家一級(jí)博物館運(yùn)行報(bào)告2024
- 血液病早期發(fā)現(xiàn)-你不可忽視的健康防線
- 危廢品安全培訓(xùn)
- 2025年綿陽(yáng)燃?xì)饧瘓F(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 2024年4.15全民國(guó)家安全教育日知識(shí)題庫(kù)及答案
- 農(nóng)業(yè)執(zhí)法業(yè)務(wù)培訓(xùn)課件
- 【MOOC】健康傳播:基礎(chǔ)與應(yīng)用-暨南大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 《基于地統(tǒng)計(jì)學(xué)方法的土壤重金屬污染物空間分布及擴(kuò)散特征研究》
- 申能集團(tuán)在線測(cè)評(píng)題目
- 企業(yè)管理咨詢(xún)服務(wù)合同與企業(yè)管理服務(wù)合同
- 中年職業(yè)規(guī)劃
評(píng)論
0/150
提交評(píng)論