基于單片機(jī)的計算器相關(guān)設(shè)計.docx_第1頁
基于單片機(jī)的計算器相關(guān)設(shè)計.docx_第2頁
基于單片機(jī)的計算器相關(guān)設(shè)計.docx_第3頁
基于單片機(jī)的計算器相關(guān)設(shè)計.docx_第4頁
基于單片機(jī)的計算器相關(guān)設(shè)計.docx_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

基于單片機(jī)的計算器設(shè)計基于單片機(jī)的遠(yuǎn)程運算器設(shè)計 摘 要 計算器(calculator;counter)一般是指“電子計算器”,該名詞由日文傳入中國。計算器是能進(jìn)行數(shù)學(xué)運算的手持機(jī)器,擁有集成電路芯片,結(jié)構(gòu)簡單,功能較弱,但由于它使用方便、操作簡單、價格低廉,因而廣泛運用于商業(yè)交易中,也是必備的辦公用品之一。本文提出一種基于單片機(jī)的遠(yuǎn)程運算器設(shè)計,系統(tǒng)包含三個功能模塊: (1)紅外遙控模塊:通過紅外遙控器輸入想要計算的表達(dá)式; (2)主機(jī)模塊:主機(jī)負(fù)責(zé)紅外接收和解碼,然后將解碼后所得數(shù)值通過串口通信發(fā)送給從機(jī),同時主機(jī)還要進(jìn)行計算,并且將表達(dá)式及計算結(jié)果都顯示在液晶屏上; (3)從機(jī)模塊(模擬遠(yuǎn)程運算):從機(jī)負(fù)責(zé)從串口讀取數(shù)據(jù),然后進(jìn)行計算,并把表達(dá)式及計算結(jié)果顯示在液晶屏上; 系統(tǒng)結(jié)構(gòu)如下圖所示: 通過遠(yuǎn)程運算器的設(shè)計,不僅加深了對單片機(jī)串行通信、液晶屏顯示、紅外解碼等知識的理解和掌握,而且對實際電路設(shè)計的步驟有了較為深入的理解。基于單片機(jī)的遠(yuǎn)程運算器的設(shè)計,是對單片機(jī)課程設(shè)計的探索和實踐,有一定指導(dǎo)意義。 關(guān)鍵詞:遠(yuǎn)程運算器,單片機(jī),串行通信 I - - 基于單片機(jī)的遠(yuǎn)程運算器設(shè)計 目 錄 摘 要 . I 引 言.1 1 遠(yuǎn)程運算器概述.2 1.1 遠(yuǎn)程運算器結(jié)構(gòu)2 1.2 工作原理2 1.3 功能應(yīng)用3 2 遠(yuǎn)程運算器組成.3 2.1 紅外遙控器3 2.2 液晶屏顯示部分4 2.3 串行通信部分4 3 程序設(shè)計流程圖.4 3.1 主機(jī)程序設(shè)計流程圖4 3.1.1 主程序流程圖.4 3.1.2 紅外中斷程序流程圖.5 3.2 從機(jī)程序設(shè)計流程圖6 3.2.1 主程序流程圖.6 3.2.2 串口中斷程序流程圖.6 結(jié) 論. 7 參 考 文 獻(xiàn). 8 附錄A 程序清單.9 1、主機(jī)程序.9 2、從機(jī)程序.14 3、演示圖片.17 II - - 引 言 最早的計算工具誕生在中國。 中國古代最早采用的一種計算工具叫籌策,又被叫做算籌。這種算籌多用竹子制成,也有用木頭、獸骨充當(dāng)材料的,約二百七十枚一束,放在布袋里可隨身攜帶。 直到今天仍在使用的珠算盤,是中國古代計算工具領(lǐng)域中的另一項發(fā)明,明代時的珠算盤已經(jīng)與現(xiàn)代的珠算盤幾乎相同。 17世紀(jì)初,西方國家的計算工具有了較大的發(fā)展。英國數(shù)學(xué)家納皮爾發(fā)明了“納皮爾算籌”,英國牧師奧卻德發(fā)明了圓柱形對數(shù)計算尺,這種計算尺不僅能做加減乘除、乘方、開方運算,甚至可以計算三角函數(shù)、指數(shù)函數(shù)和對數(shù)函數(shù)。這些計算工具為現(xiàn)代計算器的發(fā)展奠定了良好的基礎(chǔ)。 1642年,年僅19歲的法國偉大科學(xué)家帕斯卡引用算盤的原理,發(fā)明了第一部機(jī)械式計算器。在他的計算器中有一些互相聯(lián)鎖的齒輪,一個轉(zhuǎn)過十位的齒輪會使另一個齒輪轉(zhuǎn)過一位,人們可以像撥電話號碼盤那樣,把數(shù)字撥進(jìn)去,計算結(jié)果就會出現(xiàn)在另一個窗口中,但是只能做加減計算。1694年,萊布尼茲在德國將其改進(jìn)成可以進(jìn)行乘除的計算。此后,到了20世紀(jì)50年代末,電子計算器問世。 隨著科學(xué)技術(shù)的不斷發(fā)展及計算器應(yīng)用的普及,人們發(fā)現(xiàn)在工業(yè)控制中,有很多時候需要在惡劣的環(huán)境中進(jìn)行各種數(shù)據(jù)的采集、運算和控制。遠(yuǎn)程運算器正好可以解決這一難題,人們從主機(jī)輸入數(shù)據(jù)或其他控制信息,主機(jī)通過串行通信將數(shù)據(jù)發(fā)送給惡劣環(huán)境中的從機(jī),從機(jī)根據(jù)接收到的信息進(jìn)行各種運算或控制。 本文設(shè)計了一個基于單片機(jī)的遠(yuǎn)程運算器,它具有三個模塊:紅外遙控模塊、主機(jī)模塊、從機(jī)模塊。紅外遙控器采用WD6122芯片,顯示部分采用1602液晶屏顯示,直觀明了。 - 1 - 1 遠(yuǎn)程運算器概述 遠(yuǎn)程運算器模擬了工業(yè)控制中很常見的遠(yuǎn)程控制的情況,具有很好的現(xiàn)實意義。 本文設(shè)計了一個基于單片機(jī)的遠(yuǎn)程運算器,它具有三個模塊:(1)紅外遙控模塊:通過紅外遙控器輸入想要計算的表達(dá)式;(2)主機(jī)模塊:主機(jī)負(fù)責(zé)紅外接收和解碼,然后將解碼后所得數(shù)值通過串口通信發(fā)送給從機(jī),同時主機(jī)還要進(jìn)行計算,并且將表達(dá)式及計算結(jié)果都顯示在液晶屏上;(3)從機(jī)模塊(模擬遠(yuǎn)程運算):從機(jī)負(fù)責(zé)從串口讀取數(shù)據(jù),然后進(jìn)行計算,并把表達(dá)式及計算結(jié)果顯示在液晶屏上; 1.1 遠(yuǎn)程運算器結(jié)構(gòu) 本文設(shè)計的遠(yuǎn)程運算器包括三大模塊,分別是紅外遙控模塊、主機(jī)模塊、從機(jī)模塊,系統(tǒng)框圖如圖1.1所示。 圖1.1 系統(tǒng)框圖 Fig. 1.1 System Structure 1.2 工作原理 通過紅外遙控器輸入想要計算的表達(dá)式,主機(jī)進(jìn)行紅外接收和解碼,然后將解碼后所得數(shù)值通過串口通信發(fā)送給從機(jī),同時主機(jī)進(jìn)行計算,并且將表達(dá)式及計算結(jié)果顯示在液晶屏上,從機(jī)通過串口讀取數(shù)據(jù),然后進(jìn)行計算,并把表達(dá)式及計算結(jié)果顯示在液晶屏上。 - 2 - 紅外遙控器采用WD6122芯片,該芯片采用CMOS工藝制造,是通用的紅外遙控發(fā)射集成電路。顯示部分采用1602液晶屏,電路簡單,顯示簡潔。 1.3 功能應(yīng)用 本系統(tǒng)可以完成無符號整形數(shù)據(jù)(065535)的加、減、乘、除四則運算,兩操作數(shù)及計算結(jié)果都不可超出無符號整形數(shù)據(jù)的范圍。主機(jī)和從機(jī)通過串行通信實現(xiàn)數(shù)據(jù)共享,可以分別進(jìn)行運算和顯示。 2 遠(yuǎn)程運算器組成 下面就遠(yuǎn)程運算器所涉及的各個部分分別進(jìn)行闡述。 2.1 紅外遙控器 紅外遙控器采用WD6122芯片。WD6122芯片是通用紅外遙控發(fā)射集成電路,采用CMOS工藝制造,最多可外接64個按鍵,并有三組雙重按鍵。其結(jié)構(gòu)框圖如圖2.1所示: 圖2.1 紅外遙控器 - 3 - 2.2 液晶屏顯示部分 顯示部分采用1602液晶屏,電路簡單,顯示簡潔。 1602有16個引腳,能夠顯示數(shù)字、字母和符號,顯示容量為16*2行。1602與單片機(jī)的連接圖如圖2.2所示: 圖2.2液晶屏與單片機(jī)連接圖 2.3 串行通信部分 通過對SM0和SM1進(jìn)行不同設(shè)置可實現(xiàn)四種通信方式,對應(yīng)關(guān)系如下表所示: 本系統(tǒng)采用了方式一。 3 程序設(shè)計流程圖 3.1 主機(jī)程序設(shè)計流程圖 3.1.1 主程序流程圖如下: - 4 - 初始化紅配置串口初始化等待紅外中斷開始while(1)外模塊寄存器液晶屏 圖3.1.1 流程圖如下: 3.1.2 紅外中斷程序EX1=0延時(確認(rèn)IR信號出現(xiàn))檢測鍵值val,如果是運算符,則將該值賦給op串口發(fā)送該鍵值Y數(shù)字鍵,Yf=0?NNy=y*10+valx=x*10+valY運算符,f=1N液晶屏顯示該運算符Y等號,f=0液晶屏顯示”=”N根據(jù)運算符op進(jìn)行相應(yīng)運算,結(jié)果存入z顯示z值Yclear鍵,清屏Nx=0,y=0EX1=1退出中斷 圖3.1.2 - 5 - 3.2 從機(jī)程序設(shè)計流程圖 3.2.1 主程序流程圖如下: 初始化液配置串口等待串口中斷開始while(1)晶屏寄存器 圖3.2.1 3.2.2 串口中斷程序流程圖如下: RI=0讀BUF的值存入valY數(shù)字鍵,Yf=0?NNy=y*10+valx=x*10+valY運算符,op=val,f=1N液晶屏顯示該運算符Y等號,f=0液晶屏顯示”=”N根據(jù)運算符op進(jìn)行相應(yīng)運算,結(jié)果存入z顯示z值Yclear鍵,清屏Nx=0,y=0退出中斷 圖3.2.2 - 6 - 結(jié) 論 隨著科學(xué)技術(shù)的不斷發(fā)展,在工業(yè)控制中,有很多時候需要在惡劣的環(huán)境中進(jìn)行各種數(shù)據(jù)的采集、運算和控制。遠(yuǎn)程運算器正好可以解決這一難題,人們從主機(jī)輸入數(shù)據(jù)或其他控制信息,主機(jī)通過傳信通信將數(shù)據(jù)發(fā)送給惡劣環(huán)境中的從機(jī),從機(jī)根據(jù)接收到的信息進(jìn)行各種運算或控制。因此,遠(yuǎn)程運算器的設(shè)計有著很好的實際應(yīng)用價值。 此外,通過遠(yuǎn)程運算器的設(shè)計,不僅加深了對單片機(jī)串行通信、液晶屏顯示、紅外解碼等知識的理解和掌握,而且對實際電路設(shè)計的步驟有了較為深入的理解。設(shè)計的基于單片機(jī)的遠(yuǎn)程運算器,是對單片機(jī)課程設(shè)計的探索和實踐,有一定指導(dǎo)意義。 - 7 - 參 考 文 獻(xiàn) 1 馬斌,韓忠華,王長濤,夏興華.單片機(jī)原理及應(yīng)用.北京:人民郵電出版社,2009. 2 譚浩強(qiáng). C程序設(shè)計. 北京: 清華大學(xué)出版社, 2005. 3 閻石.數(shù)字電子技術(shù)基礎(chǔ).北京:高等教育出版社,2006. 4 邱關(guān)源.電路.北京:高等教育出版社,2006. 5 傅豐林,陳健.低頻電子線路.北京:高等教育出版社,2008. - 8 - 附錄A 程序清單 1 主機(jī)程序: #include #include #define uchar unsigned char #define uint unsigned int uchar IRCOM7; uint x=0,y=0,z=0; uchar op,f,val,pos=1,res5=0,0,0,0,0; sbit IRIN = P33; /紅外接收器數(shù)據(jù)線 sbit E=P27; /1602使能引腳 sbit RW=P26; /1602讀寫引腳 sbit RS=P25; /1602數(shù)據(jù)/命令選擇引腳 /* * 名稱 : void send(unsigned char a) * 功能 : 通信 */ void send(unsigned char a) SBUF=a; while(TI=0); TI=0; void delay(unsigned char x) /x*0.14MS unsigned char i; while(x-) for (i = 0; i13; i+) /*/ void delay1(int ms) unsigned char y; while(ms-) for(y = 0; y250; y+) _nop_(); _nop_(); _nop_(); _nop_(); - 9 - /* * 名稱 : delay() * 功能 : 延時,延時時間大概為140US。 */ void Delay2() int i,j; for(i=0; i=10; i+) for(j=0; j=2; j+) ; /* * 名稱 : enable(uchar del) * 功能 : 1602命令函數(shù) */ void enable(uchar del) P0 = del; RS = 0; RW = 0; E = 0; Delay2(); E = 1; Delay2(); /* * 名稱 : write(uchar del) * 功能 : 1602寫數(shù)據(jù)函數(shù) */ void write(uchar del) P0 = del; RS = 1; RW = 0; E = 0; Delay2(); E = 1; Delay2(); /* * 名稱 : L1602_init() * 功能 : 1602初始化,請參考1602的資料 */ void L1602_init(void) enable(0x01); enable(0x38); enable(0x0c); enable(0x06); enable(0xd0); - 10 - /* * 名稱 : L1602_char(uchar hang,uchar lie,char sign) * 功能 : 改變液晶中某位的值 */ void L1602_char(uchar hang,uchar lie,char sign) uchar a; if(hang = 1) a = 0x80; if(hang = 2) a = 0xc0; a = a + lie - 1; enable(a); write(sign); /*/ main() IE = 0x84; /允許總中斷中斷,使能 INT1 外部中斷 IT1 = 0; /觸發(fā)方式為脈沖負(fù)邊沿觸發(fā) IRIN=1; /I/O口初始化 TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; ES=1; SM0=0; SM1=1; delay1(10); /延時 L1602_init(); /初始化LCD while(1) ; /end main /*/ void IR_IN() interrupt 2 using 0 unsigned char j,k,N=0,i; EX1 = 0; delay(15); if (IRIN=1) EX1 =1; return; /確認(rèn)IR信號出現(xiàn) while (!IRIN) /等IR變?yōu)楦唠娖剑^9ms的前導(dǎo)低電平信號。 delay(1); for (j=0;j4;j+) /收集四組數(shù)據(jù) for (k=0;k=30) EX1=1; return; /0.14ms計數(shù)過長自動離開。 /高電平計數(shù)完畢 IRCOMj=IRCOMj 1; /數(shù)據(jù)最高位補“0” if (N=8) IRCOMj = IRCOMj | 0x80; /數(shù)據(jù)最高位補“1” N=0; /end for k /end for j if (IRCOM2!=IRCOM3) EX1=1; return; IRCOM5=IRCOM2 & 0x0F; /取鍵碼的低四位 IRCOM6=IRCOM2 4; /右移4次,高四位變?yōu)榈退奈?if(IRCOM6=0)&(IRCOM5=13) val=0; else if(IRCOM6=0)&(IRCOM5=12) val=1; else if(IRCOM6=1)&(IRCOM5=8) val=2; else if(IRCOM6=5)&(IRCOM5=14) val=3; else if(IRCOM6=0)&(IRCOM5=8) val=4; else if(IRCOM6=1)&(IRCOM5=12) val=5; else if(IRCOM6=5)&(IRCOM5=10) val=6; else if(IRCOM6=4)&(IRCOM5=2) val=7; else if(IRCOM6=5)&(IRCOM5=2) val=8; else if(IRCOM6=4)&(IRCOM5=10) val=9; else if(IRCOM6=4)&(IRCOM5=0) val=10;op=10; else if(IRCOM6=4)&(IRCOM5=4) val=11;op=11; else if(IRCOM6=1)&(IRCOM5=5) val=12;op=12; else if(IRCOM6=0)&(IRCOM5=7) val=14;op=14; else if(IRCOM6=4)&(IRCOM5=3) val=13; else if(IRCOM6=0)&(IRCOM5=9) val=15; send(val); if(val=15) L1602_init(); - 12 - pos=1; x=0; y=0; else if(val=13) L1602_char(1,pos,=); pos+; f=0; if(op=10) z=x+y; if(op=11) z=x-y; if(op=12) z=x*y; if(op=14) z=x/y; res4=z%10+0x30; res3=z%100/10+0x30; res2=z%1000/100+0x30; res1=z%10000/1000+0x30; res0=z/10000+0x30; for(i=0;i9) f=1; if(val=10) L1602_char(1,pos,+); if(val=11) L1602_char(1,pos,-); if(val=12) L1602_char(1,pos,*); if(val=14) L1602_char(1,pos,/); pos+; else if(f=0) x=x*10+val; else y=y*10+val; val+=0x30; L1602_char(1,pos,val); pos+; EX1 = 1; - 13 - 2 從機(jī)程序: #include #define uchar unsigned char #define uint unsigned int sbit E=P27; /1602使能引腳 sbit RW=P26; /1602讀寫引腳 sbit RS=P25; /1602數(shù)據(jù)/命令選擇引腳 uint x=0,y=0,z=0; uchar op,f,val,pos=1,res5=0,0,0,0,0,i; /* * 名稱 : delay() * 功能 : 延時,延時時間大概為140US。 */ void delay() int i,j; for(i=0; i=100; i+) for(j=0; j=20; j+) ; /* * 名稱 : enable(uchar del) * 功能 : 1602命令函數(shù) */ void enable(uchar del) P0 = del; RS = 0; RW = 0; E = 0; delay(); E = 1; delay(); /* * 名稱 : write(uchar del) * 功能 : 1602寫數(shù)據(jù)函數(shù) */ void write(uchar del) P0 = del; RS = 1; RW = 0; E = 0; delay(); E = 1; delay(); - 14 - /* * 名稱 : L1602_init() * 功能 : 1602初始化,請參考1602的資料 */ void L1602_init(void) enable(0x01); enable(0x38); enable(0x0c); enable(0x06); enable(0xd0); /* * 名稱 : L1602_char(uchar hang,uchar lie,char sign) * 功能 : 改變液晶中某位的值 */ void L1602_char(uchar hang,uchar l

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論