電子計算器課程設(shè)計_第1頁
電子計算器課程設(shè)計_第2頁
電子計算器課程設(shè)計_第3頁
電子計算器課程設(shè)計_第4頁
電子計算器課程設(shè)計_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

目錄TOC\o"1-2"\h\z\u1設(shè)計任務(wù)和性能指標(biāo) 11.1設(shè)計任務(wù) 11.2性能指標(biāo) 12設(shè)計方案 12.1需求分析 12.2方案論證 13系統(tǒng)硬件設(shè)計 23.1總體框圖設(shè)計 23.2單片機選型 23.3單片機附屬電路設(shè)計 33.4LCD液晶顯示 44系統(tǒng)軟件設(shè)計 44.1設(shè)計思路 44.2總體流程圖 44.3子程序設(shè)計 54.4總程序清單 65仿真與調(diào)試 65.1調(diào)試步驟 65.2仿真結(jié)果及性能分析 86總結(jié) 8參考文獻(xiàn) 8附錄1系統(tǒng)硬件電路圖 10附錄2程序清單 111設(shè)計任務(wù)和性能指標(biāo)1.1設(shè)計任務(wù)電子計算器設(shè)計1、能實現(xiàn)4位整數(shù)的加減法和2位整數(shù)的乘法;2、結(jié)果通過5個LED數(shù)碼管顯示(4位整數(shù)加法會有進位)或通過液晶顯示屏顯示。1.2性能指標(biāo)1.用數(shù)字鍵盤輸入4位整數(shù),通過LED數(shù)碼顯示管或液晶顯示屏顯示。2.完成四位數(shù)的加減法應(yīng)算。當(dāng)四位數(shù)想加時產(chǎn)生的進位時,顯示進位。3.顯示2位,并進行2位整數(shù)的乘法。4.設(shè)計4*4矩陣鍵盤輸入線的連接。2設(shè)計方案2.1需求分析我們?nèi)粘I畹拈_支,大額數(shù)字或是多倍小數(shù)的計算都需要計算器的幫助,處理數(shù)字的開方、正余弦都離不開計算器。雖然現(xiàn)在的計算器價格比較低廉,但是功能過于簡單的不能滿足個人需求,功能多的價格較貴,操作不便不說,很多功能根本用不到。所以,我們想到可不可以用自己所學(xué)為自己設(shè)計開發(fā)一個屬于自己的簡單計算器來完成日常生活的需求。2.2方案論證使用單片機為ATMEL公司生產(chǎn)AT89C51,AT89C51提供以下標(biāo)準(zhǔn)功能:4K字節(jié)FLASH閃速存儲器,128字節(jié)內(nèi)部RAM,32個I/O口線,兩個16位定時/計數(shù)器,一個向量兩級中斷結(jié)構(gòu),一個全雙工串行通訊口,內(nèi)置一個精密比較器,片內(nèi)振蕩器及時鐘電路,同時AT89C51可降至0Hz的靜態(tài)邏輯操作,并支持兩種軟件可選的工作模式,空閑方式停止CPU的工作,但允許RAM,定時計數(shù)器,串行通信及中斷系統(tǒng)繼續(xù)工作。顯示用LCD液晶顯示屏,減少線路連接。用C言編寫程序,易進行調(diào)試修改。采用4*4矩陣鍵盤作為輸入。3系統(tǒng)硬件設(shè)計3.1總體框圖設(shè)計電路圖如附錄13.2單片機選型AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低電壓,高性能、CMOS、8位單片機。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。AT89C51的管腳圖如圖2.2所示。圖3-13.3單片機附屬電路設(shè)計一、晶體振蕩電路1.晶體振蕩器的作用石英晶體振蕩器也稱石英晶體諧振器,它用來穩(wěn)定頻率和選擇頻率,是一種可以取代LC諧振回路的晶體諧振元件。2.本設(shè)計所用的晶體振蕩電路如圖2.3所示:圖3-2晶振電路此晶振電路所選用的石英晶振頻率為12MHZ。一、晶體振蕩電路單片機復(fù)位的條件是:必須使RST/Vpd或RST引腳加上持續(xù)兩個機器周期(即24個振蕩周期)的高電平。圖3-2復(fù)位電路該電路除具有上電復(fù)位功能外,若要復(fù)位,只需按圖中的BUTTON鍵,此時電源VCC經(jīng)電阻R1、R2分壓,在RESET端產(chǎn)生復(fù)位高電平。3.44*4矩陣鍵盤控制電路矩陣式鍵盤的結(jié)構(gòu)與工作原理:在鍵盤中的按鍵數(shù)量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式,其內(nèi)部簡圖如圖3-3在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,只需要單片機的一個端口(如P1口)就可以構(gòu)成4*4=16個按鍵,比直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時,采用矩陣法來做鍵盤比較是合理的。由于本系統(tǒng)按鍵較多,在這里采用矩陣式4*4鍵盤,這樣可以合理應(yīng)用硬件資源,用一個8位I/O口控制,如圖3-3所示:圖3-3按鍵內(nèi)部電路簡圖矩陣式鍵盤的按鍵識別方法一、確定矩陣式鍵盤上何鍵被按下,我們采用一種“行掃描法”。行掃描法:行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識別方法。3.4LCD液晶顯示1602LCD采用標(biāo)準(zhǔn)的14腳(無背光)接口,各引腳接口說明如表所示:編號符號引腳說明編號符號引腳說明1VSS電源地8D1數(shù)據(jù)2VDD電源正極9D2數(shù)據(jù)3VEE液晶顯示偏壓10D3數(shù)據(jù)4RS數(shù)據(jù)/命令選擇11D4數(shù)據(jù)5RW讀/寫選擇12D5數(shù)據(jù)6E使能信號13D6數(shù)據(jù)7D0數(shù)據(jù)14D7數(shù)據(jù)4系統(tǒng)軟件設(shè)計4.1設(shè)計思路1.要有顯示子程序,當(dāng)鍵入一個數(shù)值或符號時顯示程序要把這個鍵入的值給顯示出來。經(jīng)過運算在按下等號之后顯示出此次運算的結(jié)果。2.就是按鍵程序,當(dāng)一個鍵盤按下的時候,按鍵程序要判斷是哪個按鍵按下,如果是數(shù)字鍵按下就要轉(zhuǎn)向顯示子程序來顯示出這個數(shù)字,然后等待下一個鍵值的輸入,再次判斷按下的是什么鍵,如果是功能鍵就要根據(jù)上次功能鍵和輸入的數(shù)據(jù)來計算結(jié)果,然后保存結(jié)果和功能鍵,結(jié)果送顯示緩沖區(qū)顯示。等待下個數(shù)值的輸入,如此重復(fù)。4.2總體流程圖開始開始初始化數(shù)據(jù)據(jù)LCD顯示有鍵輸入讀鍵值鍵碼是?數(shù)字鍵清零鍵功能鍵輸入值狀態(tài)清零數(shù)值送顯示緩存根基功能鍵和輸入數(shù)據(jù)計算結(jié)果保存結(jié)果結(jié)果送顯示緩存等待數(shù)值輸入4.3子程序設(shè)計1.讀和寫數(shù)據(jù)子程序voidwrite_com(charcom)//寫指令函數(shù){P0=com;//com指令付給P0口rs=0;rw=0;lcden=0;check();lcden=1;}voidwrite_date(chardate)//寫數(shù)據(jù)函數(shù){P0=date;rs=1;rw=0;lcden=0;check();lcden=1;}4.4總程序清單見附錄25仿真與調(diào)試5.1調(diào)試步驟1.采用KEIL開發(fā)的89c51單片機應(yīng)用程序調(diào)試步驟:(1)在uVision集成開發(fā)環(huán)境中創(chuàng)建新項目(Project),擴展文件名為.UV2,并為該項目選定合適的單片機CPU器件(本設(shè)計采用ATMEL公司下的AT89C51)(2)用uVision的文本編輯器編寫源文件,可以是匯編文件(.ASM),也可以使C語言文件(擴展名.C),并將該文件添加到項目中去。一個項目文件可以包含多個文件,除了源程序文件外,還可以是庫文件、頭文件或文本說明文件。(3)通過uVision2的相關(guān)選擇項,配置編譯環(huán)境、連接定位器以及Debug調(diào)試器的功能。(4)對項目中的源文件進行編譯連接,生成絕對目標(biāo)代碼和可選的HEX文件,如果出現(xiàn)編譯連接錯誤則返回到第2步,修改源文件中的錯誤后重構(gòu)整個項目。圖5-1Keil調(diào)試2用Proteus對于本設(shè)計的仿真操作步驟如下:(1)進入proteusISIS集成環(huán)境,在工作前,在systerm菜單下設(shè)置界面的顏色、圖形界面大小等項目,也可采用了系統(tǒng)默認(rèn)值。

(2)通過工具欄中的(從庫中選擇元件命令)命令,在pickdevices窗口中選擇電路所需的元件,放置元件到編輯區(qū)并調(diào)整其相對位置,進行元件參數(shù)設(shè)置,元器件間連線。(3)連線并加上設(shè)置參數(shù),并完成仿真原理圖,如圖5-2所示。(4)加載程序。將編譯調(diào)試完成的簡易計算器機器碼程序(hex文件)加載到AT89C51單片機中。(5)單擊仿真工具欄中的仿真鍵,觀察仿真結(jié)果??梢园磿和?、繼續(xù)、單步、等按鈕,查看效果。圖5-2操作說明:1)本計算器實現(xiàn)4位數(shù)的加減,2位數(shù)乘除運算。2)按下數(shù)值鍵,顯示按下的“數(shù)字”,按運算符,顯示符號,按第2個操作數(shù),顯示,按“=”鍵,得到運算結(jié)果。3)按“清零”鍵清除運算結(jié)果,可重新開始。(6)調(diào)試與思考5.2仿真結(jié)果及性能分析6總結(jié)通過這段時間的設(shè)計,終于完成了我計算器的設(shè)計,雖然只是一個非常簡單的計算器,可是我也經(jīng)過了一翻很大的努力才完全達(dá)到設(shè)計要求的,從心底里說,還是挺高興的,畢竟這次設(shè)計所要求的東西都做了出來,然而高興之余不得不深思呀!在本次設(shè)計的過程中,我發(fā)現(xiàn)很多的問題,雖然以前還做過這樣的設(shè)計但這次設(shè)計真的讓我長進了很多,單片機的設(shè)計重點就在于軟件程序的設(shè)計,需要有很巧妙的編程方法,在編程時,由于粗心大意馬虎,有些語句看似沒問題,可就是不出效果,經(jīng)仔細(xì)揣摩修改后,程序才正常運行。學(xué)習(xí)單機片機更是如此,程序只有在經(jīng)常的寫與讀的過程中才能提高。從這次的課程設(shè)計中,我真真正正的意識到,在以后的學(xué)習(xí)中,要理論聯(lián)系實際,把我們所學(xué)的理論知識用到實際當(dāng)中,理論指導(dǎo)實踐,在實踐中對理論知識加以理解。還要有獨立思考能力和團隊協(xié)作的精神,個人能力固然重要,集體的力量更是偉大的。由于時間比較倉促,我所設(shè)計的這個計算器非常簡單,我們可以考慮在以后來改進一下,使它的功能更加完善,強大。參考文獻(xiàn)[1]劉和平,劉躍,單片機原理及應(yīng)用,重慶:重慶大學(xué)出版社,2004[2]楊西明,朱騏,單片機編程與入門,北京:機械工業(yè)出版社,2004[3]陳明熒,89C51單片機課程設(shè)計實訓(xùn)教材,北京:北京清華大學(xué)出版社,2004[4]劉瑞新,單片機原理及應(yīng)用教程,北京:機械工業(yè)出版社,2003[5樓然苗,李光飛,51系列單片機設(shè)計實例,北京:北京航空航天大學(xué)出版社,2003附錄1系統(tǒng)硬件電路圖附錄2程序清單#include<reg51.h>//頭文件#defineuintunsignedint//#defineucharunsignedcharsbitlcden=P2^3;//定義引腳sbitrs=P2^4;sbitrw=P2^0;sbitbusy=P0^7;chari,j,temp,num,num_1;inta,b,c;//a,第一個數(shù)b,第二個數(shù)c,得數(shù)floata_c,b_c;ucharflag,fuhao;//flag表示是否有符號鍵按下,fuhao表征按下的是哪個符號ucharcodetable[]={7,8,9,0,4,5,6,0,1,2,3,0,0,0,0,0};ucharcodetable1[]={7,8,9,0x2f-0x30,4,5,6,0x2a-0x30,1,2,3,0x2d-0x30,0x01-0x30,0,0x3d-0x30,0x2b-0x30};voiddelay(ucharz)//延遲函數(shù){uchary;for(z;z>0;z--)for(y=0;y<100;y++);}voidcheck()//判斷忙或空閑{do{P0=0xFF;rs=0;//指令rw=1;//讀lcden=0;//禁止讀寫delay(1);//等待,液晶顯示器處理數(shù)據(jù)lcden=1;//允許讀寫}while(busy==1);//判斷是否為空閑,1為忙,0為空閑}voidwrite_com(charcom)//寫指令函數(shù){P0=com;//com指令付給P0口rs=0;rw=0;lcden=0;check();lcden=1;}voidwrite_date(chardate)//寫數(shù)據(jù)函數(shù){P0=date;rs=1;rw=0;lcden=0;check();lcden=1;}voidinit()//初始化{num=-1;lcden=1;//使能信號為高電平write_com(0x38);//8位,2行write_com(0x0c);//顯示開,光標(biāo)關(guān),不閃爍*/write_com(0x06);//增量方式不移位顯竟獗暌貧柚?write_com(0x80);//檢測忙信號write_com(0x01);//顯示開,光標(biāo)關(guān),不閃爍num_1=0;i=0;j=0;a=0;//第一個參與運算的數(shù)b=0;//第二個參與運算的數(shù)c=0;flag=0;//flag表示是否有符號鍵按下,fuhao=0;//fuhao表征按下的是哪個符號}voidkeyscan()//鍵盤掃描程序{P3=0xfe;if(P3!=0xfe){delay(20);if(P3!=0xfe){temp=P3&0xf0;switch(temp){case0xe0:num=0;break;case0xd0:num=1;break;case0xb0:num=2;break;case0x70:num=3;break;}}while(P3!=0xfe);if(num==0||num==1||num==2)//如果按下的是'7','8'或'9{if(j!=0){write_com(0x01);j=0;}if(flag==0)//沒有按過符號鍵{ do{a=a*10+table[num]; } while(a>10000);}else//如果按過符號鍵 { do{ b=b*10+table[num];} while(b>10000); }}else//如果按下的是'/'{if(a<100) {flag=1;fuhao=4; }; //4表示除號已按}i=table1[num];write_date(0x30+i);}P3=0xfd;if(P3!=0xfd){delay(5);if(P3!=0xfd){temp=P3&0xf0;switch(temp){case0xe0:num=4;break;case0xd0:num=5;break;case0xb0:num=6;break;case0x70:num=7;break;}}while(P3!=0xfd);if(num==4||num==5||num==6&&num!=7)//如果按下的是'4','5'或'6'{if(j!=0){write_com(0x01);j=0;}if(flag==0)//沒有按過符號鍵{ do {a=a*10+table[num];} while(a>10000); }else//如果按過符號鍵{do {b=b*10+table[num]; } while(B>10000);}}else//如果按下的是'*'{if(a<100){flag=1;fuhao=3; }//3表示乘號已按}i=table1[num];write_date(0x30+i);}P3=0xfb;if(P3!=0xfb){delay(5);if(P3!=0xfb){temp=P3&0xf0;switch(temp){case0xe0:num=8;break;case0xd0:num=9;break;case0xb0:num=10;break;case0x70:num=11;break;}}while(P3!=0xfb);if(num==8||num==9||num==10)//如果按下的是'1','2'或'3'{if(j!=0){write_com(0x01);j=0;}if(flag==0)//沒有按過符號鍵{ do {a=a*10+table[num];} while(a>10000); }else//如果按過符號鍵{ do {b=b*10+table[num];} while(b>10000);}}elseif(num==11)//如果按下的是'-'{flag=1;fuhao=2;//2表示減號已按}i=table1[num];write_date(0x30+i);}P3=0xf7;if(P3!=0xf7){delay(5);if(P3!=0xf7){temp=P3&0xf0;switch(temp){case0xe0:num=12;break;case0xd0:num=13;break;case0xb0:num=14;break;case0x70:num=15;break;}}while(P3!=0xf7);switch(num){case12:{write_com(0x01);a=0;b=0;flag=0;fuhao=0;}//按下的是"清零"break;case13:{//按下的是"0"if(flag==0)//沒有按過符號鍵{a=a*10;write_date(0x30);P1=0;}elseif(flag==1)//如果按過符號鍵{b=b*10;write_date(0x30);}}break;case14:{j=1;if(fuhao==1){write_com(0x80+0x4f);//按下等于鍵,光標(biāo)前進至第二行最后一個顯示處write_com(0x04);//設(shè)置從后住前寫數(shù)據(jù),每寫完一個數(shù)據(jù),光標(biāo)后退一格c=a+b;while(c!=0){write_date(0x30+c%10);c=c/10;}write_date(0x3d);//再寫"="a=0;b=0;flag=0;fuhao=0;}elseif(fuhao==2){write_com(0x80+0x4f);//光標(biāo)前進至第二行最后一個顯示處write_com(0x04);//設(shè)置從后住前寫數(shù)據(jù),每寫完一個數(shù)據(jù),光標(biāo)后退一格(這個照理說順序不對,可顯示和上段一樣)if(a-b>0)c=a-b;elsec=b-a;while(c!=0){write_date(0x30+c%10)

溫馨提示

  • 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

提交評論