單片機(jī)應(yīng)用課程簡易計(jì)算器設(shè)計(jì)報(bào)告_第1頁
單片機(jī)應(yīng)用課程簡易計(jì)算器設(shè)計(jì)報(bào)告_第2頁
單片機(jī)應(yīng)用課程簡易計(jì)算器設(shè)計(jì)報(bào)告_第3頁
單片機(jī)應(yīng)用課程簡易計(jì)算器設(shè)計(jì)報(bào)告_第4頁
單片機(jī)應(yīng)用課程簡易計(jì)算器設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、單片機(jī)應(yīng)用課程設(shè)計(jì)報(bào)告(20122013學(xué)年第2學(xué)期)設(shè)計(jì)題目: 基于單片機(jī)簡易計(jì)算器設(shè)計(jì) 班別: 2010級電子一班 姓名: 指導(dǎo)教師: 時(shí)間: 2013年5月26日 目 錄1.設(shè)計(jì)任務(wù)32. 系統(tǒng)總體方案設(shè)計(jì)32.1 各模塊方案選擇與論證32.1.1 按鍵電路設(shè)計(jì)32.1.2 顯示電路設(shè)計(jì)32.1.3 串口連接設(shè)計(jì)42.2 總體方案設(shè)計(jì)43. 系統(tǒng)硬件電路設(shè)計(jì)53.1 單片機(jī)最小系統(tǒng)電路53.2 4*4矩陣鍵盤電路63.3 LCD顯示電路73.4 串口模塊84. 系統(tǒng)軟件設(shè)計(jì)104.1 主程序流程圖104.2 顯示程序設(shè)計(jì)流程圖114.3 4*4矩陣鍵盤掃程序設(shè)計(jì)流程圖124.4 四則運(yùn)算

2、設(shè)計(jì)流程圖135. 實(shí)物仿真145.1 仿真調(diào)試146. 實(shí)物調(diào)試156.1 實(shí)物調(diào)試156.2 運(yùn)算驗(yàn)證167. 心得體會17附錄181.設(shè)計(jì)任務(wù) 計(jì)算器至少能正常顯示8位數(shù),能對整數(shù)進(jìn)行簡單的加、減、乘、除四則運(yùn)算,在做除法時(shí)只取到小數(shù)部分的后3位;鍵盤包括數(shù)字鍵(0-9)、符號鍵(+、-、*、/)、清除鍵和等號鍵,共16個按鍵,要求能夠在按按鍵后LCD顯示屏上能夠顯示對應(yīng)的數(shù)字和符號,在進(jìn)行運(yùn)算時(shí),按等號鍵能將最后結(jié)果輸送給LCD并顯示出來。2. 系統(tǒng)總體方案設(shè)計(jì)2.1 各模塊方案選擇與論證2.1.1 按鍵電路設(shè)計(jì)采用掃描方法,該編程比較熟悉,容易理解與編寫。計(jì)算器輸入數(shù)字和其他功能按鍵

3、要用到很多按鍵,如果采用獨(dú)立按鍵的方式,在這種情況下,編程會很簡單,但是會占用大量的I/O 口資源,因此在很多情況下都不采用這種方式,而是采用矩陣鍵盤的方案。矩陣鍵盤采用四條I/O 線作為行線,四條I/O 線作為列線組成鍵盤,在行線和列線的每個交叉點(diǎn)上設(shè)置一個按鍵。這樣鍵盤上按鍵的個數(shù)就為4×4個。這種行列式鍵盤結(jié)構(gòu)能有效地提高單片機(jī)系統(tǒng)中I/O 口的利用率。2.1.2 顯示電路設(shè)計(jì)使用LED數(shù)碼管顯示器,它的引腳比較多,在連接電路時(shí)比較的麻煩,并且在進(jìn)行多個數(shù)據(jù)計(jì)算時(shí),所需要的LED數(shù)碼管也要更多,電路設(shè)計(jì)不美觀。LCD1602液晶顯示屏使用簡單,模式固定,便于移植到各種類型的程序

4、,而且它的功耗小、體積小、顯示內(nèi)容豐富、超薄輕巧的優(yōu)點(diǎn)。最后采用LCD1602作為顯示器。2.1.3 串口連接設(shè)計(jì)為了方便單片機(jī)程序的修改與下載,制作了串口連接,減少了不必要的麻煩。使用9針母頭串口,可直接與電腦連接。采用max232芯片進(jìn)行連接,比較穩(wěn)定,并且該芯片技術(shù)比較成熟。2.2 總體方案設(shè)計(jì)本計(jì)算器是以STC89C52RC單片機(jī)為核心構(gòu)成的簡易計(jì)算器系統(tǒng)。該系統(tǒng)通過單片機(jī)控制,實(shí)現(xiàn)對4*4鍵盤掃描進(jìn)行實(shí)時(shí)的按鍵檢測,然后進(jìn)行計(jì)算,并且顯示。如圖1。 晶振電路復(fù)位電路串口連接電路4*4矩陣 鍵盤 STC89C52RC 單片機(jī)系統(tǒng)LCD顯示 電路 圖1 簡易計(jì)算器總體設(shè)計(jì)圖3. 系統(tǒng)硬件

5、電路設(shè)計(jì)3.1 單片機(jī)最小系統(tǒng)電路該系統(tǒng)電路以STC89C52RC最小系統(tǒng)的控制核心,主要注意晶振電路的接法和復(fù)位按鈕的接法采用手動復(fù)位和外部時(shí)鐘方式。如圖2所示。18和19引腳連接一個晶振和兩個電容(30P),它們是振蕩回路交聯(lián)電容,如果沒這兩個電容的話,振蕩部分會因?yàn)闆]有回路而停振,電路不能正常工作了。組成的晶振電路為單片機(jī)內(nèi)部系統(tǒng)提供基本的時(shí)鐘信號。圖2 單片機(jī)硬件電路原理圖 第9引腳連接單片機(jī)的復(fù)位按鈕,當(dāng)單片機(jī)正常工作時(shí),且晶振穩(wěn)定后,如果第9引腳上有一個高電平并維持2個機(jī)器周期(24個振蕩周期)以上,則CPU就可以響應(yīng)并將系統(tǒng)復(fù)位。在單片機(jī)啟動后,電容C兩端的電壓持續(xù)充電為5V,這

6、是時(shí)候10K電阻兩端的電壓接近于0V,第9引腳處于低電平所以系統(tǒng)正常工作。當(dāng)按鍵按下的時(shí)候,開關(guān)導(dǎo)通,這個時(shí)候電容兩端形成了一個回路,電容被短路,所以在按鍵按下的這個過程中,電容開始釋放之前充的電量。隨著時(shí)間的推移,電容的電壓在0.1S內(nèi),從5V釋放到變?yōu)榱?.5V,甚至更小。根據(jù)串聯(lián)電路電壓為各處之和,這個時(shí)候10K電阻兩端的電壓為3.5V,甚至更大,所以第9引腳又接收到高電平,單片機(jī)系統(tǒng)自動復(fù)位。在調(diào)試時(shí)發(fā)生系統(tǒng)錯誤或者死機(jī)的現(xiàn)象時(shí)就可以使用復(fù)位按鈕,使得系統(tǒng)內(nèi)部程序自動從頭開始執(zhí)行。3.2 4*4矩陣鍵盤電路 計(jì)算器的鍵盤布局如圖3所示。一般有16個鍵組成在單片機(jī)中正好可以用一個P口實(shí)現(xiàn)

7、16個按鍵功能,這種形式在單片機(jī)系統(tǒng)中也最常用。行線從上到先分別連接口的P1.7,P1.6,P1.5,P1.4,列線從上到下分別接口的P1.0,P1.1,P1.2,P1.3。行線全部為高電平,列線全部為低電平。圖3 矩陣鍵盤電路圖3.3 LCD顯示電路LCD作為顯示屏主要的特點(diǎn)有: 1)+5V電壓,對比可調(diào)度; 2)內(nèi)含復(fù)位電路; 3)提供各種控制命令,如:清屏、字符閃爍、光標(biāo)閃爍、顯示移位等多種功能; 4)有80字節(jié)顯示數(shù)據(jù)存儲器DDRAM;5、內(nèi)建有160個5X7點(diǎn)陣的字型的字符發(fā)生器CGROM;6、8個可由用戶自定義的5X7的字符發(fā)生器CGRAM。系統(tǒng)的D0-D7引腳向LCD寫指令字或?qū)?/p>

8、數(shù)據(jù)以使LCD實(shí)現(xiàn)不同的功能或顯示相應(yīng)的數(shù)據(jù)。其接口電路如圖4 所示。圖4 LCD接口電路 表1 LCD的引腳說明符號引腳說明符號引腳說明VSS電源地DB4Data I/OVDD電源正極(+5V)DB5Data I/OV0液晶顯示偏壓輸入DB6Data I/ORS數(shù)據(jù)/命令選擇端(H/L)DB7Data I/OR/W讀寫控制信號(H/L)CS1片選IC1信號E使能信號CS2片選IC2信號DB0Data I/ORST復(fù)位端(H:正常工作,L:復(fù)位)DB1Data I/OVEE負(fù)電源輸出(-10V)DB2Data I/OBLA背光源正極(+4.2)DB3Data I/OBLK背光源正極3.4 串口

9、模塊 為了使單片機(jī)內(nèi)的電平與計(jì)算機(jī)的電平一樣需要利用電平轉(zhuǎn)換,MAX232芯片是專為RS232標(biāo)準(zhǔn)串口設(shè)計(jì)的單電源點(diǎn)平轉(zhuǎn)換芯片。其特點(diǎn)如下:1)符合所有的RS232技術(shù)標(biāo)準(zhǔn);2)只需要單一 +5V電源供電;3)片載電荷泵具有升壓、電壓極性反轉(zhuǎn)能力,能夠產(chǎn)生+10V和-10V電壓;4)功耗低,典型供電電流5mA;5)內(nèi)部集成2個RS-232C驅(qū)動器;6)高集成度,片外最低只需4個電容即可工作;7)連接方式如圖5所示。 圖5串口連接4. 系統(tǒng)軟件設(shè)計(jì) 4.1 主程序流程圖 圖4.1.1 主程序流程圖 圖 6 主程序流程圖4.2 顯示程序設(shè)計(jì)流程圖顯示程序的過程為:顯示開始時(shí),先進(jìn)行LCD的初始化,

10、判斷是否顯示漢字或ACSII碼或圖形,若不顯示,則返回,若顯示的是漢字或ACSII碼,則進(jìn)行相應(yīng)功能的設(shè)置,然后送地址和數(shù)據(jù),再判斷是否顯示完,顯示完則返回,沒有顯示完則繼續(xù)送地址,若顯示的是圖形,則先進(jìn)行相應(yīng)功能的設(shè)置,再送行地址和列地址,然后送數(shù)據(jù),最后判斷是否顯示完,顯示完則返回,沒有顯示完則繼續(xù)送行地址和列地址。其流程圖如圖7所示。NYN是否返回 LCD初始化顯示漢或ACSII碼顯示開始顯示圖形相應(yīng)功能設(shè)置送地址送數(shù)據(jù)NN相應(yīng)功能設(shè)置送行地址和列地址送數(shù)據(jù)是否YY圖 7 顯示程序流程圖4.3 4*4矩陣鍵盤掃程序設(shè)計(jì)流程圖鍵掃程序的過程為:開始時(shí),先判斷是否有鍵閉合,無鍵閉合時(shí),返回繼

11、續(xù)判斷,有鍵閉合時(shí),先去抖動,然后確定是否有鍵按下,若無鍵按下,則返回繼續(xù)判斷是否有鍵閉合,若有鍵按下,則判斷鍵號,然后釋放,若釋放按鍵完畢,則返回,若沒有釋放按鍵,則返回繼續(xù)釋放。其流程圖如圖8所示。YN開始有鍵閉合否?去抖動確有鍵按下判斷鍵號釋放返回返回YNYN圖8 鍵盤掃描程序流程圖4.4 四則運(yùn)算設(shè)計(jì)流程圖運(yùn)算模塊由鍵盤和顯示屏組成。單片機(jī)通過按鍵來實(shí)現(xiàn)輸入數(shù)據(jù)和操作方式的控制,在運(yùn)算過程中,對所設(shè)的數(shù)據(jù)進(jìn)行四則運(yùn)算時(shí),要先確定選用的是哪一個運(yùn)算符,若是+或*,則要判斷結(jié)果是否會溢出,溢出則顯示錯誤提示,沒有溢出則顯示運(yùn)算結(jié)果,若是則要判斷除數(shù)是否為零,為零時(shí)顯示錯誤提示,不為零顯示運(yùn)

12、算結(jié)果。開始運(yùn)算符是?加乘減除除數(shù)為000?運(yùn)算結(jié)果溢出?錯誤信息送顯示緩沖數(shù)值送顯示緩沖YYNN圖9運(yùn)算流程圖5. 實(shí)物仿真5.1 仿真調(diào)試根據(jù)上面的設(shè)計(jì),此次課程設(shè)計(jì)使用Keil uVision4和Proteus軟件,其中使用Keil uVision4軟件編輯源程序,使用Proteus軟件對硬件電路進(jìn)行模擬。正確連接電路圖,使其能按照題目要求及正常工作。從庫里正確拾取元器件,認(rèn)真合理地連線,做到不缺件,不缺線,選取合適的元件參考值,使其能正常工作。通過編譯,連接程序。使其生成.hex文件,并連入連好的proteus圖中。如圖10所示。圖10 Proteus 仿真圖仿真結(jié)果及顯示:1.加法計(jì)

13、算 2.減法計(jì)算 3.乘法計(jì)算 4.除法計(jì)算 6. 實(shí)物調(diào)試6.1 實(shí)物調(diào)試 根據(jù)proteus的電路圖在Altium中畫PCB原理圖,并做成PCB制作成電路板。將生成的.hex文件下載到到單片機(jī)里,連接好電源,進(jìn)行電路測試。實(shí)物如圖11所示。 圖11 實(shí)物圖6.2 運(yùn)算驗(yàn)證 計(jì)算器只能準(zhǔn)確進(jìn)行最后結(jié)果為9位數(shù)的四則運(yùn)算。1.加法計(jì)算 2.減法計(jì)算 3.乘法計(jì)算 4.除法計(jì)算 7. 心得體會 所設(shè)計(jì)計(jì)算器處理數(shù)據(jù)及顯示存在太大的局限性,覺得主要還是對程序中的運(yùn)算模塊理解不深,這點(diǎn)仍需大大加強(qiáng)。常見故障:1、邏輯錯誤:它是由設(shè)計(jì)錯誤或加工過程中的工藝性錯誤所造成的。這類錯誤包括錯線、開路、短路等

14、。2、元器件失效:有兩方面的原因:一是器件本身已損壞或性能不符合要求;二是組裝錯誤造成元試過程中要針對可能出現(xiàn)的故障認(rèn)真分件失效,如電解電容、集成電路安裝方向錯誤等。3、可靠性差:因其可靠性差的原因很多,如金屬化孔、接插件接觸不良會造成系統(tǒng)時(shí)好時(shí)壞,經(jīng)不起振動;走線和布局不合理也會引起系統(tǒng)可靠性差。4、電源故障:若樣機(jī)由電源故障,則加電后很容易造成器件損壞。電源故障包括電壓值不符合設(shè)計(jì)要求,電源引線和插座不對,功率不足,負(fù)載能力差等。調(diào)試方法:包括多級調(diào)試和聯(lián)機(jī)調(diào)試。在調(diào)析,直至檢查出原因并排除。本次硬件調(diào)試過程中,對所出現(xiàn)的問題進(jìn)行了認(rèn)真的分析和改正,最后能夠很好的達(dá)到設(shè)計(jì)要求的效果。 這個

15、實(shí)驗(yàn)給我們的感覺,硬件和軟件上都不是很難。我們的焊工也馬虎,即使難看了點(diǎn),但只要軟件能行,就能完美運(yùn)行。可惜,在焊錫的時(shí)候,我們沒有考慮到器件本省的問題就開始焊錫,導(dǎo)致焊錫后由于單片機(jī)插槽本省的問題使得我們的實(shí)驗(yàn)結(jié)果不理想,還好,后來通過組員的共同努力找出問題,最后將壞的器件拆了,焊上好的,最后一調(diào)試就成功了。LCD字符顯示,3種不同的矩陣鍵盤掃描的方法,及軟件上的巧妙技巧有了更好的了解。我們在這次實(shí)驗(yàn)上,感覺收獲的更多。附錄附錄1PCB 原理圖和PCB圖 附錄2主程序:#include<at89x52.h>#define uchar unsigned char#define ui

16、nt unsigned int#define ulong unsigned long#define rs P3_4 /指令寄存器或數(shù)據(jù)寄存器的選擇#define e P3_5 /讀寫操作的使能信號#define rw P2_7 /讀寫操作的選擇#define BF 0X80 /忙檢測標(biāo)志位uchar code tab1=4,5,6,'-',7,8,9,'*','c',0,'=','/',1,2,3,'+' /鍵盤的對應(yīng)的數(shù)據(jù)uchar number; /按鍵輸入鍵盤號bit flag0=0; /&q

17、uot;="號按鍵標(biāo)志bit flag1=0; /"+"號按鍵標(biāo)志bit flag2=0; /"-"號按鍵標(biāo)志bit flag3=0; /"*"號按鍵標(biāo)志bit flag4=0; /"/"號按鍵標(biāo)志bit fuhao=0; /正負(fù)號標(biāo)志bit point=0; /小數(shù)點(diǎn)標(biāo)志bit flag5=0; /負(fù)數(shù)運(yùn)算標(biāo)志ulong a=0,b=0;s=0;/第一個整數(shù)存入a,第二個數(shù)整數(shù)存入b,傳值suchar code key=0xef,0xdf,0xbf,0x7f;/行掃描按鍵檢測void delay(uin

18、t z) /延時(shí)1ms子程序 uint x,y; for(x=z;x>0;x-) for(y=115;y>0;y-);/* 1602夜晶顯示器*/uchar busy() /1602忙碌檢測 rs=0; rw=1; e=1; delay(1); while(P0&BF); e=0; return P0;void wdat(uchar dat) /數(shù)據(jù)在1602顯示 P0=dat; busy(); rs=1; rw=0; delay(5); e=1; delay(5); e=0;void wcmd(uchar cmd,uchar BFC) /寫命令或?qū)憯?shù)據(jù)輸出到1602的地址

19、 P0=cmd; if(BFC) busy(); rs=0; rw=0; delay(5); e=1; delay(5); e=0; void init() /1602初始化 e=0; wcmd(0x38,0); wcmd(0x38,0); wcmd(0x38,0); wcmd(0x38,1); wcmd(0x08,1); wcmd(0x01,1); wcmd(0x06,1); wcmd(0x0c,1);/* 4*4鍵盤,并得到按鍵值*/void ankey() /取4*4鍵盤輸入代表鍵值number uchar i,j,temp; for(i=0;i<4;i+) P1=keyi; te

20、mp=P1; temp=temp<<4|0x0f; for(j=0;j<4;j+) if(keyj=temp) number=i*4+j;/按鍵對應(yīng)的鍵號 switch(number)/對按鍵作相應(yīng)的處理 cas8:wcmd(0x01,1);a=0;b=0;flag0=0;flag1=0;flag2=0;flag3=0;flag4=0;flag5=0;fuhao=0;point=0; break; /清零按鍵 case 10: if(flag0=1) wcmd(0x01,1);a=0;b=0;flag0=0;flag1=0;flag2=0;flag3=0;flag4=0;fl

21、ag5=0;point=0;wdat('v');wdat('a');wdat('l');wdat('u');wdat('e');a=s;if(fuhao=1) flag5=1;fuhao=0; else flag0=1; break; /"="號按鍵 case 7:flag3=1;wdat(0x2a);break; /"*"號按鍵 case 11:flag4=1;wdat(0x2f);break; /"/"號按鍵 case 15:flag1=1;wdat(

22、0x2b);break; /"+"號按鍵 case 3:wdat(0x2d); if(a=0)flag5=1;/負(fù)號按鍵else flag2=1;/減號按鍵 break; case 4: case 5: case 6: case 0: case 9: case 2: case 12: case 13: case 14: case 1: fuhao=0; if(flag2|flag3|flag4|flag1)/不是符號鍵時(shí),按鍵對應(yīng)的數(shù)值放入 /第一個數(shù)中,是時(shí),放入第二個數(shù)中 b=b*10+tab1number; wdat(0x30+tab1number);/顯示所按的鍵對

23、應(yīng)的 else if(flag0) flag0=0; wcmd(0x01,1); a=tab1number; wdat(0x30+tab1number); /顯示所按的鍵對應(yīng)的值 else a=a*10+tab1number; wdat(0x30+tab1number);/顯示所按的鍵對應(yīng)的值 break; default:break; while(keyi!=P1) /按鍵是否松開,若否,則在4*4鍵盤對應(yīng)那個鍵的行列為低電平 P1=keyi; void keysure()/延時(shí)消除按鍵抖動 P1=0x0f; if(P1&0x0f)!=0x0f) delay(10); if(P1&0x0f)!=0x0f) ankey(); /* 計(jì)算器的運(yùn)算公式及結(jié)果輸出*/ulong flag00() ulong value; /計(jì)算結(jié)果變量 if(flag0=1) /是否按了"=",若是,則執(zhí)行運(yùn)算法則 if(flag1=1) /加法運(yùn)算 if(flag5=1) if(b>=a) /判斷減數(shù)的大小 value=b-a; else value=a-b; fuhao=1; /結(jié)果是負(fù)數(shù)的標(biāo)志位 else value=a+b; i

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論