版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.單片機(jī)原理及接口技術(shù)課程設(shè)計(jì)報(bào)告設(shè)計(jì)題目: 計(jì)算器設(shè)計(jì) 信息與電氣工程學(xué)院二零一三年七月.;哈爾濱工業(yè)大學(xué)(威海)課程設(shè)計(jì)報(bào)告計(jì)算器設(shè)計(jì)單片機(jī)體積小,功耗小,價(jià)格低,用途靈活,無(wú)處不在,屬專用計(jì)算機(jī)。是一種特殊器件,需經(jīng)過(guò)專門(mén)學(xué)習(xí)方能掌握應(yīng)用,應(yīng)用中要設(shè)計(jì)專用的硬件和軟件。近年來(lái),單片機(jī)以其體積小、價(jià)格廉、面向控制等獨(dú)特優(yōu)點(diǎn),在各種工業(yè)控制、儀器儀表、設(shè)備、產(chǎn)品的自動(dòng)化、智能化方面獲得了廣泛的應(yīng)用。與此同時(shí),單片機(jī)應(yīng)用系統(tǒng)的可靠性成為人們?cè)絹?lái)越關(guān)注的重要課題。影響可靠性的因素是多方面的,如構(gòu)成系統(tǒng)的元器件本身的可靠性、系統(tǒng)本身各部分之間的相互耦合因素等。其中系統(tǒng)的抗干擾性能是系統(tǒng)可靠性的重要
2、指標(biāo)。數(shù)學(xué)是科技進(jìn)步的重要工具,數(shù)據(jù)的運(yùn)算也隨著科技的進(jìn)步越發(fā)變得繁瑣復(fù)雜,計(jì)算器的出現(xiàn)可以大大解放人在設(shè)計(jì)計(jì)算過(guò)程中的工作量,使計(jì)算的精度、速度得到改善,通過(guò)msc51單片機(jī),矩陣鍵盤(pán)和LED數(shù)碼管可以實(shí)現(xiàn)簡(jiǎn)單的四位數(shù)的四則運(yùn)算和顯示,并當(dāng)運(yùn)算結(jié)果超出范圍時(shí)予以報(bào)錯(cuò)。注:這一部分主要描述題目的背景和意義,對(duì)設(shè)計(jì)所采取的主要方法做一下簡(jiǎn)要描述。字?jǐn)?shù)不要太多,300-500字。另注:本文要當(dāng)做模板使用,不要隨意更改字體、字號(hào)、行間距等,學(xué)會(huì)使用格式刷。文中給出的各項(xiàng)內(nèi)容都要在大家的報(bào)告中體現(xiàn),可采用填空的方式使用本模板。1. 設(shè)計(jì)任務(wù)結(jié)合實(shí)際情況,基于AT89C51單片機(jī)設(shè)計(jì)一個(gè)計(jì)算器。該系統(tǒng)應(yīng)
3、滿足的功能要求為:(1) 實(shí)現(xiàn)簡(jiǎn)單的四位十進(jìn)制數(shù)字的四則運(yùn)算;(2) 按鍵輸入數(shù)字,運(yùn)算法則;(3) LED數(shù)碼管移位顯示每次輸入的數(shù)據(jù)和運(yùn)算結(jié)果;(4) 當(dāng)運(yùn)算結(jié)果超出范圍時(shí)實(shí)現(xiàn)報(bào)錯(cuò)。 主要硬件設(shè)備:AT89C51單片機(jī)、LED數(shù)碼管、矩陣鍵盤(pán)。注:這一部分需要寫(xiě)明系統(tǒng)功能需求,用到的主要硬件(參考實(shí)驗(yàn)箱的說(shuō)明書(shū))。2. 整體方案設(shè)計(jì)計(jì)算器以AT89C51單片機(jī)作為整個(gè)系統(tǒng)的控制核心,應(yīng)用其強(qiáng)大的I/O功能和計(jì)算速度,構(gòu)成整個(gè)計(jì)算器。通過(guò)矩陣鍵盤(pán)輸入運(yùn)算數(shù)據(jù)和符號(hào),送入單片機(jī)進(jìn)行數(shù)據(jù)處理。經(jīng)單片機(jī)運(yùn)算后判斷是否超出要求的運(yùn)算范圍,控制LED數(shù)碼管的輸出原理圖如圖2-1所示。圖2-1 基于單片
4、機(jī)的變頻調(diào)速恒壓供水系統(tǒng)原理圖本系統(tǒng)硬件主要由矩陣鍵盤(pán)、I/O輸入輸出、顯示系統(tǒng)等幾部分組成。各模塊的主要功能如下:(1)矩陣鍵盤(pán)將十六進(jìn)制編碼的數(shù)字傳入單片機(jī)。(2) 單片機(jī)掃描鍵盤(pán)信號(hào)并接收,對(duì)輸入的鍵盤(pán)信號(hào)進(jìn)行處理(3) LED以動(dòng)態(tài)掃描的方式移位顯示每次輸入的數(shù)據(jù)和最后的運(yùn)算結(jié)果。系統(tǒng)的整體設(shè)計(jì)方案設(shè)計(jì)圖如圖2-2所示。圖2-2 系統(tǒng)的整體方案設(shè)計(jì)圖注:文中出現(xiàn)的所有框圖、流程圖都要用VISIO畫(huà),不允許從文檔中裁剪然后粘貼。要注意圖的格式,圖中的文字大小不要大于正文,圖題用五號(hào)宋體,居中。3. 系統(tǒng)硬件電路設(shè)計(jì)3.1 時(shí)鐘電路本設(shè)計(jì)采用外部時(shí)鐘方式,使用外部振蕩器產(chǎn)生脈沖信號(hào),采用1
5、2MHz的石英晶體振蕩器,結(jié)構(gòu)如圖3-1。圖3-1 時(shí)鐘電路和復(fù)位電路3.2 復(fù)位電路 本設(shè)計(jì)采用按鍵手動(dòng)電平復(fù)位電路,通過(guò)RST端經(jīng)電阻與電源Vcc接通而實(shí)現(xiàn),結(jié)構(gòu)如圖3-1。 3.3 數(shù)碼管顯示電路本設(shè)計(jì)所用數(shù)碼管顯示電路采用4位紅色共陰極數(shù)碼管接上拉電阻實(shí)現(xiàn),其結(jié)構(gòu)如圖3-2。圖3-2數(shù)碼管顯示電路 3.4 鍵盤(pán)輸入電路本設(shè)計(jì)采用4*4矩陣鍵盤(pán)實(shí)現(xiàn)數(shù)據(jù)和運(yùn)算法則的輸入。按鍵設(shè)置在行、列線的交點(diǎn)上,行列線分別連接的按鍵開(kāi)關(guān)的兩端,并通過(guò)上來(lái)電阻街道+5V上。無(wú)按鍵按下時(shí),行、列線均處于高電平,當(dāng)有按鍵按下是,相對(duì)應(yīng)的行和列電平為低電平。此特點(diǎn)也用于單片機(jī)I/O口對(duì)矩陣鍵盤(pán)的掃描。矩陣鍵盤(pán)和
6、單片機(jī)的連接如圖3-2所示。圖3-2 矩陣鍵盤(pán)與單片機(jī)的連接圖注:以上各部分按照電路功能模塊化介紹器件選型、器件特性、電路設(shè)計(jì)思路、電路功能等,要注意與第2小節(jié)中的整體方案設(shè)計(jì)圖相對(duì)應(yīng)。文中出現(xiàn)的電路原理圖同樣不能從資料中裁剪,可從自己設(shè)計(jì)的Proteus圖中拷貝。4. 系統(tǒng)程序設(shè)計(jì)4.1 主程序流程圖單片機(jī)控制I/O口循環(huán)掃描鍵盤(pán)狀態(tài),當(dāng)檢測(cè)到有按鍵按下時(shí),將按鍵信號(hào)輸入單片機(jī),處理并輸出顯示,若無(wú)按鍵按下,則保持前一個(gè)數(shù)據(jù)的顯示狀態(tài)。系統(tǒng)主程序流程圖如圖4-1所示。圖4-1 主程序流程圖4.2 鍵盤(pán)掃描子程序流程圖先檢測(cè)是否有按鍵按下,當(dāng)有按鍵按下時(shí),逐行檢測(cè)每一行的列狀態(tài),將準(zhǔn)確的鍵盤(pán)信
7、號(hào)輸入單片機(jī)。鍵盤(pán)掃描流程圖如圖4-2所示。圖4-2 鍵盤(pán)掃描流程圖4.3 按鍵處理輸出顯示子程序流程圖輸出的子程序包括運(yùn)算數(shù)的輸出和結(jié)果輸出,當(dāng)有數(shù)字鍵按下,之前的數(shù)字左移一位,最新按下的數(shù)字顯示在第一位,當(dāng)有符號(hào)鍵按下,屏幕清零,當(dāng)有等號(hào)鍵按下,判斷運(yùn)算結(jié)果是否符合要求,若符合要求,輸出結(jié)果,不符合要求,輸出報(bào)錯(cuò)提示。輸出顯示子程序流程圖如圖4-3所示。圖4-3按鍵處理顯示輸出子程序流程圖5. 系統(tǒng)調(diào)試這一部分分為Proteus軟件仿真調(diào)試和硬件調(diào)試兩部分,分別給出調(diào)試過(guò)程、調(diào)試時(shí)應(yīng)注意的問(wèn)題,分析遇到的問(wèn)題及問(wèn)題的解決方法,Proteus調(diào)試可截屏運(yùn)行結(jié)果圖形并加以分析。5.1 Prot
8、eus軟件仿真調(diào)試5.2 硬件調(diào)試6. 程序清單#include <reg51.h> #include <math.h> #include <absacc.h> #include <string.h> #include<stdio.h> unsigned char key_scan(); void delay10ms(); unsigned char key_free(); void display(); void display1(unsigned int number1); void display2(unsigned int n
9、umber2); void display3(unsigned int number3); void display4(unsigned int number4); void display_result(); void delay(unsigned int time); void key_deal(); void display_error(); void caculate(); void put_offleds(); unsigned char numbertable=0x3F,0x06,0x5B,0x4F,0x66,0x6d,0x7D,0x07,0x7f,0x6f;/1至9的共陰顯示段碼
10、 unsigned char errortable=0x86;/報(bào)錯(cuò)時(shí)使用的段碼 unsigned char weitable=0xfe,0xfd,0xfb,0xf7; /共陰數(shù)碼管位選 unsigned int temp,temp1,temp2,number1,number2,number3,number4,a1,a2,a3,a4,b1,b2,b3,b4,c1,c2,c3,c4,way,k,k1,waytest,result_test; unsigned int Result;result1,result2,result3,result4,E_test; unsigned char key;
11、 void main() while(1) key_scan(); key_free(); key_deal(); /新的顯示函數(shù) void display() display1(number1); delay(6); display2(number2); delay(6); display3(number3); delay(6); display4(number4); delay(6); void display1(unsigned int number1) P2= weitable3;P1=numbertablenumber1; void display2(unsigned int num
12、ber2) P2= weitable2;P1=numbertablenumber2; void display3(unsigned int number3) P2= weitable1;P1=numbertablenumber3; void display4(unsigned int number4) P2= weitable0;P1=numbertablenumber4; /結(jié)果顯示程序 void display_result() display1(result1); delay(6); display2(result2); delay(6); display3(result3); dela
13、y(6); display4(result4); delay(6); /定義延時(shí)程序 void delay(unsigned int time) unsigned int i,j;for(i=time;i>0;i-) for(j=112;j>0;j-); /按鍵掃描子程序 unsigned char key_scan() P0=0x0f; /對(duì)所有行置高電平,列全為低電平/P0=0xff;temp1=P0;if(temp1!=0x0f) /如果有按鍵按下 /put_offleds(); /delay(3);temp1=P0; /延時(shí)消抖if(temp1!=0x0f) P0=0xf0
14、; /翻轉(zhuǎn)掃描列狀態(tài) /P0=0xff; temp2=P0; if(temp1=0x0e) /若第一行有按鍵按下 k=0; /鍵盤(pán)按下動(dòng)作標(biāo)記 switch(temp2) case 0xe0: /第一列有人按下 key=7;break; case 0xd0: /第二列有人按下 key=8;break; case 0xb0: /若第三列有人按下 key=9;break; case 0x70: /若第四列有人按下 key='/'break; else if (temp1=0x0d) /若第二行有按鍵按下 k=0; /鍵盤(pán)按下動(dòng)作標(biāo)記 switch(temp2) case 0xe0:
15、 /第一列有人按下 key=4;break; case 0xd0: /第二列有人按下 key=5;break; case 0xb0: /若第三列有人按下 key=6;break; case 0x70: /若第四列有人按下 key='*'break; else if(temp1=0x0b) /若第三行有按鍵按下 k=0;/鍵盤(pán)按下動(dòng)作標(biāo)記 switch(temp2) case 0xe0: /第一列有人按下 key=1;break; case 0xd0: /第二列有人按下 key=2;break; case 0xb0: /若第三列有人按下 key=3;break; case 0x7
16、0: /若第四列有人按下 key='-'break; else if (temp1=0x07) /若第4行有按鍵按下 k=0; /鍵盤(pán)按下動(dòng)作標(biāo)記 switch(temp2) case 0xe0: /第一列有人按下 key='.'break; case 0xd0: /第二列有人按下 key=0;break; case 0xb0: /若第三列有人按下 key='='break; case 0x70: /若第四列有人按下 key='+'break; k+=1; return key; /延時(shí)程序 void delay10ms() un
17、signed char i,j; for(i=0;i<25;i+) for(j=0;j<80;j+) /延時(shí)1ms /等待按鍵釋放 unsigned char key_free() key=key_scan(); P0=0x0F; /所有行置高電平 /P0=0xff; temp=P0;while(temp!=0x0F) /如果仍有鍵按下 temp=P0; ; return(key);/返回鍵值 /按鍵處理程序void key_deal() /對(duì)按下次數(shù)初始化 if(key='.') /如果是清零符號(hào) number1=0; number2=0; number3=0;
18、number4=0; /k=0; display(); waytest=0; result_test=0; E_test=0; /嵌入顯示程序 if(key!='+'&&key!='-'&&key!='*'&&key!='/'&&key!='.'&&key!='=') /如果key是數(shù)字 /*if(E_test=1) number1=0; number2=0; number3=0; number4=0; E_test=0
19、; */ if(k=1) number4=number3; number3=number2; /移位顯示 number2=number1;/number1=key; /k1=k; number1=key; /*if(k=5) display_error(); */ display(); /嵌入顯示程序 if(key='+'|key='-'|key='*'|key='/') /如果key是運(yùn)算符 way=key; if(waytest!=1) a1=number1; a2=number2; a3=number3; a4=number
20、4; waytest=1; number1=0; number2=0; number3=0; number4=0; display(); /k=0; /記錄運(yùn)算法則 /合成第一個(gè)運(yùn)算數(shù)字賦值給number1并對(duì)number清零 if(key='=') E_test=1; / k=0; if(waytest=1)/對(duì)第二個(gè)數(shù)進(jìn)行賦值并對(duì)number清零 b1=number1; b2=number2; b3=number3; b4=number4; caculate(); /調(diào)用運(yùn)算程序 if(Result!=0x79) display_result();else display_
21、error(); void display_error() /定義報(bào)錯(cuò)顯示程序 P2=weitable1; P1=0x79; /新的運(yùn)算子程序 void caculate() unsigned int Number1,Number2; Number1=a1+(a2*10)+(a3*100)+(a4*1000); Number2=b1+(b2*10)+(b3*100)+(b4*1000); switch(way) case '+': /加號(hào)運(yùn)算 Result=Number1+Number2; if(a4+b4>9) /報(bào)錯(cuò)標(biāo)記 Result=0x79; break;case
22、 '-': /減法運(yùn)算 Result=Number1-Number2; if(Number1<Number2) Result=0x79; /報(bào)錯(cuò)標(biāo)記 break;/考慮溢出設(shè)計(jì)case '*': /乘法運(yùn)算 Result=Number1*Number2; if(a4*b4!=0|a3*b3!=0) /報(bào)錯(cuò)標(biāo)記 Result=0x79; break;case '/':/除法運(yùn)算 Result=Number1/Number2; if(Number1<Number2) Result=0x79; /報(bào)錯(cuò)標(biāo)記break; default:Result=Number1;break; result4=Result/1000;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 玉溪師范學(xué)院《地圖學(xué)實(shí)驗(yàn)》2021-2022學(xué)年第一學(xué)期期末試卷
- 2024年氣浮電主軸項(xiàng)目建議書(shū)
- 2024紅酒委托代銷合同
- 北京版四年級(jí)上冊(cè)數(shù)學(xué)第四單元 線與角 測(cè)試卷附答案【完整版】
- 山東澤遠(yuǎn)食品科技有限公司供熱系統(tǒng)改建項(xiàng)目環(huán)評(píng)報(bào)告表
- 年產(chǎn)15萬(wàn)張飾面板項(xiàng)目環(huán)評(píng)報(bào)告表
- 2024標(biāo)準(zhǔn)化(全部)復(fù)習(xí)試題附答案
- 專業(yè)化基地服務(wù)部2024年應(yīng)急預(yù)案培訓(xùn)考試(水暖)練習(xí)卷附答案
- 2024民間房產(chǎn)抵押貸款合同樣本
- 2024廣東省集體建設(shè)用地使用權(quán)出租合同范文
- 更好發(fā)揮政府作用說(shuō)課高中政治統(tǒng)編版必修二經(jīng)濟(jì)與社會(huì)
- 《深?!分械纳蕯⑹屡c鏡像闡釋
- 2023年中考英語(yǔ)備考讓步狀語(yǔ)從句練習(xí)題(附答案)
- ISO9001:2015內(nèi)部質(zhì)量審核控制程序
- 柔性生產(chǎn)線設(shè)計(jì)
- 《義務(wù)教育數(shù)學(xué)課程標(biāo)準(zhǔn)(2022年版)》測(cè)試題+答案
- 物業(yè)項(xiàng)目交接計(jì)劃方案
- 2024年河北省職業(yè)院校技能大賽裝配式建筑構(gòu)件安裝(中職組)理論考試題庫(kù)(含答案)
- T-HNKCSJ 002-2023 河南省地源熱泵系統(tǒng)工程技術(shù)規(guī)范
- XX公司安全生產(chǎn)風(fēng)險(xiǎn)管控與隱患排查雙重預(yù)防管理體系手冊(cè)
- 算力平臺(tái)搭建合同
評(píng)論
0/150
提交評(píng)論