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

下載本文檔

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

文檔簡介

1、單片機課程設計課程設計報告書課題名稱簡易計算器的設計姓 名周運鴻學 號08專 業(yè)電氣工程與其自動化指導教師皮大能機電與控制工程學院 年 月 日摘 要近年來隨著科技的飛速發(fā)展,單片機的應用正在不斷深入,同時帶動傳統(tǒng)控制檢測技術日益更新。在實時檢測和自動控制的單片機應用系統(tǒng)中,單片機往往作為一個核心部件來使用,但僅單片機方面的知識是不夠的,還應根據(jù)具體硬件結構、軟硬件結合,來加以完善。計算機在人們的日常生活中是比較常見的電子產(chǎn)品之一??墒撬€在發(fā)展之中,以后必將出現(xiàn)功能更加強大的計算機,基于這樣的理念,本次設計是用AT89S51單片機、LCD顯示器、控制按鍵為元件來設計的計算器。利用此設計熟悉單片

2、機微控制器與C語言編程,對其片資源與各個I/O端口的功能和基本用途的了解。掌握keil應用程序開發(fā)環(huán)境,常用的LCD顯示器的使用方法和一般鍵盤的使用方法。關鍵詞:51單片機;LCD;控制按鍵目 錄1 課程設計容2 1.1任務容2 1.2任務分析22計算器設計基本原理32.1 AT89C51系列單片機簡介32.2 LCD顯示模塊62.3 運算模塊 82.4鍵盤接口電路93 主程序設計104結論4系統(tǒng)仿真圖221. 課程設計容1.1 任務容本系統(tǒng)就是充分利用了8051芯片的I/O引腳。系統(tǒng)以采用MCS-51系列單片機Intel8051為中心器件來設計計算器控制器,實現(xiàn)了能根據(jù)實際輸入值顯示并存儲的

3、功能,計算程序則是參照教材。至于位數(shù)和功能,如果有需要可以通過設計擴充原系統(tǒng)來實現(xiàn) 。具體設計如下:1、由于要設計的是簡單的計算器,可以進行四則運算,為了得到教好的顯示效果,采用LCD顯示數(shù)據(jù)和結果。2、另外鍵盤包括數(shù)字鍵(0-9)、符號鍵(+、-、*、/)、等號鍵,故只需要16個按鍵即可,設計中采用手焊接的4*4矩陣鍵盤。3、執(zhí)行程序:開機顯示零,等待鍵入數(shù)值,當鍵入數(shù)字,通過LCD顯示出來,當鍵入+、-、*、/運算符,計算器在部執(zhí)行數(shù)值轉換和存儲,并等待再次鍵入數(shù)值后將顯示鍵入的數(shù)值,按等號就會在LCD上輸出運算結果。本計算器是以MCS-51系列8051單片機為核心構成的簡易計算器系統(tǒng)。該

4、系統(tǒng)通過單片機控制,實現(xiàn)對4*4鍵盤掃描進行實時的按鍵檢測,并把檢測數(shù)據(jù)存儲下來。整個計算器系統(tǒng)的工作過程為:首先存儲單元初始化,顯示初始值和鍵盤掃描,判斷按鍵位置,查表得出按鍵值,單片機則對數(shù)據(jù)進行儲存與相應處理轉換,之后送入LED顯示器動態(tài)顯示。整個系統(tǒng)可分為三個主要功能模塊:功能模塊一,實時鍵盤掃描;功能模塊二,數(shù)據(jù)轉換成顯示器顯示;功能模塊三,顯示器動態(tài)顯示。1.2 任務分析在本次課程設計中,主要完成如下方面的設計任務:1、簡要闡述單片機技術發(fā)展的國外現(xiàn)狀與LED動態(tài)顯示和矩陣鍵盤基本原理;2、掌握51系列某種產(chǎn)品的最小電路與外圍擴展電路的設計方法;3、了解單片機數(shù)據(jù)轉換功能與工作過程

5、;4、完成主要功能模塊的硬件電路設計與必要的參數(shù)確定;5、用proteus軟件完成原理電路圖的繪制;通過本次課題設計,應用單片機應用基礎、計算機應用基礎等所學相關知識與查閱資料,完成簡易計算器的設計,以達到理論與實踐更好的結合、進一步提高綜合運用所學知識和設計的能力的目的。2. 簡易計算器設計基本原理根據(jù)功能和指示要求,本系統(tǒng)選用以MCS-51單片機為主控機。通過擴展必要的外圍接口電路,實現(xiàn)對計算器的設計。2.1 89c51系列單片機簡介89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROMFalsh Programmable and Erasable Read Only Memo

6、ry)的低電壓、高性能CMOS8位微處理器,俗稱單片機。單片機的可擦除只讀存儲器可以反復擦除100次。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的89C51是一種高效微控制器,89C2051是它的一種精簡版本。89C單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。STC89c51的引腳說明:MCS-51系列單片機中的8031、8051與8751均采用40Pin封裝的雙列直插DIP結構,下圖是它們的引腳配置,40個引腳中,正電源和地線兩根,外置石英振蕩器的時鐘線兩根,

7、4組8位共32個I/O口,中斷口線與P3口線復用?,F(xiàn)在對這些引腳的功能加以說明:如圖2.3所示。圖2.1 雙列直插式封裝引腳圖Pin9:RESET/Vpc復位信號復用腳,當8051通電,時鐘電路開始工作,在RESET引腳上出現(xiàn)24個時鐘周期以上的高電平,系統(tǒng)即初始復位。初始化后,程序計數(shù)器PC指向0000H,P0-P3輸出口全部為高電平,堆棧指針寫入07H,其它專用寄存器被清“0”。RESET由高電平下降為低電平后,系統(tǒng)即從0000H地址開始執(zhí)行程序。然而,初始復位不改變RAM(包括工作寄存器R0-R7)的狀態(tài),8051的初始態(tài)。8051的復位方式可以是自動復位,也可以是手動復位。此外,RES

8、ET/Vpd還是一復用腳,Vcc掉電其間,此腳可接上備用電源,以保證單片機部RAM的數(shù)據(jù)不丟失。見下圖2.4為兩種復位方式和兩種時鐘方式:上電自動復位手動復位電路部時鐘方式外部時鐘方式圖2.2 復位方式和時鐘方式圖硬件系統(tǒng)是指構成微機系統(tǒng)的實體和裝置,通常由運算器、控制器、存儲器、輸入接口電路和輸入設備、輸出接口電路和輸出設備等組成。單片機實質(zhì)上是一個硬件的芯片,在實際應用中,通常很難直接和被控對象進行電氣連接,必須外加各種擴展接口電路、外部設備、被控對象等硬件和軟件,才能構成一個單片機應用系統(tǒng)。本設計選用以AT89S51單片機為主控單元。顯示部分:采用LCD靜態(tài)顯示。按鍵部分,采用4*4鍵盤

9、。 硬件電路原理圖如圖3.1所示:2.2 LCD顯示模塊本設計采用LCD液晶顯示器來顯示輸出數(shù)據(jù)。LCD的特性有:1、+5V電壓,對比可調(diào)度;2、含復位電路;3、提供各種控制命令,如:清屏、字符閃爍、光標閃爍、顯示移位等多種功能;4、有80字節(jié)顯示數(shù)據(jù)存儲器DDRAM;5、建有160個5X7點陣的字型的字符發(fā)生器CGROM;6、8個可由用戶自定義的5X7的字符發(fā)生器CGRAM。本設計通過D0-D7引腳向LCD寫指令字或寫數(shù)據(jù)以使LCD實現(xiàn)不同的功能或顯示相應的數(shù)據(jù)。其接口電路如圖3.3所示。 圖2.3 1602LCD引腳圖表2.4 LCD的引腳說明符號引腳說明符號引腳說明VSS電源地DB4Da

10、ta I/OVDD電源正極(+5V)DB5Data I/OV0液晶顯示偏壓輸入DB6Data I/ORS數(shù)據(jù)/命令選擇端(H/L)DB7Data I/OR/W讀寫控制信號(H/L)E使能信號DB0Data I/ORST復位端(H:正常工作,L:復位)DB1Data I/OVEE負電源輸出(-10V)DB2Data I/OBLA背光源正極(+4.2)DB3Data I/OBLK背光源正極2.3運算模塊MCS-51單片機是在一塊芯片中集成了CPU、RAM、ROM、定時器/計數(shù)器和多功能I/O等計算機所需要的基本功能部件。如果按功能劃分,它由以下功能部件組成,即微處理器(CPU),數(shù)據(jù)存儲器(RAM

11、),程序存儲器(ROM/EPROM),并行I/O口,串行口,定時器/計數(shù)器,中斷系統(tǒng)與特殊功能寄存器(SFR)。單片機是靠程序運行的,并且可以修改。通過不同的程序實現(xiàn)不同的功能,尤其是特殊的一些功能,通過使用單片機編寫的程序可以實現(xiàn)高智能、高效率以與高可靠性,因此采用單片機作為計算器的主要功能部件,可以很快的實現(xiàn)運算功能。運算模塊由鍵盤和顯示屏組成。單片機通過按鍵來實現(xiàn)輸入數(shù)據(jù)和操作方式的控制,在運算過程中,對所設的數(shù)據(jù)進行四則運算時,要先確定選用的是哪一個運算符,若是+或*,則要判斷結果是否會溢出,溢出則顯示錯誤提示,沒有溢出則顯示運算結果,若是/,則要判斷除數(shù)是否為零,為零時顯示錯誤提示,

12、不為零顯示運算結果。2.4鍵盤接口電路計算器輸入數(shù)字和其他功能按鍵要用到很多按鍵,如果采用獨立按鍵的方式,在這種情況下,編程會很簡單,但是會占用大量的I/O 口資源,因此在很多情況下都不采用這種方式,而是采用矩陣鍵盤的方案。矩陣鍵盤采用四條I/O 線作為行線,四條I/O 線作為列線組成鍵盤,在行線和列線的每個交叉點上設置一個按鍵。這樣鍵盤上按鍵的個數(shù)就為4×4個。這種行列式鍵盤結構能有效地提高單片機系統(tǒng)中I/O 口的利用率。矩陣鍵盤的工作原理:計算器的鍵盤布局如圖2所示:一般有16個鍵組成,在單片機中正好可以用一個P口實現(xiàn)16個按鍵功能,這種形式在單片機系統(tǒng)中也最常用。圖2.5 矩陣

13、鍵盤部電路圖第三章主程序設計Keil C51是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結構性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學易用。用過匯編語言后再使用C來開發(fā),體會更加深刻。Keil C51軟件提供豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點,只要看一下編譯后生成的匯編代碼,就能體會到Keil C51生成的目標代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。下面詳細介紹Keil C51開發(fā)系統(tǒng)各部分功能和使用。Keil C51單片機軟件

14、開發(fā)系統(tǒng)的整體結構C51工具包的整體結構,如圖3.1所示,其中uVision與Ishell分別是C51 for Windows和for DOS的集成開發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個開發(fā)流程。開發(fā)人員可用IDE 本身或其它編輯器編輯C 或匯編源文件。然后分別由C51與A51編譯器編譯生成目標文件(.OBJ)。目標文件可由LIB51創(chuàng)建生成庫文件,也可以與庫文件一起經(jīng)L51連接定位生成絕對目標文件(.ABS)。ABS文件由OH51轉換成標準的Hex文件,以供調(diào)試器dScope51或tScope51使用進行源代碼級調(diào)試,也可由仿真器使用直接對目標板進行調(diào)試,也可以直接寫

15、入程序存貯器如EPROM 中。普通計算器課程序設計:/*/通用計算器的編寫,能夠實現(xiàn)兩位的加減計算 +,-,*,/設計人:周運鴻。指導人:皮大能/2013-6-6#include<reg51.h>#include<string.h>#include"LCD1602.h"#include"keyboard.h"#include"calculation.h"#define uchar unsigned char#define uint unsigned intdouble num2; uchar sign2; uc

16、har numble110; uchar numble210; void main()int i=0,j=0,k=0,flag=0,a=0,b,c=0,e=0,opNum=0;long int sum1,sum0;double sum2;init();write_(0x80);while(!mark)matrixkeyscan();mark=0;while(expressionj!='=')if(!In(expressionj,OP) /如否不是運算符就入操作數(shù)棧if(opNum = 0)opNum =expressionj - 48;+j;if(In(expressionj,

17、OP)flag = 1;elseopNum = opNum * 10 + (expressionj - 48);+j;if(In(expressionj,OP)flag = 1;if(flag = 1)numi=opNum;opNum=0;i+;flag=0;elsesignk=expressionj;+j;k+; sum1=Operator( num0,sign0, num1);sum2=Operator( num0,sign0, num1);sum0=sum1;while(sum1!=0) numble1a=sum1%10+48; sum1=sum1/10; a+; b=strlen(nu

18、mble1);write_(0x80+0x40); for(c=b-1;c>=0;c-)write_data(numble1c);delayms(10);write_data('.');sum2=sum2*1000;sum0=sum2-sum0*1000;numble20=sum0/100+48;numble22=sum0%10+48;numble21=(sum0/10)%10+48;if(numble22>=(5+48)numble21=numble21+1;write_data(numble20);delayms(5);write_data(numble21);

19、delayms(5);while(1);/*/鍵盤掃描程序驅動/文件名:keyboard.h/*#ifndef _keyboard_H_#define _keyboard_H_#include<reg51.h>#include"LCD1602.h"#define uchar unsigned char#define uint unsigned intuint move=0; uchar mark=0;uchar code table='0','1','2','3','4','

20、5','6','7','8','9'uchar expression20; uchar code OP='+','-','*','/','=','n'void matrixkeyscan() uchar temp,key; P3=0xfe; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delayms(10); temp=P3; temp=P3&0xf0; if(temp!=0x

21、f0) temp=P3; switch(temp) case 0xee:key=0;break; case 0xde:key=1;break; case 0xbe:key=2;break; case 0x7e:key=3;break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; write_data(tablekey); delayms(5); expressionmove=tablekey; move+; P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delayms(10); tem

22、p=P3; temp=P3&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xed:key=4;break; case 0xdd:key=5;break; case 0xbd:key=6;break; case 0x7d:key=7;break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; write_data(tablekey); delayms(5); expressionmove=tablekey; move+; P3=0xfb; temp=P3; temp=temp&0x

23、f0; if(temp!=0xf0) delayms(10); temp=P3; temp=P3&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xeb:key=8;break; case 0xdb:key=9;break; case 0xbb:key=10;break; case 0x7b:key=11;break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; if(key<10)write_data(tablekey); delayms(5);else write_data(O

24、Pkey-10); delayms(5); expressionmove=tablekey; move+; P3=0xf7; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delayms(10); temp=P3; temp=P3&0xf0; if(temp!=0xf0) temp=P3; switch(temp) case 0xe7:key=12;break; case 0xd7:key=13;break; case 0xb7:key=14;break; case 0x77:key=15;break; while(temp!=0xf0) te

25、mp=P3; temp=temp&0xf0; if(key=14) mark=1; write_data(OPkey-10); delayms(5); expressionmove=tablekey; move+; #endif/*/LCD1602驅動程序/文件名:LCD1602.h/*#ifndef _LCD1602_H_#define _LCD1602_H_#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit lcden=P24;sbit lcdrs=P25;void dela

26、yms(uint xms) uint i,j;for(i=xms;i>0;i-) for(j=110;j>0;j-); void write_(uchar )lcdrs=0;P0=;delayms(5);lcden=1;delayms(5);lcden=0;void write_data(uchar date)lcdrs=1;P0=date;delayms(5);lcden=1;delayms(5);lcden=0;void init()lcden=0;write_(0x38); write_(0x0c); write_(0x06); write_(0x01);#endif/*/數(shù)學計算程序/文件名:calculation.h/*#ifndef _calculation_H_#define _calculation_H_#define uchar unsigned char#define uint unsigned intdouble Operator(double first,char theta,double second)switch(theta)case '+':return first +

溫馨提示

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

評論

0/150

提交評論