版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、課程設(shè)計(jì)題目名稱(chēng)簡(jiǎn)易計(jì)算器設(shè)計(jì)課程名稱(chēng)單片機(jī)原理及應(yīng)用學(xué)生姓名班級(jí)學(xué)號(hào)2018年6月20日日錄一設(shè)計(jì)目的2二總體設(shè)計(jì)及功能介紹2三硬件仿真圖3四主程序流程圖4五程序源代碼4六課程設(shè)計(jì)體會(huì)17一設(shè)計(jì)目的本設(shè)計(jì)是基于51系列單片機(jī)來(lái)進(jìn)行的簡(jiǎn)單數(shù)字計(jì)算器設(shè)計(jì),可以完成計(jì)算器的鍵盤(pán)輸入,進(jìn)行加、減、乘、除六位整數(shù)數(shù)范圍內(nèi)的基本四則運(yùn)算,并在LED上顯示相應(yīng)的結(jié)果。軟件方面使用C語(yǔ)言編程,并用PROTUE防真。二總體設(shè)計(jì)及功能介紹根據(jù)功能和指標(biāo)要求,本系統(tǒng)選用MCS-5K列單片機(jī)為主控機(jī),實(shí)現(xiàn)對(duì)計(jì)算器的設(shè)計(jì)。具體設(shè)計(jì)及功能如下:由于要設(shè)計(jì)的是簡(jiǎn)單的計(jì)算器,可以進(jìn)行四則運(yùn)算,為了得到較好的顯示效果,采用L
2、ED顯示數(shù)據(jù)和結(jié)果;另外鍵盤(pán)包括數(shù)字鍵(09)、符號(hào)鍵(+、-、+)、清除鍵和等號(hào)鍵,故只需要16個(gè)按鍵即可,設(shè)計(jì)中采用集成的計(jì)算鍵盤(pán);執(zhí)行過(guò)程:開(kāi)機(jī)顯示零,等待鍵入數(shù)值,當(dāng)鍵入數(shù)字,通過(guò)LED顯示出來(lái),當(dāng)鍵入+、-、*、/運(yùn)算符,計(jì)算器在內(nèi)部執(zhí)行數(shù)值轉(zhuǎn)換和存儲(chǔ),并等待再次鍵入數(shù)值,當(dāng)再鍵入數(shù)值后將顯示鍵入的數(shù)值,按等號(hào)就會(huì)在LED上輸出運(yùn)算結(jié)果。三硬件仿真圖硬件部分比較簡(jiǎn)單,當(dāng)鍵盤(pán)按鍵按下時(shí)它的那一行、那一列的端口為低電平。因此,只要掃描行、列端口是否都為低電平就可以確定是哪個(gè)鍵被按下。四主程序流程圖朝閽t曼藪lE0顯a:jT"""Siff1讀取疑碼_JTY_F
3、、r臬否阿拉伯?dāng)?shù)字;-f一,Y_J_,處理保存操作符'處理1熄滅數(shù)碼管I_/|_)一、I顯示|標(biāo)記操作數(shù)1結(jié)束111"-11 1-4A是否操作符:.)、¥是洋號(hào)»,»N1計(jì)算結(jié)果并顯示1|1J£I等匍N,C俱接下11,二N攵Y叱、1/矍舌0V唾一、A-程序的主要思想是:將按鍵抽象為字符,然后就是對(duì)字符的處理。將操作數(shù)分別轉(zhuǎn)化為字符串存儲(chǔ),操作符存儲(chǔ)為字符形式。然后調(diào)用compute()函數(shù)進(jìn)行計(jì)算并返回結(jié)果。具體程序及看注釋還有流程圖五程序源代碼#include<reg51.h>#include<intrins.h&g
4、t;#include<ctype.h>/*isdigit()函數(shù)*/#include<stdlib.h>/*atoi()函數(shù)*/#defineucharunsignedchar#defineuintunsignedintucharoperand19,operand29;/*操作數(shù)*/ucharoperator;/*操作符*/voiddelay(uint);ucharkeyscan();voiddisp(void);voidbuf(uintvalue);uintcompute(uintva1,uintva2,ucharoptor);ucharcodetable=0xc0,
5、0xf9,0xa4,0xb0,0x99,voiddelay(uintz)uintx,y;uchardbuf8=/*延時(shí)函數(shù)0x92,0x82,0xf8,0x80,0x90,0xff;10,10,10,10,10,10,10,10);*/*字符碼表/*顯示緩存*/*/for(x=z;x>0;x-)for(y=110;y>0;y-);)/*鍵盤(pán)掃描程序?qū)存I轉(zhuǎn)化為字符并作為輸出'$','#'分別表示清零鍵和沒(méi)有鍵按下*;ucharkeyscan()(ucharskey;/*掃描鍵盤(pán)第1行*;P1=0xfe;while(P1&0xf0)!=0xf0
6、)(delay(3);while(P1&0xf0)!=0xf0)(switch(P1)/*按鍵值標(biāo)記變量*/*有按鍵按下*/*去抖動(dòng)延時(shí)*/*仍有鍵按下*/*識(shí)別按鍵并賦值*/case0xee:skey='7'break;case0xde:skey='8'break;case0xbe:skey='9'break;case0x7e:skey='/'break;default:skey='#'*/)while(P1&0xf0)!=0xf0)/*等待按鍵松開(kāi);)/*掃描鍵盤(pán)第2行*/P1=0xfd;whi
7、le(P1&0xf0)!=0xf0)delay(3);while(P1&0xf0)!=0xf0)switch(P1)case0xed:skey='4'breakcase0xdd:skey='5'breakcase0xbd:skey='6'breakcase0x7d:skey='*'breakdefault:skey='#')while(P1&0xf0)!=0xf0);)/*掃描鍵盤(pán)第3行*/P1=0xfb;while(P1&0xf0)!=0xf0)delay(3);while(P1&
8、amp;0xf0)!=0xf0)(switch(P1)(case0xeb:skey='1'breakcase0xdb:skey='2'breakcase0xbb:skey='3'breakcase0x7b:skey='-'breakdefault:skey='#'while(P1&0xf0)!=0xf0);/*掃描鍵盤(pán)第4行*/P1=0xf7;while(P1&0xf0)!=0xf0)(delay(3);while(P1&0xf0)!=0xf0)(switch(P1)(case0xe7:sk
9、ey='$'breakcase0xd7:skey='0'breakcase0xb7:skey='='breakcase0x77:skey='+'breakdefault:skey='#'while(P1&0xf0)!=0xf0);returnskey;voidmain()(uintvaluel,value2,value;ucharckey,cutl=0,cut2=0;ucharoperator;uchari,bool=0;init:buf(0);disp();value=0;cut1=cut2=0;bool
10、=0;for(i=0;i<9;i+)(operand1i='0'operand2i='0')/*數(shù)值1,數(shù)彳12,結(jié)果*/*ckey鍵盤(pán)輸入字符*/*運(yùn)算符*/*goto語(yǔ)句定位標(biāo)簽*/*初始化*/*初始化*/(ckey=keyscan();/*讀取鍵盤(pán)*/if(ckey!='#')/*isdigit函數(shù),字符是阿拉伯?dāng)?shù)字返回非0值,否則返回0*/if(isdigit(ckey)switch(bool)case0:operand1cut1=ckey;operand1cut1+1='0'value1=atoi(operand1
11、);/*atoi函數(shù),將字符串轉(zhuǎn)化為,int整數(shù)*/cut1+;buf(value1);disp();break;case1:operand2cut2=ckey;operand2cut2+1='0'value2=atoi(operand2);cut2+;buf(value2);disp();break;default:break;elseif(ckey='+'|ckey='-'|ckey='*'|ckey='/')bool=1;operator=ckey;buf(0);dbuf7=10;disp();elseif(
12、ckey='=')value=compute(value1,value2,operator);buf(value);disp();(ckey=keyscan();/*如果有清零鍵按下跳轉(zhuǎn)到開(kāi)始*/if(ckey='$')gotoinit;else(buf(value);disp();elseif(ckey='$')gotoinit;disp();/*運(yùn)算函數(shù)輸入:操作數(shù)和操作符輸出:計(jì)算結(jié)果*/uintcompute(uintva1,uintva2,ucharoptor)(uintvalue;switch(optor)(breakbreak:br
13、eakbreak;case'+':value=va1+va2;case'-':value=va1-va2;case'*':value=va1*va2;case'/':value=va1/va2;default:break;returnvalue;/*更新顯示緩存輸入:無(wú)符號(hào)整數(shù)輸出:將輸入送入顯示緩存*voidbuf(uintval)(uchari;if(val=0)(dbuf7=0;i=6;elsefor(i=7;val>0;i-)(dbufi=val%10;val/=10;for(;i>0;i-)dbufi=10;
14、,*顯示函數(shù)*/voiddisp(void)(ucharbsel,n;bsel=0x01;for(n=0;n<8;n+)(P2=bsel;P0=tabledbufn;bsel=_crol_(bsel,1);delay(3);P0=0xff;六課程設(shè)計(jì)體會(huì)接到這個(gè)課題以后,我先是學(xué)習(xí)了PROTEU軟件的使用,按照題目所要求來(lái)進(jìn)行分析,設(shè)計(jì),連接電路圖,調(diào)試,最終完成計(jì)算器的仿真。接到題目后,我先是分析了題目中所涉及到的知識(shí)以及器件,然后按照分析,到圖書(shū)館和互聯(lián)網(wǎng)上搜索了相關(guān)的內(nèi)容,按照自己的構(gòu)想和圖書(shū)資料的提示,我初步設(shè)計(jì)了計(jì)算器的原理結(jié)構(gòu),然后進(jìn)行反復(fù)驗(yàn)證實(shí)驗(yàn),完善了設(shè)計(jì),然后通過(guò)學(xué)習(xí)PROTEUS件,讓我很輕松的就掌握了如何在軟件中建立原件,連線(xiàn),并進(jìn)行編程,調(diào)試,仿真等工作。軟件的強(qiáng)大功能使得在連接電路圖時(shí)很順利,程序編譯階段,通過(guò)提示的錯(cuò)誤,我也進(jìn)行了修改,聽(tīng)取同學(xué)的建議,最終無(wú)錯(cuò)誤,并對(duì)所設(shè)計(jì)的計(jì)算器電路進(jìn)行了仿真。最終順利的實(shí)現(xiàn)了任務(wù)要求的所有功能,并且電路設(shè)計(jì)簡(jiǎn)單易讀,構(gòu)造巧妙,計(jì)算速度快。本次課程設(shè)計(jì)中,另我最難忘的是編程環(huán)節(jié),真的是很難,開(kāi)始的時(shí)候感覺(jué)自己啥也不會(huì),然后決定重新學(xué)習(xí)課本,但是編程不像課本習(xí)題那樣簡(jiǎn)單的幾行來(lái)實(shí)現(xiàn)簡(jiǎn)單的功能,本次任務(wù)是實(shí)現(xiàn)一個(gè)簡(jiǎn)易功能的計(jì)算器,雖然只有加減乘除四則運(yùn)算,但是編程過(guò)程中卻用到了
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 石河子大學(xué)《應(yīng)用人工智能》2021-2022學(xué)年期末試卷
- 石河子大學(xué)《數(shù)字電路》2022-2023學(xué)年期末試卷
- 石河子大學(xué)《口腔頜面外科學(xué)二》2021-2022學(xué)年第一學(xué)期期末試卷
- 石河子大學(xué)《編譯原理》2022-2023學(xué)年第一學(xué)期期末試卷
- 沈陽(yáng)理工大學(xué)《數(shù)學(xué)建模與應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 沈陽(yáng)理工大學(xué)《口譯理論與實(shí)踐》2022-2023學(xué)年第一學(xué)期期末試卷
- 沈陽(yáng)理工大學(xué)《移動(dòng)終端應(yīng)用程序開(kāi)發(fā)》2022-2023學(xué)年期末試卷
- 沈陽(yáng)理工大學(xué)《電器學(xué)》2023-2024學(xué)年期末試卷
- 沈陽(yáng)理工大學(xué)《Python程序設(shè)計(jì)》2021-2022學(xué)年期末試卷
- 國(guó)際貿(mào)易綜合技能實(shí)訓(xùn)中對(duì)合同訂立報(bào)告
- 正比例函數(shù)的圖象與性質(zhì)說(shuō)課稿
- 施工單位履約后評(píng)價(jià)報(bào)告(共2頁(yè))
- 《生活中的度量衡》PPT課件.ppt
- 趣味數(shù)學(xué)推理小故事PPT精品文檔
- Excel支票打印模板2021
- 生物防火林帶建設(shè)檢查驗(yàn)收
- 《危險(xiǎn)游戲莫玩?!稰PT課件.ppt
- 自-銑削用量進(jìn)給量進(jìn)給速度(精編版)
- 技術(shù)標(biāo)書(shū)綜合說(shuō)明
- 入行論(課堂PPT)
- 中國(guó)行政區(qū)劃空白圖
評(píng)論
0/150
提交評(píng)論