![單片機課程設(shè)計簡易計算器設(shè)計_第1頁](http://file4.renrendoc.com/view11/M00/01/15/wKhkGWWjZlmAZgahAAB8jGG1YHA192.jpg)
![單片機課程設(shè)計簡易計算器設(shè)計_第2頁](http://file4.renrendoc.com/view11/M00/01/15/wKhkGWWjZlmAZgahAAB8jGG1YHA1922.jpg)
![單片機課程設(shè)計簡易計算器設(shè)計_第3頁](http://file4.renrendoc.com/view11/M00/01/15/wKhkGWWjZlmAZgahAAB8jGG1YHA1923.jpg)
![單片機課程設(shè)計簡易計算器設(shè)計_第4頁](http://file4.renrendoc.com/view11/M00/01/15/wKhkGWWjZlmAZgahAAB8jGG1YHA1924.jpg)
![單片機課程設(shè)計簡易計算器設(shè)計_第5頁](http://file4.renrendoc.com/view11/M00/01/15/wKhkGWWjZlmAZgahAAB8jGG1YHA1925.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
參考文獻參考文獻[1]張毅剛,劉杰.MCS51單片機原理及應(yīng)用[M].哈爾濱:哈爾濱工業(yè)大學出版社,2008[2]高峰.單片微型計算機原理與接口技術(shù)[M].北京:科技出版社,2007[3]胡漢才.單片機原理及其接口技術(shù)[M].北京:清華大學出版社,2004[4]譚浩強.C語言程序設(shè)計[M].北京:清華大學出版社,2005[5]王忠民.微型計算機原理[M].西安:西安電子科技大學出版社,2003[6]沈美明,溫冬嬋.IBM-PC匯編語言程序設(shè)計[M].北京:清華大學出版社,2001xxxxxx大學課程設(shè)計報告附錄附錄I程序源代碼/******簡單計算器試驗:用A,B,C,D,E,F分別表示+,-,*,/運算******/#include<reg51.h>#include<stdio.h>#include<math.h>#defineucharunsignedchar#defineuintunsignedintuchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//八段碼uinttablenum[]={1,10,100,1000};ucharxdata*p1=0x08001;//定義鍵盤行地址ucharxdata*p2=0x08002;//定義鍵盤列地址ucharxdata*q1=0x08002;//定義位碼輸出地址ucharxdata*q2=0x08004;//定義段碼輸出地址uintnum;//鍵盤按鍵uinty1,y2;//延時程序所用變量uintshu;uintkey;//標記數(shù)字鍵uinta;//記錄按鍵按下的次數(shù)uintnumber1[4];//存放數(shù)字uintnumber2[4];//存放數(shù)字uintnum1;uintnum2;uintdelay(uinty1);//延時函數(shù)voidkeyscan();//鍵盤掃描函數(shù)voiddisplay(intb);//鍵盤顯示函數(shù)voidmain(){intnumber;inti;key=0;a=0;*q1=0x00;//數(shù)碼管不顯示while(1){*p1=0xff;if((*p1&0x0f)!=0x0f)//判斷是否有按鍵按下{keyscan();if(key==0&&num>=0&&num<10)//按下第一個數(shù)字鍵{number1[0]=num;//把按鍵數(shù)值存放在數(shù)組number1[0]中display(1);key++;}elseif(key==1){if(num<10)//此時按下的按鍵為0-9數(shù)字鍵{a++;if(a>3)display(20);//出現(xiàn)越界顯示ERRORelse{number1[a]=num;display(a+1);}}elseif(num==15)//按下清屏鍵{display(15);a=0;key=0;}elseif(num>9&&num<14)//按下的按鍵為加或減或乘或除{num2=0;for(i=0;i<=a;i++){num2+=number1[i]*tablenum[a-i];}delay(5);display(num);//顯示是什么運算shu=num;//把按下的鍵值傳遞給變量shua=0;key=0;}elseif(num==14)//此時按下的按鍵為E等于按鍵{*q1=0x00;for(i=0;i<=a;i++){num1+=number1[i]*tablenum[a-i];}switch(shu)//判斷運算后做相應(yīng)的運算{case10:num2+=num1;break;case11:num2-=num1;break;case12:num2*=num1;break;case13:if(num1>0)num2/=num1;elsenum2=-1;break;}if(num2>9999||num2<0)//判斷運算是否產(chǎn)生越界display(20);//越界則顯示ERRORelse//沒越界顯示相應(yīng)結(jié)果{a=0;key=4;for(i=3;i>=0;i--){number2[i]=(num2-(num2%tablenum[i]))/tablenum[i];num2-=number2[i]*tablenum[i];if(a==0&&number2[i]==0)key--;elseif(number2[i]!=0)a++;}for(i=0;i<key;i++){number1[key-1-i]=number2[i];}display(key);}key=0;a=0;}}}if(num==15)//按下清屏鍵{display(15);a=0;key=0;}}}/***********************************************************************/uintdelay(uinty1) //延時函數(shù){for(;y1>0;y1--)for(y2=100;y2>0;y2--);}/**********************************************************************/voidkeyscan()//鍵盤掃描函數(shù){*p2=0xfb;//左數(shù)第四列switch(*p1){case0x0e:num=13;break;//下數(shù)第一行dcase0x0d:num=12;break;//下數(shù)第二行ccase0x0b:num=11;break;//下數(shù)第三行bcase0x07:num=10;break;//下數(shù)第四行a}*p2=0xf7;//左數(shù)第三列switch(*p1){case0x0e:num=14;break;//ecase0x0d:num=3;break;//3case0x0b:num=6;break;//6case0x07:num=9;break;//9}*p2=0xef;//左數(shù)第二列switch(*p1){case0x0e:num=15;break;//fcase0x0d:num=2;break;//2case0x0b:num=5;break;//5case0x07:num=8;break;//8}*p2=0xdf;//左數(shù)第一列switch(*p1){case0x0e:num=0;break;//0case0x0d:num=1;break;//1case0x0b:num=4;break;//4case0x07:num=7;break;//7}delay(5);}/**********************************************************************/voiddisplay(intb)//數(shù)碼管顯示函數(shù){inti;intnumber;num1=0;*q1=0x00;if(b<=4)//此時按下的按鍵為0-D鍵正常顯示{while((*p1&0x0f)!=0x0f);delay(5);while((*p1&0x0f)==0x0f){for(i=b;i>0;i--){*q1=0x01<<i-1;number=number1[b-i];*q2=table[number];delay(1);}}}elseif(b==20)//出現(xiàn)越界情況顯示ERROR{while((*p1&0x0f)!=0x0f);delay(5);while((*p1&0x0f)==0x0f){*q1=0x01;*q2=table[10];delay(1);*q1=0x02;*q2=table[0];delay(1);*q1=0x04;*q2=table[10];delay(1);*q1=0x08;*q2=table[10];delay(1);*q1=0x10;*q2=table[14];delay(1);}a=0;key=0;}elseif(b==15)//此時按下F清數(shù)碼管顯示鍵{while((*p1&0x0f)!=0x0f);//判斷是否按下按鍵*q1=0x00;delay(5);while((*p1&0x0f)==0x0f);delay(5);a=0;key=0;}elseif(b>9&&b<14)//按下的按鍵為加或減或乘或除{while((*p1&0x0f)!=0x0f);delay(5);while((*p1&0x0f)==0x0f){*q1=0x01;*q2=table[b];delay(1);}}}附錄II硬件電路附錄III元件清單UsedPartTypeDesignatorFootprint======================================16MHZY1120pFC2122pFC3130pFC1174F32U7DIP-14174HC138U2DIP-16174LS245U4DIP-20274LS374U3U5DIP-2018051U1DIP-401BDMU61MC1413U84RES2R1R2R3R424SW-PBS1S2S3S4S5S6S7S8S9S10S11
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 八年級英語下冊 Unit 2 單元綜合測試卷(人教河南版 2025年春)
- 2025年低碳小鎮(zhèn)合作協(xié)議書
- 2025年游戲陪玩合作協(xié)議書
- 2025年地震前兆觀測儀器合作協(xié)議書
- 三嚴三實與公務(wù)員作風建設(shè)試題答卷(2015.9)
- 2025年九年級英語培優(yōu)輔差總結(jié)(五篇)
- 2025年產(chǎn)權(quán)交易合同(2篇)
- 2025年交通賠償?shù)暮贤瑓f(xié)議模板(三篇)
- 2025年中秋節(jié)幼兒活動總結(jié)(二篇)
- 專題01 函數(shù)的定義域(含2021-2023高考真題)(解析版)
- 中國移動行測測評題及答案
- 統(tǒng)編版語文八年級下冊第7課《大雁歸來》分層作業(yè)(原卷版+解析版)
- 2024年湖南省普通高中學業(yè)水平考試政治試卷(含答案)
- 零售企業(yè)加盟管理手冊
- 設(shè)備維保的維修流程與指導(dǎo)手冊
- 招標代理服務(wù)的關(guān)鍵流程與難點解析
- 材料預(yù)定協(xié)議
- 2023年河北省中考數(shù)學試卷(含解析)
- 《學習的本質(zhì)》讀書會活動
- 高氨血癥護理課件
- 物流營銷(第四版) 課件 胡延華 第3、4章 物流目標客戶選擇、物流服務(wù)項目開發(fā)
評論
0/150
提交評論