單片機(jī)簡(jiǎn)易計(jì)算器課程設(shè)計(jì).doc_第1頁(yè)
單片機(jī)簡(jiǎn)易計(jì)算器課程設(shè)計(jì).doc_第2頁(yè)
單片機(jī)簡(jiǎn)易計(jì)算器課程設(shè)計(jì).doc_第3頁(yè)
單片機(jī)簡(jiǎn)易計(jì)算器課程設(shè)計(jì).doc_第4頁(yè)
單片機(jī)簡(jiǎn)易計(jì)算器課程設(shè)計(jì).doc_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余35頁(yè)可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、課程設(shè)計(jì)題目名稱 _ 簡(jiǎn)易計(jì)算器設(shè)計(jì)_課程名稱_ 單片機(jī)原理及應(yīng)用_學(xué)生姓名 _班級(jí)學(xué)號(hào) _2018年 6月 20日i目錄一設(shè)計(jì)目的 . .2二總體設(shè)計(jì)及功能介紹 . .2三硬件仿真圖 . .3四主程序流程圖 . .4五程序源代碼 . .4六課程設(shè)計(jì)體會(huì) . .17i設(shè)計(jì)目的本設(shè)計(jì)是基于 51 系列單片機(jī)來進(jìn)行的簡(jiǎn)單數(shù)字計(jì)算器設(shè)計(jì),可以完成計(jì)算器的鍵盤輸入,進(jìn)行加、減、乘、除六位整數(shù)數(shù)范圍內(nèi)的基本四則運(yùn)算,并在LED 上顯示相應(yīng)的結(jié)果。軟件方面使用 C 語言編程,并用PROTUE 仿真。二總體設(shè)計(jì)及功能介紹根據(jù)功能和指標(biāo)要求,本系統(tǒng)選用 MCS-5 係列單片機(jī)為主控機(jī),實(shí)現(xiàn)對(duì)計(jì)算器的設(shè)計(jì)。具體

2、設(shè)計(jì)及功能如下:由于要設(shè)計(jì)的是簡(jiǎn)單的計(jì)算器,可以進(jìn)行四則運(yùn)算,為了得到較好的顯示效果,采用LED 顯示數(shù)據(jù)和結(jié)果;另外鍵盤包括數(shù)字鍵( 0? 9)、符號(hào)鍵( +、-、x、+)、清除鍵和等號(hào)鍵,故只需 要 16 個(gè)按鍵即可,設(shè)計(jì)中采用集成的計(jì)算鍵盤;執(zhí)行過程:開機(jī)顯示零,等待鍵入數(shù)值,當(dāng)鍵入數(shù)字,通過LED 顯示出來,當(dāng)鍵入 +、-、*、/運(yùn)算符,計(jì)算器在內(nèi)部執(zhí)行數(shù)值轉(zhuǎn)換和存儲(chǔ),并等待再次鍵入數(shù)值,當(dāng)再鍵入數(shù)值后將顯示鍵入的數(shù)值,按等號(hào)就會(huì)在LED 上輸出運(yùn)算結(jié)果。2三硬件仿真圖硬件部分比較簡(jiǎn)單,當(dāng)鍵盤按鍵按下時(shí)它的那一行、那一列的端口為低電平。因此,只要掃描行、列端口是否都為低電平就可以確定是

3、哪個(gè)鍵被按下。3四主程序流程圖開始讀取禪碼”0*N是否操作捋 .Afr*.N” * f、* Y廠是否阻拉怕數(shù)字Y是岳號(hào) J - ,J F_- _ 1Nd - r - ,f煤存操作符| 計(jì)算紜果井霊示 丨址理熄滅數(shù)毎管Ji - 一|I1- ? += =*顯示I標(biāo)記操作數(shù)1 維索養(yǎng)JL_I 尊待蝕旳龍橙下 II - - 丿N A Yk、IfI 隹否 OVCSt A - -*-F_ 1r程序的主要思想是:將按鍵抽象為字符,然后就是對(duì)字符的處理。將操作數(shù)分別轉(zhuǎn)化為字符串存儲(chǔ),操作符存儲(chǔ)為字符形式。然后調(diào)用compute 。函數(shù)進(jìn)行計(jì)算并返回結(jié)果。具體程序及看注釋還有流程圖五程序源代碼#inelude#

4、ineludevintrins.h 4#inelude/* isdigit() 函數(shù) */#in elude/* atoi() 函數(shù) */#define uchar unsigned char#define uint unsignedintuchar opera nd19, opera nd2 9; /*操作數(shù)*/uchar operator/* 操作符*/void delay(uint);uchar keysca n();void disp( void );void buf(uint value);uint compute( uint va1, uint va2,ucharoptor);uc

5、har code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;uchar dbuf 8 = 10,10,10,10,10,10,10,10;/* 延時(shí)函數(shù)*/void delay(uint z)uint x,y;for (x= z;x 0;x-)/* 字符碼表*/* 顯示緩存*/5for (y= 110 ;y 0 ;y-);t*鍵盤掃描程序?qū)存I轉(zhuǎn)化為字符并作為輸出$,# 分別表示清零鍵和沒有鍵按下*/ uchar keysca n()uchar skey;/* 按鍵值標(biāo)記變量*/*掃描鍵盤第 1 行*P1 = Ox

6、fe;while (P1 & OxfO) != 0xf0)/*有按鍵按下*/delay( 3);/*去抖動(dòng)延時(shí)*/while (P1 & OxfO) != OxfO) /*仍有鍵按下*/switch (P1)/*識(shí)別按鍵并賦值*/6case Oxee : skey = 7 ; break ;case 0xde :skey =8 ; breakcase 0xbe :skey =9 ; breakcase 0x7e : skey =/ ; breakdefault : skey =#;while (P1 & OxfO) != OxfO) /*等待按鍵松開*/*掃描鍵盤第 2 行*/P1 = 0xf

7、d;while (P1 & 0xf0) != 0xf0)delay( 3);while (P1 & 0xf0) != 0xf0)switch (P1)7case 0xed :skey =4 ; breakcase 0xdd :skey :=5; breakcase 0xbd :skey :=6; breakcase 0x7d :skey =* ; breakwhile (P1 & OxfO) != OxfO)defaultskey =/*掃描鍵盤第 3 行*/P1 = 0xfb;while (P1 & OxfO) != 0xf0)delay( 3);8while (P1 & OxfO) !=

8、OxfO)switch (P1)case 0xeb :skey =1 ; breakcase 0xdb :skey :=2 ; breakcase 0xbb :skey :=3 ; breakcase 0x7b :skey =-;breakdefault : skey = #;while (P1 & OxfO) != 0xf0)*掃描鍵盤第 4 行*9P1 = 0xf7;while (P1 & OxfO) != OxfO)delay( 3);while (P1 & 0xf0) != 0xf0)switch (P1)case 0xe7 : skey = $ ; breakcase 0xd7 :

9、skey = 0 ; breakcase 0xb7 : skey = = ; breakcase 0x77 : skey = + ; breakdefaultskey = # ;while (P1 & OxfO) != 0xf0)10retur n skey;void main()uint valuel, value2, value;uchar ckey, cutl = 0, cut2 = 0;in it :buf( 0);disp();value = 0;cut1 = cut2 = 0;bool = 0;for (i = 0;i 9 ;i+ )operand1i= 0;operand2i=

10、0;uchar operator ;uchar i, bool = 0;/* 數(shù)值 1,數(shù)值 2,結(jié)果 */* ckey 鍵盤輸入字符*/*運(yùn)算符*/* goto 語句定位標(biāo)簽*/*初始化*/*初始化*/11while (1)ckey = keysca n();/*讀取鍵盤*/if (ckey != #) /* isdigit 函數(shù),字符是阿拉伯?dāng)?shù)字返回非0 值,否則返回 0 */if (isdigit(ckey)switch (bool )case 0:opera nd1cut1 = ckey;operand1cut1 +1 = 0;value1 = atoi(operand1);/* at

11、oi 函數(shù),將字符串轉(zhuǎn)化為, int 整數(shù) */cut1 + ;buf(value1);disp();break ;case 1:opera nd2cut2 = ckey;operand2cut2 + 1 = 0;12value2 = atoi(opera nd2);cut2 + ; buf(value2); disp(); break ;default : break ;else if (ckey = + | ckey = - |ckey= * | ckey = /)bool = 1;operator = ckey;buf( 0);dbuf 7 = 10;disp();else if (ck

12、ey =)value = compute(value1,value2, operator );buf(value);disp();13while (1)/*計(jì)算結(jié)束等待清零鍵按下*/ckey = keysca n();if(ckey = $)/*如果有清零鍵按下跳轉(zhuǎn)到開始*/goto in it;elsebuf(value); disp();else if (ckey = $) goto in it;disp();*運(yùn)算函數(shù)14輸入:操作數(shù)和操作符輸出:計(jì)算結(jié)果*/uint compute( uint val, uint va2,uchar optor)uint value;switch (o

13、ptor)case +:value=va1 + va2;breakcase -:value =va1 - va2;break :case *:value =va1 * va2;breakcase T:value =va1 / va2;break ;default : breakreturn value;*更新顯示緩存15輸入:操作數(shù)和操作符輸出:計(jì)算結(jié)果*/uint compute(uint va1,uint va2,uchar optor)uint value;switch (optor)case +: value= va1 + va2;breakcase -: value =va1 -va

14、2;breakcase *: value =va1 * va2;breakcase /: value =va1 /va2;break ;default : breakreturn value;*更新顯示緩存15輸入:操作數(shù)和操作符輸出:計(jì)算結(jié)果*/uint compute(uint va1,uint va2,uchar optor)uint value;switch (optor)case +: value= va1 + va2;breakcase -: value =va1 -va2;breakcase *: value =va1 * va2;breakcase /: value =va1

15、/va2;break ;default : breakreturn value;*更新顯示緩存15輸入:操作數(shù)和操作符輸出:計(jì)算結(jié)果*/uint compute(uint va1,uint va2,uchar optor)uint value;switch (optor)case +: value= va1 + va2;breakcase -: value =va1 -va2;breakcase *: value =va1 * va2;breakcase /: value =va1 /va2;break ;default : breakreturn value;*更新顯示緩存15輸入:操作數(shù)和操

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論