版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上課程設(shè)計(jì)報(bào)告課程名稱 單片機(jī)原理及應(yīng)用 設(shè)計(jì)題目 簡(jiǎn)易計(jì)算器設(shè)計(jì) 專業(yè)班級(jí) 姓 名 學(xué) 號(hào) 1.項(xiàng)目概述中國(guó)古代最早采用的一種計(jì)算工具叫算籌。這種算籌多用竹子制成,也有用木頭,獸骨充當(dāng)材料的。約二百七十枚一束,放在布袋里可以隨身攜帶。17世紀(jì)初,西方國(guó)家的計(jì)算工具有了較大的發(fā)展,英國(guó)數(shù)學(xué)家納皮爾發(fā)明的“納皮爾算籌”,英國(guó)牧師奧卻德發(fā)明了圓柱形對(duì)數(shù)計(jì)算尺,這種計(jì)算尺不僅能做加減乘除,乘方,開方運(yùn)算,甚至可以計(jì)算三角函數(shù),指數(shù)函數(shù)和對(duì)數(shù)函數(shù),這些計(jì)算工具不僅帶動(dòng)了計(jì)算器的發(fā)展,也為現(xiàn)代計(jì)算器發(fā)展奠定了良好的基礎(chǔ),成為現(xiàn)代社會(huì)應(yīng)用廣泛的計(jì)算工具。2.項(xiàng)目要求基于AT89C5
2、1單片機(jī)的簡(jiǎn)易計(jì)算器,設(shè)計(jì)要求如下:(1) 計(jì)算器至少能正常顯示8位數(shù)。(2) 開機(jī)時(shí),顯示“0”(3) 計(jì)算器能對(duì)整數(shù)進(jìn)行簡(jiǎn)單的加減乘除四則運(yùn)算,在做除法時(shí)能自動(dòng)舍去小數(shù)部分(4) 運(yùn)算結(jié)果超過(guò)可顯示的位數(shù)時(shí)能進(jìn)行出錯(cuò)提示。3.小組人員組成及分工項(xiàng)目組成員完成課程設(shè)計(jì)的內(nèi)容主函數(shù)設(shè)計(jì) 利用中斷持續(xù)間時(shí)顯示按鍵掃描錄入函數(shù)計(jì)算器加減乘除四則運(yùn)算4.系統(tǒng)設(shè)計(jì)八位七段數(shù)碼管1.框圖設(shè)計(jì) 顯示AT89C51按鍵錄入模塊(0-9 +-*/=c) 錄入5.硬件設(shè)計(jì)(1)電路原理圖:(2)元件清單:元件名稱型號(hào)數(shù)量用途單片機(jī)AT89C511控制核心電阻10k4按鍵電路數(shù)碼管8位共陽(yáng)極1顯示電路按鍵16按鍵
3、電路6.軟件設(shè)計(jì)(1)算法流程圖:開始主函數(shù)結(jié)束調(diào)用運(yùn)算程序錄入數(shù)值判斷符號(hào)錄入數(shù)值專心-專注-專業(yè)中斷結(jié)束定時(shí)器賦初值送顯示數(shù)據(jù)關(guān)中斷中斷開始顯示函數(shù) 按鍵函數(shù)運(yùn)算查值賦值給變量列掃描行掃描(2)程序清單:#include<reg51.H>/*按鍵程序*/char keyscan();/*顯示程序*/ void display();char dsp9=0,0,12,12,12,12,12,12,12; /初始化顯示數(shù)組/*計(jì)算程序*/ void calculate(char k,char c18,char c28);/*片選*/unsigned char code Select=
4、0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;/*碼選*/ unsigned char code LED_CODES=0xC0,0xF9,0xA4,0xB0,0x99, /0-40x92,0x82,0xF8,0x80,0x90, /5-90x86,0xAF,0xFF,0x7F,0xBF,; /E,r,空格,.,-/*main函數(shù)*/void main(void)char i,j,k,c;char a8,b8;/*定時(shí)1ms*/TMOD=0;/TL0=-(1000/256);/TH0=-(1000%256);EA = 1; /總中斷開關(guān)ET0 = 1; /開中斷
5、TR0 = 1; /啟用計(jì)數(shù)器0LR:dofor(i=1;i<9;i+) /數(shù)字錄入循環(huán)dsp0=keyscan();if(c=2&&dsp0<10) /此段代碼驗(yàn)證是否有舊的計(jì)算結(jié)果在顯示,且不再參與新計(jì)算dsp1=dsp0;for(j=2;j<9;j+)dspj=12;c=0;else if(c=2&&dsp0>9) /舊的計(jì)算結(jié)果將參與新的計(jì)算,作為第一個(gè)數(shù)c=0;if(dsp0=0&&dsp1=0&&dsp2=12) /個(gè)位為0且十位為空時(shí)按下0,按鍵無(wú)效,跳回LR等待正確輸入/*goto跳轉(zhuǎn)標(biāo)志*
6、/ goto LR;else if(dsp0>9) break; /有操作符按下,跳出數(shù)字錄入循環(huán) elsefor(j=i;j>0;j-)dspj=dspj-1; /移位,以正確顯示數(shù)字 if(i=9) /判斷是否輸入8個(gè)有效數(shù)字,是則等待操作符,否則直接判斷操作符do /使用do while無(wú)論是否第一個(gè)數(shù)都取一次操作符dsp0=keyscan(); /獲取操作符號(hào)if(dsp0=14|dsp0<10) /按下C或者第9位數(shù)字清零dsp1=0;for(i=2;i<9;i+)dspi=12;c=0;while(dsp0=15)&&(c=0); /等號(hào)被按
7、下,等待新的操作符(僅對(duì)第一個(gè)數(shù)字有效)else if(dsp0=14) /按下C清零dsp1=0;for(i=2;i<9;i+)dspi=12;c=0;while(dsp0=15&&c=0) /未輸滿8位且是第一個(gè)數(shù)字即按下等號(hào),等待非等號(hào)操作符dsp0=keyscan(); /獲取操作符號(hào)if(dsp0=14|dsp0<10) /按下C或者數(shù)字都進(jìn)行清零,重新輸入adsp0=14; /將dsp0置為14,防止因數(shù)字清零未能攔截dsp1=0;for(i=2;i<9;i+)dspi=12;c=0; while(dsp0=14); /數(shù)字輸入未完成即按下C,重新
8、等待輸入doif(c=0) /沒(méi)有數(shù)字輸入 k=dsp0; /存計(jì)算符(循環(huán)內(nèi)已排除C、數(shù)字)for(i=0;i<8;i+) /將第一個(gè)數(shù)存入a8ai=dspi+1;dsp1=0; /清零for(i=2;i<9;i+)dspi=12;c=1; /已輸入a/*goto跳轉(zhuǎn)標(biāo)志*/goto LR;else if(c=1) for(i=0;i<8;i+) /將第二個(gè)數(shù)存入b8bi=dspi+1;c=2; /已輸入bif(dsp0!=15) /b輸完后操作符不是等號(hào)calculate(k,a,b);for(i=0;i<8;i+) /將計(jì)算結(jié)果存入a8,a值更新ai=dspi+1
9、;k=dsp0; /更新計(jì)算符c=1;/*goto跳轉(zhuǎn)標(biāo)志*/goto LR;while(dsp0=15)&&(c<2); /直到ab輸入完成且按下等號(hào)calculate(k,a,b); /進(jìn)行最后計(jì)算/*goto跳轉(zhuǎn)標(biāo)志*/goto LR; /跳回LR,等待新一輪計(jì)算while(1); /防止程序跑飛char keyscan()char KeyL;char KeyR;char j;dodoP3=0xF0;P3=P3|0xF0;/行掃描 if(P3!=0xF0)KeyL=P3;P3=0x0F;P3=P3|0x0F;/列掃描KeyR=P3;while(KeyL=0xF0|K
10、eyR=0x0F);for(j=0;j<12;j+) /延時(shí)0.001s=1ms;while(P3!=0x0F); switch(KeyL&KeyR)case 0x28:return 0;break;case 0x11:return 1;break;case 0x21:return 2;break;case 0x41:return 3;break;case 0x12:return 4;break;case 0x22:return 5;break;case 0x42:return 6;break;case 0x14:return 7;break;case 0x24:return 8
11、;break;case 0x44:return 9;break;case 0x81:return 10;break;/加法(第一行,第四列)case 0x82:return 11;break;/減法(第二行,第四列)case 0x84:return 12;break;/乘法(第三行,第四列)case 0x88:return 13;break;/除法(第四行,第四列)case 0x18:return 14;break;/清零(第四行,第一列)case 0x48:return 15;break;/計(jì)算結(jié)果(第四行,第三列)void display() interrupt 1 using 1 /利用
12、定時(shí)器中斷實(shí)現(xiàn)間時(shí)顯示 char i,j,h;ET0=0;for(j=8;j>0;j-) /掃描8次for(i=7;i>=0;i-) /從高位到低位掃描顯示P2=0;P1=LED_CODESdsp8-i;P2=Selecti;for(h=0;h<8;h+);TL0=-(1000/256);TH0=-(1000%256);ET0=1; void calculate(char k,char a8,char b8)char r8;long i,x,y;i=0;x=0;y=0;for(i=7;i>0;i-) /數(shù)值轉(zhuǎn)化,將代表空格的12轉(zhuǎn)化為數(shù)字0,因?yàn)閭€(gè)位不顯示空格,默認(rèn)為0
13、,所以不轉(zhuǎn)化while(ai=12)ai=0;while(bi=12)bi=0;x=a4;x=10000*x;x=x+a0+a1*10+a2*100+a3*1000+a5*+a6*+a7*;y=b4;y=10000*y;y=y+b0+b1*10+b2*100+b3*1000+b5*+b6*+b7*;if(k=10)/加法運(yùn)算x=x+y;if(x>) /大于8位,顯示"Err"r0=11; /rr1=11; /rr2=10; /Er3=12; /空格r4=12;r5=12;r6=12;r7=12;elser0=x%10;r1=(x%100)/10;r2=(x%1000)
14、/100; r3=(x%10000)/1000;r4=(x%)/10000;r5=(x%)/;r6=(x%)/;r7=x/;if(k=11)/減法運(yùn)算 if(x<y)x=y-x;if(x>)r0=11; /rr1=11; /rr2=10; /Er3=12; /空格r4=12;r5=12;r6=12;r7=12;elser0=x%10;r1=(x%100)/10;r2=(x%1000)/100; r3=(x%10000)/1000;r4=(x%)/10000;r5=(x%)/;r6=(x%)/;r7=x/;for(i=7;i>0;i-) /將有效數(shù)字的高一位轉(zhuǎn)化為號(hào)if(ri=
15、0&&ri-1!=0)ri=14;break;elsex=x-y;r0=x%10;r1=(x%100)/10;r2=(x%1000)/100; r3=(x%10000)/1000;r4=(x%)/10000;r5=(x%)/;r6=(x%)/;r7=x/; if(k=12)/乘法運(yùn)算i=x;x=x*y;if(y=0)x=0;else if(x>|x<i) /積大于或者小于乘數(shù)都認(rèn)為是異常,存在其他可能的溢出,須自行辨別r0=11; /rr1=11; /rr2=10; /Er3=12; /空格r4=12;r5=12;r6=12;r7=12;elser0=x%10;r1=(x%100)/10;r2=(x%1000)/100; r3=(x%10000)/1000;r4=(x%)/10000;r5=(x%)/;r6=(x%)/;r7=x/;if(k=13)/除法運(yùn)算 if(y=0) /被除數(shù)不能為0r0=11; /rr1=11; /rr2=10; /Er3=12; /空
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024大型醫(yī)院醫(yī)療設(shè)備采購(gòu)與維護(hù)合同
- 2024年度高端裝備制造技術(shù)引進(jìn)合同
- 2024年度0kv線路工程環(huán)境保護(hù)與安全生產(chǎn)合同
- 2024年度企業(yè)網(wǎng)絡(luò)安全技術(shù)服務(wù)合同
- 幼兒園營(yíng)養(yǎng)管理制度與健康教育
- 2024年二手房購(gòu)房合同(物業(yè)費(fèi)自理)
- 2024年廣告投放買賣合同
- 2024年工程承包分包合同
- 零售業(yè)職員考勤與請(qǐng)假管理方案
- 2024年建筑信息模型(BIM)外包服務(wù)合同
- 中建住宅給排水工程專項(xiàng)施工方案
- 《體育保健學(xué)》課件-第三章 運(yùn)動(dòng)性病癥
- 認(rèn)知語(yǔ)言學(xué)導(dǎo)論第四章(主體和背景)
- 新教師如何備課課件
- 農(nóng)村小學(xué)基于國(guó)家中小學(xué)智慧教育平臺(tái)下的雙師課堂研究
- 推進(jìn)農(nóng)業(yè)綠色發(fā)展
- 《超硬磨料 人造金剛石技術(shù)規(guī)范》
- GB/T 19651.1-2023雜類燈座第1部分:一般要求和試驗(yàn)
- 中醫(yī)科老年診療規(guī)范
- 教科版五年級(jí)科學(xué)上冊(cè) (風(fēng)的作用)課件
- 國(guó)家標(biāo)準(zhǔn)公差表
評(píng)論
0/150
提交評(píng)論