單片機(jī)課程設(shè)計(jì) 計(jì)算器課件_第1頁
單片機(jī)課程設(shè)計(jì) 計(jì)算器課件_第2頁
單片機(jī)課程設(shè)計(jì) 計(jì)算器課件_第3頁
單片機(jī)課程設(shè)計(jì) 計(jì)算器課件_第4頁
單片機(jī)課程設(shè)計(jì) 計(jì)算器課件_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、目錄第一章、概述11.1單片機(jī)及其特點(diǎn)概述11.2設(shè)計(jì)內(nèi)容1第二章、設(shè)計(jì)思路22.1 設(shè)計(jì)方案22.2 基本原理2第三章、硬件電路設(shè)計(jì)33.1.振蕩電路設(shè)計(jì)33.2.顯示電路設(shè)計(jì)43.3.按鍵顯示電路設(shè)計(jì)4第四章、軟件設(shè)計(jì)64.1總體概述64.2 主程序的設(shè)計(jì)64.3 液晶顯示模塊74.4 鍵盤掃描模塊8第五章、仿真10第六章、程序清單13第七章、整體電路圖35第八章、體會(huì)36第1章 、概述1.1單片機(jī)及其特點(diǎn)概述單片機(jī)是指將CPU,存儲(chǔ)器,定時(shí)器/計(jì)數(shù)器,輸入/輸出接口電路,中斷,串行通信接口等主要計(jì)算機(jī)部件集成在一塊大規(guī)模集成電路芯片上,組成單片微型計(jì)算機(jī)。它具有集成度高,功能強(qiáng),可靠性高

2、,體積小,功耗低,使用方便,價(jià)格低廉等特點(diǎn)。在實(shí)時(shí)控制系統(tǒng),智能儀器儀表,家用電器,網(wǎng)絡(luò)通信等領(lǐng)域應(yīng)用比較廣泛。 隨著單片機(jī)的問世,更進(jìn)一步推動(dòng)了計(jì)算機(jī)的發(fā)展,標(biāo)志著計(jì)算機(jī)系統(tǒng)兩大分支的正式形成,即通用計(jì)算機(jī)系統(tǒng)和嵌入式計(jì)算機(jī)系統(tǒng),前者主要以發(fā)展海量,高速數(shù)值計(jì)算為趨勢(shì),后者主要實(shí)現(xiàn)面向?qū)ο蟮膶?shí)時(shí)控制。他是計(jì)算機(jī)技術(shù)的得到了更為廣泛的應(yīng)用。1.2設(shè)計(jì)內(nèi)容 利用單片機(jī),設(shè)計(jì)一個(gè)簡(jiǎn)易計(jì)算器,內(nèi)容包括:能夠?qū)崿F(xiàn)加、減、乘、除、平方根等基本功能;能夠在0-65535范圍之內(nèi)計(jì)算任意次方根、任意次冪;“=“號(hào)加任意數(shù)字鍵清除屏幕內(nèi)容。第二章、設(shè)計(jì)思路2.1 設(shè)計(jì)方案根據(jù)設(shè)計(jì)內(nèi)容逐個(gè)實(shí)現(xiàn)其功能。首先,計(jì)算

3、器的基本功能是加減乘除等運(yùn)算,需要確定兩個(gè)操作數(shù)和運(yùn)算符。其次就是顯示部分,本次設(shè)計(jì)使用1602液晶顯示器。本次設(shè)計(jì)將兩個(gè)操作數(shù)和運(yùn)算符顯示在1602液晶的第一行,將結(jié)果顯示在第二行。所以設(shè)計(jì)的思路便是:首先寫入第一個(gè)操作數(shù)并保存該數(shù),其次寫入運(yùn)算符并標(biāo)記該運(yùn)算符,再其次寫入第二個(gè)操作數(shù)并保存,然后將結(jié)果顯示在1602液晶的第二行。2.2 基本原理 2.2.1液晶顯示用液晶顯示時(shí)間的方法就是將事件的各個(gè)位寫入到液晶的控制器內(nèi)部帶有的80*8位的RAM緩沖區(qū)。每次時(shí)間改變之后都要重新寫入。1602液晶顯示器的課件部分只有上下兩行,每行16個(gè)字節(jié)。第三章、硬件電路設(shè)計(jì)3.1.振蕩電路設(shè)計(jì) 在AT8

4、9C51單片機(jī)引腳XTAL1和XTAL2分別是反向放大器的輸入端和輸出端,通常,經(jīng)由片外晶體振蕩器或陶瓷諧振器與兩個(gè)相匹配的電容構(gòu)成一個(gè)自激振蕩電路,為單片機(jī)提供時(shí)鐘電源。 圖3-1 振蕩電路3.2.顯示電路設(shè)計(jì) 前面簡(jiǎn)單介紹了1602液晶顯示器的信息,現(xiàn)在介紹其工作原理。它是通過想液晶內(nèi)部自帶打RAM寫數(shù)據(jù)來顯示時(shí)間的。在這之前我們要先對(duì)它內(nèi)部進(jìn)行一些設(shè)置。如開關(guān),光標(biāo),是否移動(dòng),是否清頻,還有數(shù)據(jù)寫在何處都要設(shè)置。圖3-2顯示電路 3.3.按鍵電路設(shè)計(jì) 鍵盤有兩種類型,一種是獨(dú)立鍵盤,一種是矩陣鍵盤 本次設(shè)計(jì)使用了一個(gè)矩陣鍵盤和四個(gè)是獨(dú)立鍵盤,分別選用P3口和P2.2P2.5引腳作輸入引腳

5、,作為輸入。單鍵盤不按下時(shí),引腳為高電平,所以在讀取引腳電平是就判斷引腳為高電平還是低電平。若為低電平則表示按鍵按下。 圖3-3 按鍵電路第四章、軟件設(shè)計(jì)4.1總體概述依照系統(tǒng)程序劃分,將設(shè)計(jì)劃分為2個(gè)模塊,如圖4-1所示液晶顯示模塊鍵盤掃描模塊主程序模塊圖4-1設(shè)計(jì)方框圖4.2 主程序的設(shè)計(jì)主程序的內(nèi)容包括,單片機(jī)初始化,相關(guān)元器件的初始化和一些子程序的調(diào)用。定義三個(gè)個(gè)全局變量和一個(gè)標(biāo)示符,三個(gè)變量分別用于保存兩個(gè)操作數(shù)和計(jì)算結(jié)果,標(biāo)示符用于保存運(yùn)算符,調(diào)用計(jì)算函數(shù)計(jì)算結(jié)果并顯示。開始初始化液晶1602初始化數(shù)據(jù)存儲(chǔ)單元 掃描鍵盤并保存數(shù)據(jù)子程序調(diào)用圖4-2 主程序流程圖4.3液晶顯示模塊4

6、.3.1設(shè)計(jì)思路該模塊是通過將變量寫入液晶的內(nèi)部RAM中顯示出來,單片機(jī)將操作數(shù)1,操作數(shù)2,計(jì)算結(jié)果從P1口輸出,P1口接液晶的輸入端,液晶將接受的數(shù)據(jù)進(jìn)行處理,并顯示出來。當(dāng)主程序再次調(diào)用該模塊時(shí),重新執(zhí)行該過程。4.3.2流程圖接收數(shù)據(jù)寫指令 寫數(shù)據(jù) 圖4-3 顯示模塊流程圖4.4鍵盤掃描模塊 4.4.1設(shè)計(jì)思路 通過判斷鍵盤是否按下,若按下,則對(duì)相關(guān)變量進(jìn)行處理。處理完后,當(dāng)程序再次調(diào)用該模塊時(shí),再重頭開始。4.4.2流程圖判斷鍵盤是否按下 若沒按下 若按下 哪個(gè)鍵按下退出該模塊處理相關(guān)變量圖4-4 調(diào)時(shí)調(diào)鬧鐘流程圖 第五章、仿真編寫好程序后,在PROTUES仿真軟件上進(jìn)行仿真和調(diào)試,

7、通過調(diào)試,解決程序上考慮的不足,通過仿真,我們可以檢驗(yàn)是否達(dá)到預(yù)期的結(jié)果。在調(diào)試中,主要出現(xiàn)以下幾個(gè)問題。5.1錯(cuò)誤1:當(dāng)鍵盤上輸入7+2時(shí),按下等于鍵,結(jié)果沒有顯示在液晶第二行如圖5-1所示圖5-1液晶顯示問題原因: 液晶在每次寫入之前應(yīng)寫入你所希望出現(xiàn)的位置的地址,若不寫地址,則會(huì)出現(xiàn)圖5-1的情況。解決方案: 在寫結(jié)果之前,先寫入地址。解決后的顯示: 圖5-1-1 正確顯示5.2 錯(cuò)誤2: 在計(jì)算任意次冪的時(shí)候,當(dāng)輸入54時(shí),結(jié)果如圖5-2所 圖5-1任意次冪計(jì)算問題原因:計(jì)算任意次冪時(shí),使用for循環(huán)out=1;for(b;b0;b-)out=out*10;其中out為計(jì)算結(jié)果,b為指

8、數(shù)。應(yīng)當(dāng)修改為out=1;for(b;b0;b-)out=out*a;其中out為計(jì)算結(jié)果,b為指數(shù),a為底。解決后的結(jié)果: 圖5-2-1 正確結(jié)果5.3 錯(cuò)誤3:案件在按下之后,數(shù)值并不是按預(yù)想的變化。原因分析:沒有消抖,只有加消抖函數(shù),才能使數(shù)據(jù)準(zhǔn)確變化。第六章、程序清單#include#include#define uint unsigned int#define uchar unsigned char#define ulong unsigned longsbit rs=P20;sbit en=P21;sbit ql=P22;sbit sqr=P23;/平方根sbit xy=P24;/x

9、的y次方sbit fg=P25;uchar flag,s,ws,ws1,xs,eq;/ws1,ws表示有幾位小數(shù),eq表示等于鍵是否按下double sum,aa;long double out,out1,k;signed long hh,ll;void delay(uint z)uint x,y;for(x=0;xz;x+)for(y=0;y0;ws1-)a=a/(double)10;for(ws;ws0;ws-)b=b/(double)10;if(flag=0)out=b;if(flag=1)out=a+b;else if(flag=2) out=a-b;if(out0;b-)out=ou

10、t*a;elseout=pow(a,b);/計(jì)算a的b次方else if(7=flag)out=pow(a,(double)1/b);hh=(signed long)out;temp=(double)hh;if(0=d)ll=(signed long)(out-hh)*10*10*10*10*10*10);else if(d!=0|flag=6)ll=(signed long)(out*10*10*10*10*10*10)%1000000;if(temp=out)ll=0;write_com(0x80+0x40+15);if(ll!=0)for(p=6;p0;p-)f=ll%10;if(0!=

11、f|1=bz)write_data(0x30+f); bz=1;ll=ll/10;write_data(0x20+0x0e);for(p=0;p10;p+)f=hh%10;write_data(0x30+f);hh=hh/10;if(hh=0)break;if(k0)write_data(-);write_com(0x06);void qingling()flag=0;s=0;sum=0;aa=0;out=0;out1=0;k=0;ws1=0;ws=0;eq=0;write_com(0x01);write_com(0x80);write_com(0x0f);void init()flag=0;

12、write_com(0x38);write_com(0x0f);write_com(0x06);write_com(0x01);write_com(0x80);void scan()uchar temp;P3=0xfe;temp=P3;temp=temp&0xfe;if(temp!=0xfe)delay(5);temp=P3;temp=temp&0xfe;if(temp!=0xfe)switch(temp)case 0xee:if(1=eq) qingling();break;if(xs=0)&(sum=0)&(s!=0)&(flag!=6)&(flag!=7)write_com(0x04);

13、write_data( );write_com(0x06);s+;if(s8)write_data(0x30+1);sum=sum*10+1;if(1=xs)ws+;break;case 0xde:if(1=eq) qingling();break;if(xs=0)&(sum=0)&(s!=0)&(flag!=6)&(flag!=7)write_com(0x04);write_data( );write_com(0x06);s+;if(s8)write_data(0x30+2);sum=sum*10+2;if(1=xs)ws+;break;case 0xbe:if(1=eq) qingling

14、();break;if(xs=0)&(sum=0)&(s!=0)&(flag!=6)&(flag!=7)write_com(0x04);write_data( );write_com(0x06);s+;if(s8)write_data(0x30+3);sum=sum*10+3;if(1=xs)ws+;break;case 0x7e:if(1=eq) qingling();break;if(flag=0)aa=sum;sum=0;ws1=ws;ws=0;write_data(+);s=0;xs=0;flag=1;/加函數(shù) break; while(temp!=0xfe)temp=P3;P3=0x

15、fd;temp=P3;temp=temp&0xfd;if(temp!=0xfd)delay(5);temp=P3;temp=temp&0xfd;if(temp!=0xfd)switch(temp)case 0xed:if(1=eq) qingling();break;if(xs=0)&(sum=0)&(s!=0)&(flag!=6)&(flag!=7)write_com(0x04);write_data( );write_com(0x06);s+;if(s8)write_data(0x30+4);sum=sum*10+4;if(1=xs)ws+;break;case 0xdd:if(1=eq)

16、 qingling();break;if(xs=0)&(sum=0)&(s!=0)&(flag!=6)&(flag!=7)write_com(0x04);write_data( );write_com(0x06);s+;if(s8)write_data(0x30+5);sum=sum*10+5;if(1=xs)ws+;break;case 0xbd:if(1=eq) qingling();break;if(xs=0)&(sum=0)&(s!=0)&(flag!=6)&(flag!=7)write_com(0x04);write_data( );write_com(0x06);s+;if(s8)

17、write_data(0x30+6);sum=sum*10+6;if(1=xs)ws+;break;case 0x7d:if(1=eq) qingling();break;if(flag=0)aa=sum;sum=0;ws1=ws;ws=0;write_data(-);s=0;xs=0;flag=2;/減函數(shù)break; while(temp!=0xfd)temp=P3;P3=0xfb;temp=P3;temp=temp&0xfb;if(temp!=0xfb)delay(5);temp=P3;temp=temp&0xfb;if(temp!=0xfb)switch(temp)case 0xeb:

18、if(1=eq) qingling();break;if(xs=0)&(sum=0)&(s!=0)&(flag!=6)&(flag!=7)write_com(0x04);write_data( );write_com(0x06);s+;if(s8)write_data(0x30+7);sum=sum*10+7;if(1=xs)ws+;break;case 0xdb:if(1=eq) qingling();break;if(xs=0)&(sum=0)&(s!=0)&(flag!=6)&(flag!=7)write_com(0x04);write_data( );write_com(0x06);s

19、+;if(s8)write_data(0x30+8);sum=sum*10+8;if(1=xs)ws+;break;case 0xbb:if(1=eq) qingling();break;if(xs=0)&(sum=0)&(s!=0)&(flag!=6)&(flag!=7)write_com(0x04);write_data( );write_com(0x06);s+;if(s8)write_data(0x30+9);sum=sum*10+9;if(1=xs)ws+;break;case 0x7b:if(1=eq) qingling();break;if(flag=0)aa=sum;sum=0

20、;ws1=ws;ws=0;write_data(*);s=0;xs=0;flag=3;/乘函數(shù) break; while(temp!=0xfb)temp=P3;P3=0xf7;temp=P3;temp=temp&0xf7;if(temp!=0xf7)delay(5);temp=P3;temp=temp&0xf7;if(temp!=0xf7)switch(temp)case 0xe7:if(1=eq) qingling();break;if(xs=0)&(sum=0)&(s!=0)&(flag!=6)&(flag!=7)write_com(0x04);write_data( );write_co

21、m(0x06);s+;if(s8)write_data(0x30+0);sum=sum*10+0;if(1=xs)ws+;break;case 0xd7:if(1!=xs)if(1=eq) qingling();break;write_data(0x20+0x0e);xs=1;/小數(shù)點(diǎn)s=0;break;case 0xb7:if(1=eq) qingling();break;equalfun(aa,sum);/等于函數(shù) flag=0;xs=0;eq=1;break;case 0x77:if(1=eq) qingling();break;if(flag=0)aa=sum;sum=0;ws1=ws

22、;ws=0;write_data(/);s=0;xs=0;flag=4;/除函數(shù) break; while(temp!=0xf7)temp=P3;if(ql=0)delay(5);if(ql=0)qingling();while(!ql);if(sqr=0)delay(5);if(sqr=0)while(!sqr);if(1=eq)qingling();return;if(flag=0)flag=5;aa=sum;sum=0;ws1=ws;equalfun(aa,sum);flag=0;xs=0;eq=1;if(xy=0)delay(5);if(xy=0)while(!xy);if(1=eq)qingling();return;if(flag=0)write_data(0x5e);aa=sum;sum=0;ws1=ws;ws=0;flag=6;xs=0;if(fg=0)delay(5);if(fg=0)while(!fg);if(1=eq)qingling();return;if(flag=0)write_data(0x20);write_data

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論