




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
基于51單片機的計算器設(shè)計實驗報告班級:__(dá)12電子2_姓名:___風(fēng)間__學(xué)號:___(dá)2023年1月6日一、實驗?zāi)康?.初步嘗試運用單片機進(jìn)行系統(tǒng)設(shè)計;2.掌握矩陣鍵盤的中斷掃描顯示;3.掌握液晶或數(shù)碼管的動態(tài)顯示;4.掌握數(shù)據(jù)的存儲和掉電保護(hù)。二、實驗設(shè)備及器材Keilc、proteus、及單片機開發(fā)板。三、實驗內(nèi)容基本規(guī)定:1完畢標(biāo)準(zhǔn)型計算器的基本功能2.4*4矩陣鍵盤(0~9、+、-、*、/、=、%)進(jìn)行數(shù)據(jù)的輸入及加、減、乘、除基本運算,運用1602液晶或數(shù)碼管進(jìn)行顯示3.規(guī)定開機顯示學(xué)號四、設(shè)計思緒根據(jù)計算器的功能規(guī)定,選擇AT89C51為主控機,通過擴展必要的外圍接口電路,實現(xiàn)對計算器的設(shè)計。外部重要由4*4矩陣鍵盤和一個液晶顯示屏構(gòu)成,內(nèi)部由一塊AT89C51單片機構(gòu)成。計算器電路涉及四個模塊:選用LCD作為顯示部分,矩陣鍵盤作為輸入部分,運算模塊,單片機控制部分。模塊圖如圖所示:計算器電路涉及三個部分:顯示電路、4*4鍵掃描電路、單片機微控制電路。具體設(shè)計如下:(1)由于要設(shè)計的是簡樸的計算器,可以進(jìn)行四則運算,為了得到較好的顯示效果,采用1602液晶顯示數(shù)據(jù)和結(jié)果。(2)此外鍵盤涉及數(shù)字鍵(0~9)、符號鍵(+、-、×、÷)、清除鍵和等號鍵,需要16個按鍵。(3)執(zhí)行過程:開機顯示學(xué)號,等待鍵入數(shù)值,當(dāng)鍵入數(shù)字,通過LCD顯示出來,當(dāng)鍵入+、-、*、/運算符,計算器在內(nèi)部執(zhí)行數(shù)值轉(zhuǎn)換和存儲,并等待再次鍵入數(shù)值,當(dāng)再鍵入數(shù)值后將顯示鍵入的數(shù)值,按等號就會在LCD上輸出運算結(jié)果。線路原理框圖如圖所示。五、基于proteus的硬件原理圖六、軟件流程圖七、程序代碼#include<reg51.h>??//頭文獻(xiàn)#defineunitunsignedint#defineucharunsignedcharvoidxuehao(void);sbitSPK=P1^0;sbitlcden=P2^3;sbitrs=P2^4;sbitrw=P2^0;sbitbusy=P0^7;chari,j,temp,num,num_1;longa,b,c;?//a,第一個數(shù)b,第二個數(shù)c,得數(shù)float(yī)a_c,b_c;ucharflag,fuhao;//flag表達(dá)是否有符號鍵按下,fuhao表征按下的是哪個符號ucharcodetable[]={7,8,9,0,4,5,6,0,1,2,3,0,0,0,0,0,};ucharcodetable1[]={7,8,9,0x2f-0x30,4,5,6,0x2a-0x30,1,2,3,0x2d-0x30,0x01-0x30,0,0x3d-0x30,0x2b-0x30};voiddelay(ucharz)//延遲函數(shù){uchary;for(z;z>0;z--)for(y=0;y<110;y++);}voidcheck() //判斷忙或空閑{do{?P0=0xFF;rs=0; rw=1;lcden=0;?//嚴(yán)禁讀寫delay(1);???//等待,液晶顯示器解決數(shù)據(jù)lcden=1;? //允許讀寫?}while(busy==1);?//判斷是否為空閑,1為忙,0為空閑}voidwrite_com(ucharcom)?//寫指令函數(shù){P0=com;rs=0;rw=0;lcden=0;check();lcden=1;}voidwrite_dat(yī)e(uchardate)?//寫數(shù)據(jù)函數(shù){P0=dat(yī)e;rs=1;rw=0;lcden=0;check();lcden=1;}voidinit()??//1602初始化函數(shù){num=-1;lcden=1;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x80);write_com(0x01);num_1=0;i=0;j=0;a=0;? //第一個參與運算的數(shù)b=0;??//第二個參與運算的數(shù)c=0;flag=0;fuhao=0;SPK=0; //蜂鳴器打開delay(1000);??//延時SPK=1;???//蜂鳴器關(guān)閉}voidkeyscan()?//鍵盤掃描程序{P3=0xfe;if(P3!=0xfe){?delay(20);?if(P3!=0xfe)?{?SPK=0;delay(1000);SPK=1;?temp=P3&0xf0;?switch(temp)?{? case0xe0:num=0;??break; case0xd0:num=1; ?break;??case0xb0:num=2; ?break;??case0x70:num=3;??break;?}?}?while(P3!=0xfe); if(num==0||num==1||num==2)?//假如按下的是'7','8'或'9 { ?if(j!=0)??{??write_com(0x01); j=0; ?}?if(flag==0) ??//沒有按過符號鍵? { a=a*10+table[num];??}? else?? ?//假如按過符號鍵? { ?b=b*10+table[num];??}?} else ?? //假如按下的是'/'?{? flag=1;fuhao=4;???//4表達(dá)除號已按?} i=table1[num];?write_date(0x30+i);}P3=0xfd;if(P3!=0xfd){?delay(5);?if(P3!=0xfd)?{?SPK=0;delay(1000);SPK=1;? temp=P3&0xf0;??switch(temp)??{??case0xe0:num=4; ?break;?case0xd0:num=5;???break;??case0xb0:num=6;? break;??case0x70:num=7;?? break;??}?}?while(P3!=0xfd);?if(num==4||num==5||num==6&&num!=7)?//假如按下的是'4','5'或'6'?{ if(j!=0)?{ ?write_com(0x01);??j=0;?}?if(flag==0) { a=a*10+table[num];?}?else?{?b=b*10+table[num];?}?}?else?{?flag=1; fuhao=3;???//3表達(dá)乘號已按?}?i=table1[num];?write_dat(yī)e(0x30+i);?}?P3=0xfb;?if(P3!=0xfb)?{?delay(5);?if(P3!=0xfb) {? SPK=0;delay(1000);SPK=1;??temp=P3&0xf0; switch(temp)??{ ? case0xe0:num=8;???break;???case0xd0:num=9;?? break;??case0xb0:num=10;? ?break;? case0x70:num=11;? ?break; ?} ?}?while(P3?。?xfb);?if(num==8||num==9||num==10)?//假如按下的是'1','2'或'3'?{??if(j!=0)??{? write_com(0x01); ??j=0;??} if(flag==0)??{? a=a*10+table[num];??}??else??{? b=b*10+table[num];??}?}?elseif(num==11)?{ ?flag=1;? fuhao=2; ?//2表達(dá)減號已按 }??i=table1[num]; ?write_dat(yī)e(0x30+i); }?P3=0xf7;?if(P3!=0xf7) { delay(5); if(P3!=0xf7)?{ SPK=0;delay(1000);SPK=1; ?temp=P3&0xf0;??switch(temp)? { ?case0xe0:num=12;??break;?? case0xd0:num=13;? ?break;??case0xb0:num=14;???break;???case0x70:num=15;???break;? }?}?while(P3!=0xf7);?switch(num) ?{? case12:{write_com(0x01);a=0;b=0;flag=0;fuhao=0;}?//按下的是"清零"??break;??case13:{?????//按下的是"0"?? if(flag==0) //沒有按過符號鍵? ?{ ??a=a*10; ?write_date(0x30);????P1=0;?? }???elseif(flag==1)?//假如按過符號鍵? ?{????b=b*10; ???write_date(0x30);? ?}? }???break;??case14:{?? j=1;?if(fuhao==1){write_com(0x80+0x4f);//按下等于鍵,光標(biāo)前進(jìn)至第二行最后一個顯示處?write_com(0x04);?//設(shè)立從后住前寫數(shù)據(jù),每寫完一個數(shù)據(jù),光標(biāo)后退一格 ??c=a+b;???while(c!=0)? { ? write_dat(yī)e(0x30+c%10);???c=c/10;???}? ?write_date(0x3d);???a=0;b=0;flag=0;fuhao=0;?? }??elseif(fuhao==2){write_com(0x80+0x4f);???write_com(0x04);?? if(a-b>0)?? c=a-b;???else? ?c=b-a;? ?while(c!=0)?? {? ??write_date(0x30+c%10);????c=c/10;? } ??if(a-b<0)???write_date(0x2d);? ?write_date(0x3d);???a=0;b=0;flag=0;fuhao=0;? ?}??elseif(fuhao==3){write_com(0x80+0x4f);? ??write_com(0x04);? c=a*b;? while(c!=0)?? ?{? ?? write_date(0x30+c%10);??????c=c/10;? ????}???? write_date(0x3d);??????a=0;b=0;flag=0;fuhao=0;??????}???elseif(fuhao==4){write_com(0x80+0x4f);?? ?write_com(0x04);??? i=0;? ? c=(long)(((float)a/b)*1000); ????while(c!=0)?? {?? ?write_dat(yī)e(0x30+c%10);??? c=c/10; ?? ? i++;?????if(i==3)????write_date(0x2e);?? ???}??? ?if(a/b<=0)?? write_date(0x30); ??write_date(0x3d);????a=0;b=0;flag=0;fuhao=0;? ?? }? }? ??break;?case15:{write_dat(yī)e(0x30+table1[num]);flag=1;fuhao=1;}?? break;??}?}}voidxuehao()?//開機顯示學(xué)號{write_com(0x80);??//從第一行第一位開始write_date('1');write_date('2');write_dat(yī)e('0');write_date('0');write_dat(yī)e('4');write_date('0');write_date('1');write_date('2');write_date('1');write_dat(yī)e('7');}voidmain()??//主函數(shù){init();?? xuehao();while(1){?keyscan();}}八、運營結(jié)果圖開機顯示學(xué)號:加法運算:減法運算:乘法運算:除法運算:九、擴展功能在基本的功能上加了蜂鳴器電路,使按鍵的時候能發(fā)出聲音。電路連在單片機的P1.0口,當(dāng)開機時和判斷有鍵按下時,使P1.0口處在低電平,蜂鳴器發(fā)聲,并延遲一定的時間。十、思考題1、描述完整所設(shè)計的計算器能完畢的各項功能及實現(xiàn)方法。(如幾位數(shù)以內(nèi)的運算;連加;復(fù)合運算等等)①可以實現(xiàn)兩個數(shù)之間的加減乘除,
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 河北工藝美術(shù)職業(yè)學(xué)院《地下工程項目管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 硅湖職業(yè)技術(shù)學(xué)院《信息系統(tǒng)分析與設(shè)計實訓(xùn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025河南省安全員A證考試題庫附答案
- 2025山西省建筑安全員知識題庫
- 南京理工大學(xué)泰州科技學(xué)院《機械CAD-CAM》2023-2024學(xué)年第二學(xué)期期末試卷
- 石家莊城市經(jīng)濟(jì)職業(yè)學(xué)院《美術(shù)鑒賞》2023-2024學(xué)年第二學(xué)期期末試卷
- 云南現(xiàn)代職業(yè)技術(shù)學(xué)院《汽車標(biāo)準(zhǔn)與法規(guī)》2023-2024學(xué)年第二學(xué)期期末試卷
- 電梯保養(yǎng)合同-文書模板
- 2024年中學(xué)教學(xué)年終工作總結(jié)范本
- 新本月工作計劃
- 【上?!康谝淮卧驴季?1【20~21章】
- 2025年東營科技職業(yè)學(xué)院高職單招語文2018-2024歷年參考題庫頻考點含答案解析
- 2025年企業(yè)中高層安全第一課:安全責(zé)任意識強化專題培訓(xùn)
- 2025年上半年中煤科工集團(tuán)商業(yè)保理限公司招聘易考易錯模擬試題(共500題)試卷后附參考答案
- 英語-九師聯(lián)盟2025屆高三年級上學(xué)期1月質(zhì)量檢測試題和答案
- 流行性感冒診療方案(2025年版)
- 2024CSCO免疫檢查點抑制劑相關(guān)的毒性管理指南
- 《影像增強檢查外周靜脈通路三級評價模式應(yīng)用規(guī)范》編制說明
- 2025年社區(qū)計生工作計劃(三篇)
- 2025江西上饒經(jīng)濟(jì)技術(shù)開發(fā)區(qū)招商集團(tuán)限公司招聘29人高頻重點提升(共500題)附帶答案詳解
- 石油行業(yè)海洋石油勘探與開發(fā)方案
評論
0/150
提交評論