基于msc51單片機實現的四位4乘4矩陣鍵盤計算器的C語言程序及其PROUES電路和仿真課程設計報告_第1頁
基于msc51單片機實現的四位4乘4矩陣鍵盤計算器的C語言程序及其PROUES電路和仿真課程設計報告_第2頁
基于msc51單片機實現的四位4乘4矩陣鍵盤計算器的C語言程序及其PROUES電路和仿真課程設計報告_第3頁
基于msc51單片機實現的四位4乘4矩陣鍵盤計算器的C語言程序及其PROUES電路和仿真課程設計報告_第4頁
基于msc51單片機實現的四位4乘4矩陣鍵盤計算器的C語言程序及其PROUES電路和仿真課程設計報告_第5頁
已閱讀5頁,還剩19頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、單片機原理及接口技術課程設計報告設計題目:計算器設計信息與電氣工程學院二零一三年七月計算器設計單片機體積小,功耗小,價格低,用途靈活,無處不在,屬專用計算機.是 一種特殊器件,需經過專門學習方能掌握應用, 應用中要設計專用的硬件和軟件. 近年來,單片機以其體積小、價格廉、面向限制等獨特優點,在各種工業限制、 儀器儀表、設備、產品的自動化、智能化方面獲得了廣泛的應用.與此同時,單 片機應用系統的可靠性成為人們越來越關注的重要課題. 影響可靠性的因素是多 方面的,如構成系統的元器件本身的可靠性、 系統本身各局部之間的相互耦合因 素等.其中系統的抗干擾性能是系統可靠性的重要指標.數學是科技進步的重要

2、工具, 數據的運算也隨著科技的進步越發變得繁瑣復 雜,計算器的出現可以大大解放人在設計計算過程中的工作量,使計算的精度、 速度得到改善,通過 msc51 單片機,矩陣鍵盤和 LED 數碼管可以實現簡單的四 位數的四那么運算和顯示,并當運算結果超出范圍時予以報錯. 注:這一局部主要描述題目的背景和意義, 對設計所采取的主要方法做一下簡要 描述.字數不要太多, 300-500 字.另注:本文要當做模板使用,不要隨意更改字體、字號、行間距等,學會使用格 式刷.文中給出的各項內容都要在大家的報告中表達, 可采用填空的方式使用本 模板.1. 設計任務結合實際情況,基于 AT89C51 單片機設計一個計算

3、器.該系統應滿足的功 能要求為:(1) 實現簡單的四位十進制數字的四那么運算;(2) 按鍵輸入數字,運算法那么;(3) LED 數碼管移位顯示每次輸入的數據和運算結果;(4) 當運算結果超出范圍時實現報錯.主要硬件設備:AT89C51單片機、LED數碼管、矩陣鍵盤.注:這一局部需要寫明系統功能需求, 用到的主要硬件 (參考實驗箱的說明書)2. 整體方案設計計算器以AT89C51單片機作為整個系統的限制核心,應用其強大的 I/O功 能和計算速度,構成整個計算器.通過矩陣鍵盤輸入運算數據和符號, 送入單片 機進行數據處理.經單片機運算后判斷是否超出要求的運算范圍,限制LED數碼管的輸出原理圖如圖2

4、-1所示.圖2-1基于單片機的變頻調速恒壓供水系統原理圖本系統硬件主要由矩陣鍵盤、I/O輸入輸出、顯示系統等幾局部組成. 各模塊的主要功能如下:(1) 矩陣鍵盤將十六進制編碼的數字傳入單片機.(2) 單片機掃描鍵盤信號并接收,對輸入的鍵盤信號進行處理(3) LED以動態掃描的方式移位顯示每次輸入的數據和最后的運算結果. 系統的整體設計方案設計圖如圖2-2所示.圖2-2系統的整體方案設計圖注:文中出現的所有框圖、流程圖都要用 VISIO畫,不允許從文檔中裁剪然后 粘貼.要注意圖的格式,圖中的文字大小不要大于正文,圖題用五號宋體,居中3. 系統硬件電路設計3.1時鐘電路本設計采用外部時鐘方式,使用

5、外部振蕩器產生脈沖信號,采用12MHz的石英晶體振蕩器,結構如圖3-1 oC11nFC21nFR210kR110kC31uFX1CRYSTAL1918293031U123-415L67-81*1XTAL1XTAL2RSTPSENALEEAP1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51PO.O/ADO383736353433322122232425262728101112131415161739P0.1/AD1P0.4/AD4P0.5/AD5P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.4/T0P3.5/T1P0.2/AD2P0.3/AD3

6、P0.6/AD6P0.7/AD7P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.0/A8P2.1/A9P3.6/WRP3.7/RDP3.2/INT0P3.3/INT1圖3-1時鐘電路和復位電路3.2復位電路本設計采用按鍵手動電平復位電路,通過RST端經電阻與電源Vcc接通而實 現,結構如圖3-1 o3.3數碼管顯示電路本設計所用數碼管顯示電路采用 4位紅色共陰極數碼管接上拉電阻實現,其結構如圖3-2圖3-2數碼管顯示電路3.4鍵盤輸入電路本設計采用4*4矩陣鍵盤實現數據和運算法那么的輸入.按鍵設置在行、列線 的交點上,行列線分別連接的按鍵開關的兩端,并通過上來電阻街道+5

7、V上.無 按鍵按下時,行、列線均處于高電平,當有按鍵按下是,相對應的行和列電平為 低電平.此特點也用于單片機I/O 口對矩陣鍵盤的掃描.矩陣鍵盤和單片機的連接如圖3-2所示.圖3-2矩陣鍵盤與單片機的連接圖注:以上各局部根據電路功能模塊化介紹器件選型、器件特性、電路設計思路、電路功能等,要注意與第2小節中的整體方案設計圖相對應.文中出現的電路原 理圖同樣不能從資料中裁剪,可從自己設計的Proteus圖中拷貝.4. 系統程序設計4.1主程序流程圖單片機限制I/O 口循環掃描鍵盤狀態,當檢測到有按鍵按下時,將按鍵信號 輸入單片機,處理并輸出顯示,假設無按鍵按下,那么保持前一個數據的顯示狀態.系統主

8、程序流程圖如圖4-1所示.開始圖4-1主程序流程圖4.2鍵盤掃描子程序流程圖先檢測是否有按鍵按下,當有按鍵按下時,逐行檢測每一行的列狀態,將準 確的鍵盤信號輸入單片機.鍵盤掃描流程圖如圖4-2所示開始掃描鍵盤*是否有按鍵按下 4:、IY圖4-2鍵盤掃描流程圖4.3按鍵處理輸出顯示子程序流程圖輸出的子程序包括運算數的輸出和結果輸出, 當有數字鍵按下,之前的數字 左移一位,最新按下的數字顯示在第一位,當有符號鍵按下,屏幕清零,當有等 號鍵按下,判斷運算結果是否符合要求,假設符合要求,輸出結果,不符合要求, 輸出報錯提示.輸出顯示子程序流程圖如圖4-3所示.開始有按鍵按下是否是數是否是丫青零鍵上一次

9、輸出結果左移一位最新結果顯示在個位之前輸入的數據保存對屏幕清零處理, 將之前的數據保存以作 運算用是否是運、. N-算鍵嚴是否是等、號鍵清零所有數據和顯示結束圖4-3按鍵處理顯示輸出子程序流程圖5. 系統調試這一局部分為Proteus軟件仿真調試和硬件調試兩局部,分別給出調試過程、 調試時應注意的問題,分析遇到的問題及問題的解決方法,Proteus調試可截屏運行結果圖形并加以分析.5.1 Proteus軟件仿真調試5.2硬件調試6. 程序清單#in elude <reg51.h>#in elude <math.h>#in elude <absaee.h>#i

10、n elude <stri ng.h>#in elude<stdio.h>un sig ned ehar key_sca n();void delay10ms();un sig ned ehar key_free();void display();void display1( un sig ned int nu mberl);void display2( un sig ned int nu mber2);void display3( un sig ned int nu mber3);void display4 (un sig ned int nu mber4);void

11、 display_result();void delay (un sig ned int time);void key_deal();void display_error();void eaeulate();void put_offleds();ehar共陰數碼管intintun sig nednumbertable=0x3F,0x06,0x5B,0x4F,0x66,0x6d,0x7D,0x07,0x7f,0x6f;/1 至9的共陰顯示段碼un sig ned ehar errortable=0x86;報錯時使用的段碼un sig nedehar weitable=0xfe,0xfd,0xfb

12、,0xf7;/位選un sig nedtemp,temp1,temp2, nu mberl, nu mber2 ,nu mber3 ,nu mber4,a1,a2,a3,a4,b1,b 2,b3,b4,c1,c2,c3,e4,way,k,k1,waytest,result_test;un sig nedResult;result1,result2,result3,result4,E_test;un sig ned ehar key;void mai n()while(1)key_sea n();key_free();key_deal();/新的顯示函數void display.display1

13、( nu mberl);delay(6);display2( nu mber2);delay(6);display3 (nu mber3);delay(6);display 4(nu mber4); delay(6);void display1( un sig ned int nu mber1)P2= weitable3;P仁nu mbertable nu mber1;void display2( un sig ned int nu mber2)P2= weitable2;P仁nu mbertable nu mber2;void display3( un sig ned int nu mber

14、3)P2= weitable1;P仁nu mbertable nu mber3;void display4 (un sig ned int nu mber4)P2= weitable0;P仁nu mbertable nu mber4;/結果顯示程序void display_result()display1(result1);delay(6);display2(result2);delay(6); display3(result3);delay(6); display4(result4);delay(6);/定義延時程序void delay (un sig ned int time) un si

15、g ned int i,j;for(i=time;i>0;i-) for(j=112;j>0;j-); ;/按鍵掃描子程序un sig ned char key_sca n()全為低電平P0=0x0f;PO=Oxff; temp1=P0;/對所有行置高電平,列if(temp1!=0x0f)put_offleds();/delay(3);/如果有按鍵按下temp1=P0; if(temp1!=0x0f)/延時消抖態P0=0xf0;PO=Oxff;temp2=P0;/翻轉掃描列狀鍵按下if(temp1=0x0e)/假設第一行有按作標記k=0;/ 鍵盤按下動switch(temp2)ca

16、se OxeO:/第一列有人按下第二列有人按下假設第三列有人按下假設第四列有人按下key=7;break;case OxdO:/key=8;break;case 0xb0:/key=9;break;case 0x70:/key='/'break;else if (temp1=OxOd)/假設第二行有按鍵按下k=0;switch(temp2) case 0xe0:/key=4;break;case 0xd0:/key=5;break;case 0xb0: key=6;break;case 0x70: key='*'break;II鍵盤按下動作標記第一列有人按下第二

17、列有人按下II假設第三列有人按下II假設第四列有人按下else if(temp1=OxOb) II k=0;switch(temp2)case 0xe0: key=1;break;case 0xd0: key=2;break;case 0xb0: key=3;break;case 0x70: key='-'break;else if (temp1=0x07)假設第三行有按鍵按下II鍵盤按下動作標記II第一列有人按下II第二列有人按下II假設第三列有人按下II假設第四列有人按下II假設第4有按鍵按下k=0;II鍵盤按下動作標記switch(temp2)第一列有人按下第二列有人按下

18、/假設第三列有人按下/假設第四列有人按下 case OxeO:/key='.'break;case OxdO:/key=O;break;case 0xb0: key='='break; case 0x70: key='+'break;k+=1;return key;/延時程序void delay10ms()un sig ned char i,j;for(i=0;i<25;i+)for(j=0;j<80;j+)/ 延時1ms/等待按鍵釋放un sig ned char key_free()key=key_sca n();P0=0x0F;

19、 /所有行置高電平PO=Oxff;temp=P0;while(temp!=OxOF) /如果仍有鍵按下temp=P0;return(key);/返回鍵值/按鍵處理程序void key_deal()/對按下次數初 始化if(key='.')/如果是清零符號nu mber1=0;nu mber2=0;nu mber3=0;nu mber4=0;/k=0;display();waytest=0;result_test=O; E_test=0;/嵌入顯示程序if(key!='+'&&key!='-'&&key!='

20、*'&&key!='/'&&key!='.'&&key!='=')/如果key是數字/*if(E_test=1)nu mber1=0;nu mber2=0;nu mber3=0;nu mber4=0;E_test=0; */if(k=1)nu mber4=nu mber3;nu mber3=nu mber2;nu mber2=nu mberl;nu mber仁key;/k1=k;nu mber仁key;/*if(k=5) display_error();*/display();/if(key

21、='+'|key='-'|key='*'|key='/')/如果key是運算符way=key;if(waytest!=1)a1= nu mber1;a2=nu mber2;a3=nu mber3;a4=nu mber4;waytest=1;nu mber1=0;nu mber2=0;nu mber3=0;nu mber4=0;display();/ 移位顯示嵌入顯示程序/k=0;/記錄運算法那么/ 合成第一個運算數字賦值給numberl 并對number清零 if(key='=')E_test=1;/ k=0;if

22、(waytest=1)/對第二個數進行賦值并對number清零b1= nu mberl;b2=nu mber2;b3=nu mber3;b4=nu mber4; caculate();/調用運算程序if(Result!=0x79) display_result();else display_error();/定義報錯顯示程序void display_error() P2=weitable1;P仁0 x79;/新的運算子程序void caculate()un sig ned int Number1,Number2;Number仁a1+(a2*10)+(a3*100)+(a4*1000);Numb

23、er2=b1+(b2*10)+(b3*100)+(b4*1000); switch(way)case '+':Result=Number1+Number2;if(a4+b4>9)Result=0x79;break;case '-':Result=Number1-Number2; if(Number1<Number2) /加號運算/報錯標記/減法運算/報錯標記Result=0x79;break;case '*':Result=Number1*Number2; if(a4*b4!=0|a3*b3!=0) Result=0x79;break;case '/':Result=Number1/Number2; if(Number1<Number2) Result=0x79;break;default:Result=Number1; break; result4=Result/1000; result3=Result%1000/1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論