基于单片机简易计算器的设计.doc
单片机课程设计课程设计报告书课题名称简易计算器的设计姓 名周运鸿学 号2010118010208专 业电气工程及其自动化指导教师皮大能机电与控制工程学院 年 月 日 摘 要近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。计算机在人们的日常生活中是比较常见的电子产品之一。可是它还在发展之中,以后必将出现功能更加强大的计算机,基于这样的理念,本次设计是用AT89S51单片机、LCD显示器、控制按键为元件来设计的计算器。利用此设计熟悉单片机微控制器及C语言编程,对其片资源及各个I/O端口的功能和基本用途的了解。掌握keil应用程序开发环境,常用的LCD显示器的使用方法和一般键盘的使用方法。关键词:51单片机;LCD ;控制按键目 录1 课程设计内容2 1.1任务内容2 1.2任务分析22计算器设计基本原理32.1 AT89C51系列单片机简介32.2 LCD显示模块62.3 运算模块 82.4键盘接口电路93 主程序设计104结论4 系统仿真图221. 课程设计内容1.1 任务内容本系统就是充分利用了8051芯片的I/O引脚。系统以采用MCS-51系列单片机Intel8051为中心器件来设计计算器控制器,实现了能根据实际输入值显示并存储的功能,计算程序则是参照教材。至于位数和功能,如果有需要可以通过设计扩充原系统来实现 。具体设计如下:1、由于要设计的是简单的计算器,可以进行四则运算,为了得到教好的显示效果,采用LCD显示数据和结果。2、另外键盘包括数字键(0-9)、符号键(+、-、*、/)、等号键,故只需要16个按键即可,设计中采用手焊接的4*4矩阵键盘。3、执行程序:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。本计算器是以MCS-51系列8051单片机为核心构成的简易计算器系统。该系统通过单片机控制,实现对4*4键盘扫描进行实时的按键检测,并把检测数据存储下来。整个计算器系统的工作过程为:首先存储单元初始化,显示初始值和键盘扫描,判断按键位置,查表得出按键值,单片机则对数据进行储存与相应处理转换,之后送入LED显示器动态显示。整个系统可分为三个主要功能模块:功能模块一,实时键盘扫描;功能模块二,数据转换成显示器显示;功能模块三,显示器动态显示。1.2 任务分析在本次课程设计中,主要完成如下方面的设计任务:1、简要阐述单片机技术发展的国内外现状及LED动态显示和矩阵键盘基本原理;2、掌握51系列某种产品的最小电路及外围扩展电路的设计方法;3、了解单片机数据转换功能及工作过程;4、完成主要功能模块的硬件电路设计及必要的参数确定;5、用proteus软件完成原理电路图的绘制;通过本次课题设计,应用单片机应用基础、计算机应用基础等所学相关知识及查阅资料,完成简易计算器的设计,以达到理论与实践更好的结合、进一步提高综合运用所学知识和设计的能力的目的。2. 简易计算器设计基本原理根据功能和指示要求,本系统选用以MCS-51单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。2.1 89c51系列单片机简介89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压、高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,89C2051是它的一种精简版本。89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。STC89c51的引脚说明:MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直插DIP结构,下图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在对这些引脚的功能加以说明:如图2.3所示。图2.1 双列直插式封装引脚图Pin9:RESET/Vpc复位信号复用脚,当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,8051的初始态。8051的复位方式可以是自动复位,也可以是手动复位。此外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。见下图2.4为两种复位方式和两种时钟方式:上电自动复位 手动复位电路 内部时钟方式 外部时钟方式图2.2 复位方式和时钟方式图硬件系统是指构成微机系统的实体和装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。单片机实质上是一个硬件的芯片,在实际应用中,通常很难直接和被控对象进行电气连接,必须外加各种扩展接口电路、外部设备、被控对象等硬件和软件,才能构成一个单片机应用系统。本设计选用以AT89S51单片机为主控单元。显示部分:采用LCD静态显示。按键部分,采用4*4键盘。 硬件电路原理图如图3.1所示:2.2 LCD显示模块本设计采用LCD液晶显示器来显示输出数据。LCD的特性有:1、+5V电压,对比可调度;2、内含复位电路;3、提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能;4、有80字节显示数据存储器DDRAM;5、内建有160个5X7点阵的字型的字符发生器CGROM;6、8个可由用户自定义的5X7的字符发生器CGRAM。本设计通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应的数据。其接口电路如图3.3所示。 图2.3 1602LCD引脚图 表2.4 LCD的引脚说明符号引脚说明符号引脚说明VSS电源地DB4Data I/OVDD电源正极(+5V)DB5Data I/OV0液晶显示偏压输入DB6Data I/ORS数据/命令选择端(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、定时器/计数器和多功能I/O等计算机所需要的基本功能部件。如果按功能划分,它由以下功能部件组成,即微处理器(CPU),数据存储器(RAM),程序存储器(ROM/EPROM),并行I/O口,串行口,定时器/计数器,中断系统及特殊功能寄存器(SFR)。单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的一些功能,通过使用单片机编写的程序可以实现高智能、高效率以及高可靠性,因此采用单片机作为计算器的主要功能部件,可以很快的实现运算功能。运算模块由键盘和显示屏组成。单片机通过按键来实现输入数据和操作方式的控制,在运算过程中,对所设的数据进行四则运算时,要先确定选用的是哪一个运算符,若是+或*,则要判断结果是否会溢出,溢出则显示错误提示,没有溢出则显示运算结果,若是/,则要判断除数是否为零,为零时显示错误提示,不为零显示运算结果。2.4键盘接口电路计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4×4个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。矩阵键盘的工作原理:计算器的键盘布局如图2所示:一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。图2.5 矩阵键盘内部电路图第三章 主程序设计Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。 Keil C51单片机软件开发系统的整体结构C51工具包的整体结构,如图3.1所示,其中uVision与Ishell分别是C51 for Windows和for DOS的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE 本身或其它编辑器编辑C 或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM 中。普通计算器课程序设计:/*/通用计算器的编写,能够实现两位的加减计算 +,-,*,/设计人:周运鸿。指导人:皮大能/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; uchar 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_com(0x80);while(!mark)matrixkeyscan();mark=0;while(expressionj!='=')if(!In(expressionj,OP) /如否不是运算符就入操作数栈if(opNum = 0)opNum =expressionj - 48;+j;if(In(expressionj,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(numble1);write_com(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);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','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!=0xf0) 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); temp=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&0xf0; 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(OPkey-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) temp=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 delayms(uint xms) uint i,j;for(i=xms;i>0;i-) for(j=110;j>0;j-); void write_com(uchar com)lcdrs=0;P0=com;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_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01);#endif/*/数学计算程序/文件名: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 + second;break;case '-':return first - second;break;case '*':return first * second;break;case '/':return first / second;break;default:break;char In(char c,char *OP)int i = 0;while(OPi != '0')if(OPi = c)return 1;i+;return 0;#endif附图1:程序流程图 附图2:总体仿真图结 论通过这次对交通灯的简单设计,使我们增强了动手的能力,也拓宽了知识面,在图书馆查阅相关书籍,让我们增加了对单片机方面的了解,能把学到的知识用活,而不只局限于理论方面。通过亲自设计,proteus仿真,对交通灯有了初步的了解,同时也加深了对单片机方面的软件应用的掌握,为以后的学习奠定了基础。 而且,这次课程设计是对以前学过的知识进行了巩固,加深了理解,提高了应用的能力,提高了我们的发现、分析、解决问题的能力。经历了从最初的设计到最后仿真结果的出现,从根本上提高了对专业的认识及兴趣,对于我们工科来说,对以后就业有及其重大的影响。很感谢学校和老师给我们提供了这样的平台,能使我们的动手能力增强。感谢老师对我们提供的帮助。参考文献1徐爱钧.智能化测量控制仪表原理与设计(第二版)北京.北京航天航空大学出版社,20042孙育才等.MCS-51系列单片微型计算机及其应用(第4版)上海.东南大学出版社,20043李萍等.智能仪器实验指导书大连.大连交通大学,20074单片机应用技术(C语言).北京.中国劳动社会保障出版社,20065武庆生,仇梅等著.单片机原理与应用.北京.电子科技大学出版,1998 6朱定华著.单片机原理与接口技术.西安.电子工业出版社,20017王威著.HCS12微控制器原理及应用.北京.北京航空航天大学出版社,20078龚运新著.单片机C语言开发技术.北京.北京清华大学出版社,2006 9周立功.单片机实验与实践.北京.北京航空航天大学出版社,2004指导教师评 语课程设计成 绩指导教师签 字年 月 日1. 基于C8051F单片机直流电动机反馈控制系统的设计与研究2. 基于单片机的嵌入式Web服务器的研究 3. MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究 4. 基于模糊控制的电阻钎焊单片机温度控制系统的研制 5. 基于MCS-51系列单片机的通用控制模块的研究 6. 基于单片机实现的供暖系统最佳启停自校正(STR)调节器7. 单片机控制的二级倒立摆系统的研究8. 基于增强型51系列单片机的TCP/IP协议栈的实现 9. 基于单片机的蓄电池自动监测系统 10. 基于32位嵌入式单片机系统的图像采集与处理技术的研究11. 基于单片机的作物营养诊断专家系统的研究 12. 基于单片机的交流伺服电机运动控制系统研究与开发 13. 基于单片机的泵管内壁硬度测试仪的研制 14. 基于单片机的自动找平控制系统研究 15. 基于C8051F040单片机的嵌入式系统开发 16. 基于单片机的液压动力系统状态监测仪开发 17. 模糊Smith智能控制方法的研究及其单片机实现 18. 一种基于单片机的轴快流CO,2激光器的手持控制面板的研制 19. 基于双单片机冲床数控系统的研究 20. 基于CYGNAL单片机的在线间歇式浊度仪的研制 21. 基于单片机的喷油泵试验台控制器的研制 22. 基于单片机的软起动器的研究和设计 23. 基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究 24. 基于单片机的机电产品控制系统开发 25. 基于PIC单片机的智能手机充电器 26. 基于单片机的实时内核设计及其应用研究 27. 基于单片机的远程抄表系统的设计与研究 28. 基于单片机的烟气二氧化硫浓度检测仪的研制 29. 基于微型光谱仪的单片机系统 30. 单片机系统软件构件开发的技术研究 31. 基于单片机的液体点滴速度自动检测仪的研制32. 基于单片机系统的多功能温度测量仪的研制 33. 基于PIC单片机的电能采集终端的设计和应用 34. 基于单片机的光纤光栅解调仪的研制 35. 气压式线性摩擦焊机单片机控制系统的研制 36. 基于单片机的数字磁通门传感器 37. 基于单片机的旋转变压器-数字转换器的研究 38. 基于单片机的光纤Bragg光栅解调系统的研究 39. 单片机控制的便携式多功能乳腺治疗仪的研制 40. 基于C8051F020单片机的多生理信号检测仪 41. 基于单片机的电机运动控制系统设计 42. Pico专用单片机核的可测性设计研究 43. 基于MCS-51单片机的热量计 44. 基于双单片机的智能遥测微型气象站 45. MCS-51单片机构建机器人的实践研究 46. 基于单片机的轮轨力检测 47. 基于单片机的GPS定位仪的研究与实现 48. 基于单片机的电液伺服控制系统 49. 用于单片机系统的MMC卡文件系统研制 50. 基于单片机的时控和计数系统性能优化的研究 51. 基于单片机和CPLD的粗光栅位移测量系统研究 52. 单片机控制的后备式方波UPS 53. 提升高职学生单片机应用能力的探究 54. 基于单片机控制的自动低频减载装置研究 55. 基于单片机控制的水下焊接电源的研究 56. 基于单片机的多通道数据采集系统 57. 基于uPSD3234单片机的氚表面污染测量仪的研制 58. 基于单片机的红外测油仪的研究 59. 96系列单片机仿真器研究与设计 60. 基于单片机的单晶金刚石刀具刃磨设备的数控改造 61. 基于单片机的温度智能控制系统的设计与实现 62. 基于MSP430单片机的电梯门机控制器的研制 63. 基于单片机的气体测漏仪的研究 64. 基于三菱M16C/6N系列单片机的CAN/USB协议转换器 65. 基于单片机和DSP的变压器油色谱在线监测技术研究 66. 基于单片机的膛壁温度报警系统设计 67. 基于AVR单片机的低压无功补偿控制器的设计 68. 基于单片机船舶电力推进电机监测系统 69. 基于单片机网络的振动信号的采集系统 70. 基于单片机的大容量数据存储技术的应用研究 71. 基于单片机的叠图机研究与教学方法实践 72. 基于单片机嵌入式Web服务器技术的研究及实现 73. 基于AT89S52单片机的通用数据采集系统 74. 基于单片机的多道脉冲幅度分析仪研究 75. 机器人旋转电弧传感角焊缝跟踪单片机控制系统 76. 基于单片机的控制系统在PLC虚拟教学实验中的应用研究77. 基于单片机系统的网络通信研究与应用 78. 基于PIC16F877单片机的莫尔斯码自动译码系统设计与研究79. 基于单片机的模糊控制器在工业电阻炉上的应用研究 80. 基于双单片机冲床数控系统的研究与开发 81. 基于Cygnal单片机的C/OS-的研究82. 基于单片机的一体化智能差示扫描量热仪系统研究 83. 基于TCP/IP协议的单片机与Internet互联的研究与实现 84. 变频调速液压电梯单片机控制器的研究 85. 基于单片机-免疫计数器自动换样功能的研究与实现 86. 基于单片机的倒立摆控制系统设计与实现 87. 单片机嵌入式以太网防盗报警系统 88. 基于51单片机的嵌入式Internet系统的设计与实现 89. 单片机监测系统在挤压机上的应用 90. MSP430单片机在智能水表系统上的研究与应用 91. 基于单片机的嵌入式系统中TCP/IP协议栈的实现与应用92. 单片机在高楼恒压供水系统中的应用 93. 基于ATmega16单片机的流量控制器的开发 94. 基于MSP430单片机的远程抄表系统及智能网络水表的设计95. 基于MSP430单片机具有数据存储与回放功能的嵌入式电子血压计的设计 96. 基于单片机的氨分解率检测系统的研究与开发 97. 锅炉的单片机控制系统 98. 基于单片机控制的电磁振动式播种控制系统的设计 99. 基于单片机技术的WDR-01型聚氨酯导热系数测试仪的研制 100. 一种RISC结构8位单片机的设计与实现 101. 基于单片机的公寓用电智能管理系统设计 102. 基于单片机的温度测控系统在温室大棚中的设计与实现103. 基于MSP430单片机的数字化超声电源的研制 104. 基于ADC841单片机的防爆软起动综合控制器的研究105. 基于单片机控制的井下低爆综合保护系统的设计 106. 基于单片机的空调器故障诊断系统的设计研究 107. 单片机实现的寻呼机编码器 108. 单片机实现的鲁棒MRACS及其在液压系统中的应用研究 109. 自适应控制的单片机实现方法及基上隅角瓦斯积聚处理中的应用研究110. 基于单片机的锅炉智能控制器的设计与研究 111. 超精密机床床身隔振的单片机主动控制 112. PIC单片机在空调中的应用 113. 单片机控制力矩加载控制系统的研究 项目论证,项目可行性研究报告,可行性研究报告,项目推广,项目研究报告,项目设计,项目建议书,项目可研报告,本文档支持完整下载,支持任意编辑!选择我们,选择成功!项目论证,项目可行性研究报告,可行性研究报告,项目推广,项目研究报告,项目设计,项目建议书,项目可研报告,本文档支持完整下载,支持任意编辑!选择我们,选择成功!单片机论文,毕业设计,毕业论文,单片机设计,硕士论文,研究生论文,单片机研究论文,单片机设计论文,优秀毕业论文,毕业论文设计,毕业过关论文,毕业设计,毕业设计说明,毕业论文,单片机论文,基于单片机论文,毕业论文终稿,毕业论文初稿,本文档支持完整下载,支持任意编辑!本文档全网独一无二,放心使用,下载这篇文档,定会成功!23