基于C51單片機的簡易計算器設(shè)計_第1頁
基于C51單片機的簡易計算器設(shè)計_第2頁
基于C51單片機的簡易計算器設(shè)計_第3頁
基于C51單片機的簡易計算器設(shè)計_第4頁
基于C51單片機的簡易計算器設(shè)計_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、基于單片機的簡易設(shè)計原理 專業(yè):通信專業(yè) 班級:通信1班 姓名:劉民學(xué)號:1304041127 摘要:按下鍵盤,通過鍵盤掃描程序,在LCD液晶顯示屏上顯示按鍵的操作過程,最終顯示計算結(jié)果,實現(xiàn)計算器的基本功能。本文詳細(xì)介紹LCD顯示屏、矩陣鍵盤與C51單片機接口的應(yīng)用,并介紹如何通過C51單片機實現(xiàn)計算器的算法。關(guān)鍵字:C51單片機,鍵盤,LCD液晶,計算器一、設(shè)計任務(wù):本次實驗是要以51系列單片機為核心實現(xiàn)一個簡易計算器,它的結(jié)構(gòu)簡單,外部主要由4*4矩陣鍵盤和一個液晶顯示屏構(gòu)成,內(nèi)部由一塊STC90C51單片機構(gòu)成,通過軟件編程可實現(xiàn)簡單加、減、乘、除、清除結(jié)果。實現(xiàn)對計算器的設(shè)計,具體設(shè)

2、計如下:1、采用6位顯示,最大顯示值為“999999”,設(shè)計16個按鍵的矩陣鍵盤,按鍵包括09、+、-、*、/、=、C。2、加減法做四字節(jié)運算;乘法做雙字節(jié)運算;除法被除數(shù)為四字節(jié),除數(shù)為兩字節(jié)。3、當(dāng)運算結(jié)果超出顯示范圍時,顯示ERROR!。4、上述運算輸入值均為整數(shù),當(dāng)結(jié)果帶有小數(shù)時,可以采用四舍五入方式處理,也可以帶小數(shù)顯示。二 、方案論證經(jīng)分析,計算器電路包括三個部分:顯示電路、4*4鍵掃描電路、單片機微控制電路。具體如下:1) LCD顯示電路 LCD1602作為一個成熟的產(chǎn)品,使用簡單,模式固定,便于移植到各種類型的程序,但是初學(xué)者往往要注意結(jié)合LCD本身的時序圖來完善初始化程序。又

3、以其微功耗、體積小、顯示內(nèi)容豐富、超薄輕巧的諸多優(yōu)點,故采用LCD.2) 4*4鍵盤掃描電路(中斷式,掃描式,反轉(zhuǎn)式)用戶設(shè)計行列鍵盤接口,一般常采用3 種方法讀取鍵值。一種是中斷式,外兩種是掃描法和反轉(zhuǎn)法。 掃描法:對鍵盤上的某一行送低電平,其他行及列全為高電平,然后讀取列值,檢查各列線點評的變化,如果某列線電平為低電平,就可以確定此行此列交叉點處的按鍵被按下,采用延時去抖動。 ) 單片機微控制電路微控制電路就是以AT89C51為核心的控制核心,主要注意晶振電路的接法和復(fù)位電路的接法。三 硬件電路的設(shè)計3.1 硬件設(shè)計電路框圖LCD顯示晶振電路 4*4鍵盤51系列單片機系統(tǒng)復(fù)位電路線路原理框

4、圖3.2、系統(tǒng)模塊圖: 四、鍵盤接口電路: 計算器輸入數(shù)字和其他功能按鍵要用到很多按鍵,矩陣鍵盤采用四條I/O 線作為行線,四條I/O 線作為列線組成鍵盤,在行線和列線的每個交叉點上設(shè)置一個按鍵。這樣鍵盤上按鍵的個數(shù)就為4×4個。這種行列式鍵盤結(jié)構(gòu)能有效地提高單片機系統(tǒng)中I/O 口的利用率。矩陣鍵盤的工作原理:計算器的鍵盤布局如圖1所示:一般有16個鍵組成,在單片機中正好可以用一個P口實現(xiàn)16個按鍵功能,這種形式在單片機系統(tǒng)中也最常用。 圖2 鍵盤接口電路圖 五、LCD顯示 LCD顯示器介紹有字符型液晶顯示模塊(SMC1602A)和點陣式液晶顯示模塊(TCM12232A、TCM128

5、64N)下面以SMC1602A為例介紹字符型液晶顯示模塊的功能及應(yīng)用。(一)、字符型液晶顯示模塊的引腳及功能引腳符號功能1VSS電源地2VDD電源正極3Ve0對比調(diào)整電壓4RS0輸入指令,1輸入數(shù)據(jù)5R/W0寫入指令或數(shù)據(jù),1讀取信息6E使能信號,1讀取數(shù)據(jù),下降沿執(zhí)行指令714DB0DB7數(shù)據(jù)輸入口15BLA背光電源正極16BLK背光電源負(fù)極 在1602液晶內(nèi)部有字模發(fā)生存儲器CGROM及顯示數(shù)據(jù)存儲器DDRAM。其中,字模發(fā)生存儲器CGROM主要用來存儲192個常用字符的字模編碼,包含標(biāo)準(zhǔn)的ASCII碼。DDRAM是顯示數(shù)據(jù)存儲器共80個字節(jié),分別對應(yīng)1602液晶顯示器的兩行。第一行地址為

6、0X00H0X27H,共40個字節(jié);第二行地址為0X40H67H,共40個字節(jié)。 RAM 地址映像如下圖:(二):字符型液晶顯示模塊的控制操作 RSR/WEDB0DB7011讀出狀態(tài)字111讀出數(shù)據(jù)在1602讀回的狀態(tài)字中,D7位為狀態(tài)BF,當(dāng)BF=1時表示忙碌,此時不能進行寫操作。當(dāng)BF=0時表示狀態(tài)為空閑,可以進行寫操作。 (2)寫操作: RSR/WEDB0DB700下降沿輸入指令10下降沿輸入數(shù)據(jù)(3) 初始化命令字: a.工作方式設(shè)置指令D7D6D5D4D3D2D1D0001DLNF00DL設(shè)置與MCU的接口方式。DL=1表示數(shù)據(jù)寬度為8位,DB0DB7有效。DL=0表示數(shù)據(jù)寬度為4位

7、,DB4DB7有效。N設(shè)置顯示字符行數(shù)。N=0表示顯示一行字符,N=1表示顯示兩行字符。F設(shè)置顯示字符字體,一般為0。F=0表示顯示5X8點陣字體,F(xiàn)=1表示顯示5X11點整字體。b.顯示狀態(tài)設(shè)置D7D6D5D4D3D2D1D000001DCBD為畫面顯示狀態(tài)位。D=1表示顯示功能開,D=0表示顯示功能關(guān)。C為光標(biāo)顯示狀態(tài)位。C=1表示有光標(biāo),C=0表示無光標(biāo)。B閃爍顯示狀態(tài)位。B=1表示光標(biāo)閃爍,B=0表示光標(biāo)不閃爍。 c.輸入方式設(shè)置指令D7D6D5D4D3D2D1D0000001I/DS該指令的操作主要是設(shè)置顯示字符的輸入方式。即在操作數(shù)據(jù)寫入/讀出后,AC數(shù)據(jù)地址指針的修改方式。I/D

8、=1時,AC為自動加一計數(shù)器,I/D=0時,AC為自動減一計數(shù)器。S設(shè)置寫入字符時是否允許畫面滾動。S=1時允許畫面/光標(biāo)滾動,S=0時禁止畫面/光標(biāo)滾動。d.光標(biāo)或畫面滾動設(shè)置指令D7D6D5D4D3D2D1D00001S/CR/L00S/C滾動對象選擇位。S/C=1時畫面滾動,S/C=0時光標(biāo)滾動。R/L滾動方向選擇位。R/L=1時向右滾動,R/L=0時向左滾動。e.清屏指令D7D6D5D4D3D2D1D000000001執(zhí)行清屏指令后,DDRAM內(nèi)容為空白的ASCII碼20H,光標(biāo)歸位在左上方,地址計數(shù)器AC=0.f.光標(biāo)復(fù)位指令D7D6D5D4D3D2D1D000000010執(zhí)行光標(biāo)復(fù)

9、位指令后,AC=0,DDRAM中的值不變。g.DDRAM地址設(shè)置指令D7D6D5D4D3D2D1D01A6A5A4A3A2A1A0當(dāng)需要向某一地址中寫入數(shù)據(jù)時,先寫入地址,再寫入數(shù)據(jù)。開始程序圖程序初始化是“=”?Y數(shù)字鍵鍵碼功能讀鍵碼有鍵輸入LCD顯示等待數(shù)值輸出結(jié)果送入緩存保存結(jié)果,或執(zhí)行功能保存狀態(tài)執(zhí)行計算NY功能鍵NY輸入緩存輸入鍵值五、運算模塊(單片機控制): MCS-51 單片機是在一塊芯片中集成了CPU、RAM、ROM、定時器/計數(shù)器和多功能I/O等一臺計算機所需要的基本功能部件。如果按功能劃分,它由如下功能部件組成,即微處理器(CPU)、數(shù)據(jù)存儲器(RAM)、程序存儲器(ROM

10、/EPROM)、并行I/O 口、串行口、定時器/計數(shù)器、中斷系統(tǒng)及特殊功能寄存器(SFR)。單片機是靠程序運行的,并且可以修改。通過不同的程序?qū)崿F(xiàn)不同的功能,尤其是特殊的獨特的一些功能,通過使用單片機編寫的程序可以實現(xiàn)高智能,高效率,以及高可靠性!因此我們采用單片機作為計算器的主要功能部件,可以很快地實現(xiàn)運算功能。六:設(shè)計心得、體會、總結(jié)我的題目簡易計算器的設(shè)計,對于我們這些實踐中的新手來說,這是一次考驗,怎樣才能找到課堂所學(xué)與實際應(yīng)用的最佳結(jié)合點?怎樣讓自己的計劃更具有程序性,而不會忙無一用?這都需要我們所要考慮和努力的。這次設(shè)計我學(xué)到了很多,在設(shè)計過程中怎樣去克服心理上的不良情緒。不僅鞏固

11、了所學(xué)知識,而且學(xué)到了很多書上學(xué)不到的知識,掌握了一種系統(tǒng)的學(xué)習(xí)方法,可以進行一些簡單的編程。這次設(shè)計使我懂得了理論與實際結(jié)合很重要,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,從而提高自己的實際動手能力和獨立思考的能力,同時在設(shè)計過程中發(fā)現(xiàn)自己的不足,加強鞏固,有利于后續(xù)的單片機考試。調(diào)試過程中也遇到了很多問題,例如,液晶顯示明明定義了兩行顯示,但實際中卻只有一行,最后竟查資料發(fā)現(xiàn),液晶內(nèi)部自檢時間比單片機慢,需要延時多定義,避免未完成自檢就執(zhí)行指。主要參考文獻單片機原理與接口技術(shù),李升主編,北京大學(xué)出版社,2011年7月單片機原理及應(yīng)用實驗指導(dǎo)書,屈波等編,2012年2月25日微處理器綜合實訓(xùn)系統(tǒng)模塊化設(shè)計

12、戴建 編 2012年2月單片機原理及應(yīng)用,趙德安等編,機械工業(yè)出版社,2009年 附原理圖附:硬件設(shè)計電路的元件清單器件名稱數(shù)量AT89C511按鍵174k7x424k7x91電容22uF1LCD16021晶振12MHz1電容30pF2電位器1031附源代碼/*P1.0P1.3接行*P1.4P1.7接列. * P0接LCD*/ #include<reg52.h> #define uchar unsigned char uchar code dis1="!rorre"/后面使用倒序顯示 uchar code dis2="!rorre htam"

13、 sbit busy=P07; sbit RS=P22; sbit RW=P21; sbit EN=P20; char i,j,temp,num; long a,b,c; uchar flag,fuhao; uchar code table= 7,8,9,0, 4,5,6,0, 1,2,3,0, 0,0,0,0 ; uchar code table1= 7,8,9,0x2f-0x30, 4,5,6,0x2a-0x30, 0x01-0x30,0,0x3d-0x30,0x2b-0x30 ;void delay(uchar z) /延時 uchar x,y; for(x=z;x>0;x-) f

14、or(y=0;y<125;y+); void ready() /忙檢測 do P0=0xff; RS=0; RW=1; EN=0; delay(5); EN=1; while(busy=1); void write_com(uchar com) /寫指令 P0=com; RS=0; RW=0; EN=0; ready(); EN=1; delay(10); void write_data(uchar m) /寫數(shù)據(jù) P0=m; RS=1; RW=0; EN=0; ready(); EN=1; void inital() /初始化 EN=1; write_com(0x38); /【設(shè)置LC

15、D為16X2顯示,5X7點陣,八位數(shù)據(jù)接口】 delay(10); write_com(0x38); /【LCD內(nèi)檢較單片機慢,為防止未完成內(nèi)檢就執(zhí)行指令,延遲,再寫指令以完成內(nèi)檢】 write_com(0x0c); /無光標(biāo) write_com(0x06); /光標(biāo)后移 write_com(0x80); write_com(0x01); /清屏 i=0; j=0; a=0; /第一個參與運算的數(shù) b=0; /第二個參與運算的數(shù) c=0; flag=0; /flag表示是否有符號鍵按下 fuhao=0; /fuhao表征按下的是哪個符號 void keyscan() /鍵盤掃描程序 P1=0x

16、fe; /將某一行置低,列全為高 if(P1!=0xfe) /判斷是否有鍵按下 delay(20); /延時去抖動 if(P1!=0xfe) /重新確認(rèn) temp=P1&0xf0; /【行全置低,判斷列是否變化】 switch(temp) case 0xe0: num=0; break; case 0xd0: num=1; break; case 0xb0: num=2; break; case 0x70: num=3; break; while(P1!=0xfe); if(num=0|num=1|num=2) /如果按下的是'7','8'或'9

17、 if(j=1) /確認(rèn)一次計算完畢,清屏 write_com(0x01); j=0; if(flag=0) /沒有按過符號鍵 a=a*10+tablenum; else /如果按過符號鍵 b=b*10+tablenum; else /如果按下的是'/' flag=1; fuhao=4; i=table1num; write_data(0x30+i); P1=0xfd; if(P1!=0xfd) delay(20); if(P1!=0xfd) temp=P1&0xf0; switch(temp) case 0xe0: num=4 ; break; case 0xd0:

18、num=5; break; case 0xb0: num=6; break; case 0x70: num=7; break; while(P1!=0xfd); if(num=4|num=5|num=6) /如果按下是'4','5'或'6 if(j=1) write_com(0x01); j=0; if(flag=0) a=a*10+tablenum; else b=b*10+tablenum; else flag=1; fuhao=3; i=table1num; write_data(0x30+i); P1=0xfb; if(P1!=0xfb) del

19、ay(20); if(P1!=0xfb) temp=P1&0xf0; switch(temp) case 0xe0: num=8; break; case 0xd0: num=9; break; case 0xb0: num=10; break; case 0x70: num=11; break; while(P1!=0xfb); if(num=8|num=9|num=10) /如果按下的是'1','2'或'3 if(j=1) write_com(0x01); j=0; if(flag=0) a=a*10+tablenum; else b=b*1

20、0+tablenum; else flag=1; fuhao=2; i=table1num; write_data(0x30+i); P1=0xf7; if(P1!=0xf7) delay(20); if(P1!=0xf7) temp=P1&0xf0; switch(temp) case 0xe0: num=12; break; case 0xd0: num=13; break; case 0xb0: num=14; break; case 0x70: num=15; break; while(P1!=0xf7); switch(num) case 12: /按下的是"清零&

21、quot; write_com(0x01); a=0; b=0; flag=0; fuhao=0; break; case 13: /寫'0' if(j=1) /確認(rèn)一次計算完畢,清屏 write_com(0x01); j=0; if(flag=0) a=a*10; write_data(0x30); if(flag=1) b=b*10; write_data(0x30); break; case 14: write_data(0x3d); / 寫'=' j=1; if(fuhao=1) /'寫+' write_com(0x80+0x4f); /

22、【也可寫成成 write_com(0xc0+0x0f); 定義第二行】 write_com(0x04); / 光標(biāo)前移 c=a+b; if(c=0) write_data(0x30); while(c!=0) write_data(0x30+c%10); c=c/10; a=0; b=0; flag=0; fuhao=0; else if(fuhao=2) /寫負(fù)號'-' write_com(0x80+0x4f); write_com(0x04); if(a-b>=0) c=a-b; else c=b-a; if(c=0) write_data(0x30); while(c!=0) write_data(0x30+c%10); c=c/10; if(a-b<0) write_data(0x2d); /寫負(fù)號"-" a=0; b=0; flag=0; fuhao=0; else if

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論