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

下載本文檔

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

文檔簡介

1、目錄第一章 引言31.1 簡述簡易計算器.31.2 本設(shè)計主要任務(wù).31.3 系統(tǒng)主要功能.4第二章 系統(tǒng)主要硬件電路設(shè)計.42.1 系統(tǒng)的硬件構(gòu)成及功能.4 2.2 鍵盤電路設(shè)計.5 2.3 顯示電路設(shè)計.6第三章 系統(tǒng)軟件設(shè)計.73.1 計算器的軟件規(guī)劃.7 3.2 鍵盤掃描的程序設(shè)計.7 3.3 顯示模塊的程序設(shè)計.8 3.4 主程序的設(shè)計.9 3.5 軟件的可靠性設(shè)計.9第四章 調(diào)試.9第五章 結(jié)束語.10參考文獻.11附錄源程序.11第一章 引言1.1 簡述簡易計算器近幾年單片機技術(shù)的發(fā)展很快,其中電子產(chǎn)品的更新速度迅猛。計算器是日常生活中比較的常見的電子產(chǎn)品之一。如何才能使計算器技

2、術(shù)更加的成熟,充分利用已有的軟件和硬件條件,設(shè)計出更出色的計算器呢?本設(shè)計是以AT89S52單片機為核心的計算器模擬系統(tǒng)設(shè)計,輸入采用4×6矩陣鍵盤,可以進行加、減、乘、除9位帶符號數(shù)字運算,并在LCD1602上顯示操作過程??萍嫉倪M步告別了以前復(fù)雜的模擬電路,一塊幾厘米平方的單片機可以省去很多繁瑣的電路。現(xiàn)在應(yīng)用較廣泛的是科學(xué)計算器,與我們?nèi)粘K玫暮唵斡嬎闫饔休^大差別,除了能進行加減乘除,科學(xué)計算器還可以進行正數(shù)的四則運算和乘方、開方運算,具有指數(shù)、對數(shù)、三角函數(shù)、反三角函數(shù)及存儲等計算功能。計算器的未來是小型化和輕便化,現(xiàn)在市面上出現(xiàn)的使用太陽能電池的計算器,使用ASIC設(shè)計的

3、計算器,如使用純軟件實現(xiàn)的計算器等,未來的智能化計算器將是我們的發(fā)展方向,更希望成為應(yīng)用廣泛的計算工具。1.2 本設(shè)計主要任務(wù)以下是初步設(shè)定的矩陣鍵盤簡易計算器的功能:1.擴展4*6鍵盤,其中10個數(shù)字,5個功能鍵,1個清零2.強化對于電路的焊接3.使用五位數(shù)碼管接口電路4. 完成十進制的四則運算(加、減、乘、除); 5. 實現(xiàn)結(jié)果低于五位的連續(xù)運算;6. 使用keil 軟件編寫程序,使用匯編語言; 7. 最后用ptoteus模擬仿真;8.學(xué)會對電路的調(diào)試1.3 系統(tǒng)主要功能本設(shè)計是一個實現(xiàn)加減乘除的計算器,它的硬件主要由四部分構(gòu)成,一個8051單片機芯

4、片,兩個八段共陰極數(shù)碼管,一個4*4鍵盤,它可以實現(xiàn)一位數(shù)的加減乘除運算。顯示部分:采用LED動態(tài)顯示。按鍵部分:采用4*4鍵盤。采用軟件識別鍵值,并執(zhí)行相應(yīng)的操作。第二章 系統(tǒng)主要硬件電路設(shè)計2.1 系統(tǒng)的硬件構(gòu)成及功能主要用到的硬件:AT89S52 LCD液晶顯示屏 編碼鍵盤 硬件分配:1、P0、P3口:做為輸出口,控制LCD液晶顯示屏顯示數(shù)據(jù)的結(jié)果。2、P1口:做為輸入口,與鍵盤連接,實現(xiàn)數(shù)據(jù)的輸入。3、LCD液晶顯示屏顯示輸出。為了更好的實現(xiàn)系統(tǒng)得功能,硬件電路的設(shè)計應(yīng)該遵循以下原則:1、優(yōu)化硬件電路采用軟件設(shè)計與硬件設(shè)計相結(jié)合的方法;盡管采用軟件來實現(xiàn)硬件系統(tǒng)的功能時,也許響應(yīng)時間會

5、比單純使用硬件時長,而且還要占用微處理器(MCU)的時間;但是,用軟件實現(xiàn)硬件的功能可以簡化硬件結(jié)構(gòu),提高電路的可靠性。所以,在設(shè)計本系統(tǒng)得時候,在滿足可靠性和實時性的前提下,盡可能的通過軟件來實現(xiàn)硬件功能。2、可靠性及抗干擾設(shè)計根據(jù)可靠性設(shè)計理論,系統(tǒng)所用芯片數(shù)量越少,系統(tǒng)的平均無故障時間越長。而且,所用芯片數(shù)量越少,地址和數(shù)據(jù)總線在電路板上受干擾的可能性也就越小。因此,系統(tǒng)的設(shè)計思想是在滿足功能的情況下力爭使用較少數(shù)量的芯片。3、靈活的功能擴展功能擴展是否靈活是衡量一個系統(tǒng)優(yōu)劣的重要指標。一次設(shè)計往往不能完全考慮到系統(tǒng)的各個方面,系統(tǒng)需要不斷完善以及進行功能升級。進行功能擴展時,應(yīng)該在原有

6、設(shè)計的基礎(chǔ)上,通過修改軟件程序和少量硬件完成。對于本系統(tǒng)而言,就是要求在系統(tǒng)硬件不變的情況下,能夠通過修改軟件程序,完成功能的升級和擴展。根據(jù)第提出的系統(tǒng)設(shè)計方案,結(jié)合以上三條原則,確定了系統(tǒng)硬件的設(shè)計。計算器主要由以下一些功能模塊構(gòu)成:非編碼鍵盤模塊、LCD液晶顯示屏模塊等。該系統(tǒng)的硬件設(shè)計采用了模塊化的設(shè)計方法。AT89S52 單片機與LCD液晶顯示屏顯示電路是整個電路的核心,它們實現(xiàn)系統(tǒng)的功能要求。簡易計算器主要包括:鍵盤電路,顯示電路。下圖為總體硬件結(jié)構(gòu)。(如圖2-1 所示為整個系統(tǒng)的原理圖)圖2-1 計算器原理圖前面敘述了該系統(tǒng)的設(shè)計說明,系統(tǒng)采用了比較簡單的設(shè)計方案,所以該系統(tǒng)的硬

7、件設(shè)計的總外圍電路不會產(chǎn)生過多的干擾。在下面的闡述中,對系統(tǒng)的外圍電路分別予以介紹。鍵盤部分采用編碼鍵盤,顯示部分采用LCD液晶顯示屏完全能夠很好的實現(xiàn)顯示方面的要求。2.2 鍵盤電路的設(shè)計鍵盤可分為兩類:編碼鍵盤和非編碼鍵盤。編碼鍵盤是較多按鍵(20個以上)和專用驅(qū)動芯片的組合,當按下某個按鍵時,它能夠處理按鍵抖動、連擊等問題,直接輸出按鍵的編碼,無需系統(tǒng)軟件干預(yù)。通用計算機使用的標準鍵盤就是編碼鍵盤。在智能儀器中,使用并行接口芯片8279或串行接口芯片HD7279均可以組成編碼鍵盤,同時還可以兼顧數(shù)碼管的顯示驅(qū)動,其相關(guān)的接口電路和接口軟件均可在芯片資料中得到。當系統(tǒng)功能比較復(fù)雜,按鍵數(shù)量

8、很多時,采用編碼鍵盤可以簡化軟件設(shè)計。非編碼鍵盤成本低廉。 從成本角度出發(fā),本設(shè)計選用的是非編碼鍵盤。如圖2-2圖2-2 編碼鍵盤電路2.3 顯示電路的設(shè)計當系統(tǒng)需要顯示少量數(shù)據(jù)時,采用LCD液晶顯示屏進行顯示是一種經(jīng)濟實用的方法。P0口作為液晶顯示的數(shù)據(jù)端口,P3.5-P3.7口作為其控制端口,控制LCD液晶顯示屏顯示輸出數(shù)據(jù)。最終電路如圖2.3所示: 圖2.3 LCD液晶顯示屏顯示第三章 系統(tǒng)軟件設(shè)計3.1計算器的軟件規(guī)劃簡易計算器的程序主要包括以下功能模塊: 1、定時查鍵模塊,分為讀鍵程序、判鍵程序段、運算操作子程序等部分; 2、基于LCD液晶顯示屏的顯示模塊; 3、主模塊,為系統(tǒng)的初始

9、化。 3.2 鍵盤掃描的程序設(shè)計鍵盤掃描子程序,首先讀出P1的低四位,然后讀出P1口的高四位。然后鍵值并顯示緩存。然后將鍵如的值轉(zhuǎn)換為ASCII碼然后就可以軟件來設(shè)置硬件按鍵各個鍵代表的內(nèi)容。 讀鍵程序使用的是反轉(zhuǎn)法讀鍵,不管鍵盤矩陣的規(guī)模大小,均進行兩次讀鍵。第一次所有行線均輸出低電平,從所有讀入鍵盤信息(列信息);第二次所有列線均輸出低電平,從所有行線讀入鍵盤信息(行信息)。數(shù)字鍵按下則將相應(yīng)的數(shù)字送入緩存區(qū),功能鍵按下則執(zhí)行相應(yīng)的程序。 3.3 顯示模塊的程序設(shè)計顯示模塊程序首先要對顯示模塊進行初始化;然后控制光標的位置;定義液晶顯示的控制端口,用SBIT指令完成;然后設(shè)置清屏、關(guān)閉顯示

10、、歸位、開顯示、顯示位置的首地址等等。顯示模塊的流程圖如圖3.3所示:延時程序開始檢測LED是否在忙掃描鍵盤Y N加減乘除運算子程序液晶顯示結(jié)束圖5.3模塊的流程圖3.4 主程序的設(shè)計 主程序主要是用來對LCD液晶顯示屏進行初始化的。3.5 軟件的可靠性設(shè)計 提高本儀器其可靠性措施主要有: 1、為防止程序跑飛,軟件中設(shè)置了軟件陷阱。 2、為防止程序死循環(huán),軟件中使用了看門狗技術(shù)。第四章 調(diào)試Keil調(diào)試與仿真KEIL C51標準 C編譯器是眾多單片機應(yīng)用開發(fā)的優(yōu)秀軟件之一,它集編輯、編譯、仿真于一體,支持匯編、PLM 語言和 C 語言的程序設(shè)計。1. 啟動 KEIL C51 進入編輯界面 建立

11、一個新工程:單擊Project菜單,在彈出的下拉菜單中選中 New Project選項。選擇保存路徑,輸入工程文件名。2. 工程文件保存完畢之后,提示選擇單片機的型號。KEIL支持近乎所有51核的單片機。單擊 File菜單,選擇New。3.文件保存:使用匯編編寫,文件后綴名為.asm或 a51。完成后,單擊“保存”按鈕保存文件。4.在Source Group 上單擊右鍵,找到剛才保存的源文件 ,然后添加ADD 5. 在編輯完成之后,需要進行程序的編譯。點開Project選項,單擊 Build target;或是利用快捷鍵 F7。 6. 在程序調(diào)試的時候,點擊Debug 選項,選擇 Start/

12、Stop Debug Session。 7. 以上是使用 KEIL建立一個完整工程文件的過程。下載到單片機之中,則需要 生 成 HEX 文 件 。 單 擊 “Project” 菜 單 , 再 在 下 拉 菜 單 中 單 擊出現(xiàn)選項對話框。在選項對話框的“Output”頁面對話框中,單擊“Create HEX File” 選項,使程序編譯后產(chǎn)生 HEX 代碼,供下載器軟件使用。 4.2.調(diào)試過程 在Debug調(diào)試下,如有錯誤時,下面窗口將有提示說明錯誤個數(shù)和具體哪一行有錯,還有對于錯誤的說明,大多數(shù)格式使用不當,此時在那一行前后仔細檢查,要考慮格式,語法等基本性錯誤。 即使調(diào)試沒錯時,程序也不是

13、代表完全正確,需要結(jié)合硬件來確定改程序的功能是否完全實現(xiàn)了。圖4-1keil調(diào)試圖 圖4-1keil調(diào)試圖第五章 結(jié)束語 選擇這個課題的時候,完全是由于興趣,因為覺得這個課題比較的有意思,比較貼近生活。參考了一些范文和參考書后,作出了這篇設(shè)計報告。在期間,感覺自己的視野和對于單片機的應(yīng)用都有了新的認識和拓展。 在硬件的制作過程中我走了好多的彎路,主要是在系統(tǒng)還沒有設(shè)計很有把握就開始動手制作了。后來發(fā)現(xiàn)與設(shè)計的要求還有偏差,反復(fù)的改過了幾次,浪費了大量的時間和體力。感受到設(shè)計人員要有耐心,要認真的從要求開始研究。軟件的編寫過程中費了很大的力氣,因為軟件的編寫要求很高,要很細心,一不小心就會調(diào)用錯

14、誤,很深刻的體會到作為軟件編程人員是絕不能粗心大意的。一個程序的完成的速度和質(zhì)量高低與細心與否有著很大聯(lián)系。編程時,我充分使用了結(jié)構(gòu)化的思想。這樣因為語句較少,程序調(diào)試比較方便,功能模塊可以逐一的調(diào)試,充分體現(xiàn)了結(jié)構(gòu)化編程的優(yōu)勢。當每個模塊都完成時,將其功能加到一起就完成了整體的設(shè)計。參考文獻【1】張靖武,周靈杉.單片機系統(tǒng)的PROTEUS設(shè)計與仿真M.北京:北京電子工業(yè)出版社【2】靳達.求是科技.單片機應(yīng)用系統(tǒng)開發(fā)實例導(dǎo)航M.:人民郵電出版社,2006【3】劉守義. 單片機應(yīng)用技術(shù)M.:西安電子科技大學(xué)出版社,2001【4】林志琦.基于PROTEUS的單片機可視化軟硬件仿真M.北京:北京航空

15、航天大學(xué)出版社,2006【5】胡漢才.單片機原理及接口技術(shù).清華大學(xué)出版社,1996【6】徐江海.單片機實用教程M.北京:機械工業(yè)出版社,2007.【7】肖洪兵. 跟我學(xué)用單片機. 北京:北京航空航天大學(xué)出版社,2002.8【8】夏繼強. 單片機實驗與實踐教程. 北京:北京航空航天大學(xué)出版社, 2001【9】譚浩強. C語言程序設(shè)計M.北京:清華大學(xué)出版社,2000.【11】張磊. C語言程序設(shè)計M.北京:高等教育出版社,2005.【12】嚴桂蘭. C語言程序設(shè)計M.廈門:廈門大學(xué)出版社,2006附錄 源程序/*- 名稱:液晶顯示計算器 日期:2012.11.30 內(nèi)容:整數(shù)之間運算,沒有小數(shù)

16、所有除法得出的結(jié)果不正確,有負號運算,-*/#include<reg52.h> /包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義#include<stdio.h>#define KeyPort P1#define DataPort P0 /定義數(shù)據(jù)端口 程序中遇到DataPort 則用P0 替換sbit LATCH1=P22;/定義鎖存使能端口 段鎖存sbit LATCH2=P23;/ 位鎖存unsigned char code dofly_DuanMa10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6

17、f;/ 顯示段碼值09unsigned char code dofly_WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分別對應(yīng)相應(yīng)的數(shù)碼管點亮,即位碼unsigned char TempData8; /存儲顯示值的全局變量extern unsigned char TempData8; /存儲顯示值的全局變量extern unsigned char code dofly_DuanMa10;/*- 顯示函數(shù),用于動態(tài)掃描數(shù)碼管 輸入?yún)?shù) FirstBit 表示需要顯示的第一位,如賦值2表示從第三個數(shù)碼管開始顯示 如輸入0表示從第一個顯示。 Num表示

18、需要顯示的位數(shù),如需要顯示99兩位數(shù)值則該值輸入2-*/*-按鍵掃描函數(shù),返回掃描鍵值-*/unsigned char KeyScan(void); /鍵盤掃描函數(shù),使用行列反轉(zhuǎn)掃描法/*-按鍵值處理函數(shù),返回掃鍵值-*/unsigned char KeyPro(void);void Display(unsigned char FirstBit,unsigned char Num);/*- 定時器初始化子程序-*/void Init_Timer0(void);/*- uS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值 unsigned char 是定義無符號字符變量,其值的范

19、圍是 0255 這里使用晶振12M,精確延時請使用匯編,大致延時 長度如下 T=tx2+5 uS -*/void DelayUs2x(unsigned char t);/*- mS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值 unsigned char 是定義無符號字符變量,其值的范圍是 0255 這里使用晶振12M,精確延時請使用匯編-*/void DelayMs(unsigned char t);/*- 主程序-*/main() unsigned char num,i,sign; unsigned char temp8; /最大輸入8個 bit firstflag; i

20、nt a=0,b=0; unsigned char s; Init_Timer0(); /初始化定時器0while (1) /主循環(huán) num=KeyPro(); /掃描鍵盤 if(num!=0xff) /如果掃描是按鍵有效值則進行處理 if(i=0) /輸入是第一個字符的時候需要把改行清空,方便觀看 for(s=0;s<8;s+) /賦值完成后把緩沖區(qū)清零,防止下次輸入影響結(jié)果 TempDatas=0; if('+'=num)| (i=8) | ('-'=num) | ('x'=num)| ('/'=num) | ('

21、;='=num)/輸入數(shù)字最大值8,輸入符號表示輸入結(jié)束 i=0; /計數(shù)器復(fù)位 if(firstflag=0) /如果是輸入的第一個數(shù)據(jù),賦值給a,并把標志位置1,到下一個數(shù)據(jù)輸入時可以跳轉(zhuǎn)賦值給b sscanf(temp,"%d",&a);/從一個字符串輸入到變量 firstflag=1; else sscanf(temp,"%d",&b); for(s=0;s<8;s+) /賦值完成后把緩沖區(qū)清零,防止下次輸入影響結(jié)果 temps=0; if(num!='=') /判斷當前符號位并做相應(yīng)處理 sign=

22、num; /如果不是等號記下標志位 else firstflag=0; /檢測到輸入=號,判斷上次讀入的符合 switch(sign) case '+':a=a+b;break;case '-':a=a-b;break;case 'x':a=a*b;break;case '/':a=a/b;break;default:break; sprintf(temp,"%d",a); /打印十進制到臨時緩沖區(qū) for(s=0;s<8;s+) /由于打印的是ASCII碼值 if(temps=0) /所以需要轉(zhuǎn)換,如果

23、為0表示null 數(shù)碼管上則不能顯示,所以賦值0 TempDatas=0;else if(temps=0x2d)/表示負號,數(shù)碼管顯示負號 0x40 TempDatas=0x40; else TempDatas=dofly_DuanMatemps-'0'/其他0-9負號則進行ASCII 到 數(shù)字處理,如當前是'3',用'3'-'0'=3 /'3'的16進制是0x33,'0'的16進制是0x30 sign=0;a=b=0; /用完后所有數(shù)據(jù)清零 for(s=0;s<8;s+) temps=0;

24、elseif(i<16) tempi=num+'0' TempDatai=dofly_DuanManum;/輸出數(shù)據(jù) i+; /輸入數(shù)值累加 /*-按鍵掃描函數(shù),返回掃描鍵值-*/unsigned char KeyScan(void) /鍵盤掃描函數(shù),使用行列反轉(zhuǎn)掃描法 unsigned char cord_h,cord_l;/行列值中間變量 KeyPort=0x0f; /行線輸出全為0 cord_h=KeyPort&0x0f; /讀入列線值 if(cord_h!=0x0f) /先檢測有無按鍵按下 DelayMs(10); /去抖 if(KeyPort&0

25、x0f)!=0x0f) cord_h=KeyPort&0x0f; /讀入列線值 KeyPort=cord_h|0xf0; /輸出當前列線值 cord_l=KeyPort&0xf0; /讀入行線值 while(KeyPort&0xf0)!=0xf0);/等待松開并輸出 return(cord_h+cord_l);/鍵盤最后組合碼值 return(0xff); /返回該值/*- 按鍵值處理函數(shù),返回掃鍵值 可以根據(jù)需要改變返回值 | 1 | 2 | 3 | + | | 4 | 5 | 6 | - | | 7 | 8 | 9 | * | | 0 | . | = | / | -

26、*/unsigned char KeyPro(void) switch(KeyScan() case 0x7e:return 1 ;break;/0 按下相應(yīng)的鍵顯示相對應(yīng)的碼值 case 0x7d:return 2 ;break;/1 case 0x7b:return 3 ;break;/2 case 0x77:return '+'break;/3 case 0xbe:return 4 ;break;/4 case 0xbd:return 5 ;break;/5 case 0xbb:return 6 ;break;/6 case 0xb7:return '-'

27、break;/7 case 0xde:return 7 ;break;/8 case 0xdd:return 8 ;break;/9 case 0xdb:return 9 ;break;/a case 0xd7:return 'x'break;/b case 0xee:return 0 ;break;/c case 0xed:return '.'break;/d case 0xeb:return '='break;/e case 0xe7:return '/'break;/f default:return 0xff;break; /*- 顯示函數(shù),用于動態(tài)掃描數(shù)碼管 輸入?yún)?shù) FirstBit 表示需要顯示的第一位,如賦值2表示從第三個數(shù)碼管開始顯示 如輸入0表示從第一個顯示。 Num表示需要顯示的位數(shù),如需要顯示99兩

溫馨提示

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

評論

0/150

提交評論