基于单片机简易计算器的设计_第1页
基于单片机简易计算器的设计_第2页
基于单片机简易计算器的设计_第3页
基于单片机简易计算器的设计_第4页
基于单片机简易计算器的设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE23《单片机课程设计》课程设计报告书课题名称简易计算器的设计姓名周运鸿学号2010118010208专业电气工程及其自动化指导教师皮大能机电与控制工程学院年月日

摘要近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。计算机在人们的日常生活中是比较常见的电子产品之一。可是它还在发展之中,以后必将出现功能更加强大的计算机,基于这样的理念,本次设计是用AT89S51单片机、LCD显示器、控制按键为元件来设计的计算器。利用此设计熟悉单片机微控制器及C语言编程,对其片资源及各个I/O端口的功能和基本用途的了解。掌握keil应用程序开发环境,常用的LCD显示器的使用方法和一般键盘的使用方法。关键词:51单片机;LCD;控制按键

目录1课程设计内容………………………21.1任务内容………………………21.2任务分析………………………22计算器设计基本原理………………32.1AT89C51系列单片机简介……………………32.2LCD显示模块…………………62.3运算模块……………………82.4键盘接口电路………………93主程序设计………………………104结论…………………4系统仿真图………………………22

1.课程设计内容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.189c51系列单片机简介89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压、高性能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”8051的复位方式可以是自动复位,也可以是手动复位。此外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。见下图2.4为两种复位方式和两种时钟方式:上电自动复位手动复位电路内部时钟方式外部时钟方式图2.2复位方式和时钟方式硬件系统是指构成微机系统的实体和装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。单片机实质上是一个硬件的芯片,在实际应用中,通常很难直接和被控对象进行电气连接,必须外加各种扩展接口电路、外部设备、被控对象等硬件和软件,才能构成一个单片机应用系统。本设计选用以AT89S51单片机为主控单元。显示部分:采用LCD静态显示。按键部分,采用4*4键盘。硬件电路原理图如图3.1所示:2.2LCD显示模块本设计采用LCD液晶显示器来显示输出数据。LCD的特性有:1、+5V电压,对比可调度;2、内含复位电路;3、提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能;4、有80字节显示数据存储器DDRAM;5、内建有160个5X7点阵的字型的字符发生器CGROM;6、8个可由用户自定义的5X7的字符发生器CGRAM。本设计通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应的数据。其接口电路如图3.3所示。图2.31602LCD引脚图表2.4LCD的引脚说明符号引脚说明符号引脚说明VSS电源地DB4DataI/OVDD电源正极(+5V)DB5DataI/OV0液晶显示偏压输入DB6DataI/ORS数据/命令选择端(H/L)DB7DataI/OR/W读写控制信号(H/L)E使能信号DB0DataI/ORST复位端(H:正常工作,L:复位)DB1DataI/OVEE负电源输出(-10V)DB2DataI/OBLA背光源正极(+4.2)DB3DataI/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矩阵键盘内部电路图第三章主程序设计KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍KeilC51开发系统各部分功能和使用。KeilC51单片机软件开发系统的整体结构C51工具包的整体结构,如图3.1所示,其中uVision与Ishell分别是C51forWindows和forDOS的集成开发环境(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"#defineucharunsignedchar#defineuintunsignedintdoublenum[2];ucharsign[2];ucharnumble1[10];ucharnumble2[10];voidmain(){inti=0,j=0,k=0,flag=0,a=0,b,c=0,e=0,opNum=0;longintsum1,sum0;doublesum2;init();write_com(0x80);while(!mark){matrixkeyscan();}mark=0;while(expression[j]!='='){if(!In(expression[j],OP)) //如否不是运算符就入操作数栈{if(opNum==0){opNum=expression[j]-48;++j;if(In(expression[j],OP))flag=1;}else{opNum=opNum*10+(expression[j]-48);++j;if(In(expression[j],OP))flag=1;}if(flag==1){num[i]=opNum;opNum=0;i++;flag=0;}}else{ sign[k]=expression[j];++j;k++;}}sum1=Operator(num[0],sign[0],num[1]);sum2=Operator(num[0],sign[0],num[1]);sum0=sum1;while(sum1!=0){numble1[a]=sum1%10+48;sum1=sum1/10;a++;}b=strlen(numble1);write_com(0x80+0x40);for(c=b-1;c>=0;c--){write_data(numble1[c]);delayms(10);}write_data('.');sum2=sum2*1000;sum0=sum2-sum0*1000;numble2[0]=sum0/100+48;numble2[2]=sum0%10+48;numble2[1]=(sum0/10)%10+48;if(numble2[2]>=(5+48))numble2[1]=numble2[1]+1;write_data(numble2[0]);delayms(5);write_data(numble2[1]);delayms(5);while(1);}//**************************//键盘扫描程序驱动//文件名:keyboard.h//**************************#ifndef__keyboard_H__#define__keyboard_H__#include<reg51.h>#include"LCD1602.h"#defineucharunsignedchar#defineuintunsignedintuintmove=0;ucharmark=0;ucharcodetable[]={'0','1','2','3','4','5','6','7','8','9'};ucharexpression[20];ucharcodeOP[]={'+','-','*','/','=','\n'};voidmatrixkeyscan() { uchartemp,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) { case0xee:key=0;break; case0xde:key=1;break; case0xbe:key=2;break; case0x7e:key=3;break; } while(temp!=0xf0) {temp=P3; temp=temp&0xf0; } write_data(table[key]); delayms(5); expression[move]=table[key]; 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) {case0xed:key=4;break; case0xdd:key=5;break; case0xbd:key=6;break; case0x7d:key=7;break; } while(temp!=0xf0) {temp=P3; temp=temp&0xf0; }write_data(table[key]);delayms(5);expression[move]=table[key]; 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) {case0xeb:key=8;break; case0xdb:key=9;break; case0xbb:key=10;break; case0x7b:key=11;break; } while(temp!=0xf0) {temp=P3; temp=temp&0xf0; }if(key<10){write_data(table[key]);delayms(5);}else{write_data(OP[key-10]);delayms(5);}expression[move]=table[key]; 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) {case0xe7:key=12;break; case0xd7:key=13;break; case0xb7:key=14;break; case0x77:key=15;break; } while(temp!=0xf0) {temp=P3; temp=temp&0xf0; }if(key==14)mark=1;write_data(OP[key-10]);delayms(5);expression[move]=table[key]; move++; } } }#endif//***********************************************//LCD1602驱动程序//文件名:LCD1602.h//***********************************************#ifndef__LCD1602_H__#define__LCD1602_H__#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitlcden=P2^4;sbitlcdrs=P2^5;voiddelayms(uintxms){uinti,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}voidwrite_com(ucharcom){lcdrs=0;P0=com;delayms(5);lcden=1;delayms(5);lcden=0;}voidwrite_data(uchardate){lcdrs=1;P0=date;delayms(5);lcden=1;delayms(5);lcden=0;}voidinit(){lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);}#endif//***************************************************//数学计算程序//文件名:calculation.h//****************************************************#ifndef__calculation_H__#define__calculation_H__#defineucharunsignedchar#defineuintunsignedintdoubleOperator(doublefirst,chartheta,doublesecond){ switch(theta) { case'+': returnfirst+second; break; case'-': returnfirst-second; break; case'*': returnfirst*second; break; case'/': returnfirst/second; break; default: break; }}charIn(charc,char*OP){ inti=0; while(OP[i]!='\0') { if(OP[i]==c) { return1; } i++; } return0;}#endif附图1:程序流程图附图2:总体仿真图结论通过这次对交通灯的简单设计,使我们增强了动手的能力,也拓宽了知识面,在图书馆查阅相关书籍,让我们增加了对单片机方面的了解,能把学到的知识用活,而不只局限于理论方面。通过亲自设计,proteus仿真,对交通灯有了初步的了解,同时也加深了对单片机方面的软件应用的掌握,为以后的学习奠定了基础。而且,这次课程设计是对以前学过的知识进行了巩固,加深了理解,提高了应用的能力,提高了我们的发现、分析、解决问题的能力。经历了从最初的设计到最后仿真结果的出现,从根本上提高了对专业的认识及兴趣,对于我们工科来说,对以后就业有及其重大的影响。很感谢学校和老师给我们提供了这样的平台,能使我们的动手能力增强。感谢老师对我们提供的帮助。参考文献[1]徐爱钧.智能化测量控制仪表原理与设计(第二版).北京.北京航天航空大学出版社,2004[2]孙育才等.MCS-51系列单片微型计算机及其应用(第4版).上海.东南大学出版社,2004[3]李萍等.智能仪器实验指导书.大连.大连交通大学,2007[4]单片机应用技术(C语言).北京.中国劳动社会保障出版社,2006[5]武庆生,仇梅等著.单片机原理与应用.北京.电子科技大学出版,1998[6]朱定华著.单片机原理与接口技术.西安.电子工业出版社,2001[7]王威著.HCS12微控制器原理及应用.北京.北京航空航天大学出版社,2007[8]龚运新著.单片机C语言开发技术.北京.北京清华大学出版社,2006[9]周立功.单片机实验与实践.北京.北京航空航天大学出版社,2004

指导教师评语课程设计成绩指导教师签字年月日基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬度测试仪的研制基于单片机的自动找平控制系统研究基于C8051F040单片机的嵌入式系统开发基于单片机的液压动力系统状态监测仪开发模糊Smith智能控制方法的研究及其单片机实现一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制基于双单片机冲床数控系统的研究基于CYGNAL单片机的在线间歇式浊度仪的研制基于单片机的喷油泵试验台控制器的研制基于单片机的软起动器的研究和设计基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究基于单片机的机电产品控制系统开发基于PIC单片机的智能手机充电器基于单片机的实时内核设计及其应用研究基于单片机的远程抄表系统的设计与研究基于单片机的烟气二氧化硫浓度检测仪的研制基于微型光谱仪的单片机系统单片机系统软件构件开发的技术研究基于单片机的液体点滴速度自动检测仪的研制基于单片机系统的多功能温度测量仪的研制基于PIC单片机的电能采集终端的设计和应用基于单片机的光纤光栅解调仪的研制气压式线性摩擦焊机单片机控制系统的研制基于单片机的数字磁通门传感器基于单片机的旋转变压器-数字转换器的研究基于单片机的光纤Bragg光栅解调系统的研究单片机控制的便携式多功能乳腺治疗仪的研制基于C8051F020单片机的多生理信号检测仪基于单片机的电机运动控制系统设计Pico专用单片机核的可测性设计研究基于MCS-51单片机的热量计基于双单片机的智能遥测微型气象站MCS-51单片机构建机器人的实践研究基于单片机的轮轨力检测基于单片机的GPS定位仪的研究与实现基于单片机的电液伺服控制系统用于单片机系统的MMC卡文件系统研制基于单片机的时控和计数系统性能优化的研究基于单片机和CPLD的粗光栅位移测量系统研究单片机控制的后备式方波UPS提升高职学生单片机应用能力的探究基于单片机控制的自动低频减载装置研究基于单片机控制的水下焊接电源的研究基于单片机的多通道数据采集系统基于uPSD3234单片机的氚表面污染测量仪的研制基于单片机的红外测油仪的研究96系列单片机仿真器研究与设计基于单片机的单晶金刚石刀具刃磨设备的数控改造基于单片机的温度智能控制系统的设计与实现基于MSP430单片机的电梯门机控制器的研制基于单片机的气体测漏仪的研究基于三菱M16C/6N系列单片机的CAN/USB协议转换器基于单片机和DSP的变压器油色谱在线监测技术研究基于单片机的膛壁温度报警系统设计基于AVR单片机的低压无功补偿控制器的设计基于单片机船舶电力推进电机监测系统基于单片机网络的振动信号的采集系统基于单片机的大容量数据存储技术的应用研究基于单片机的叠图机研究与教学方法实践基于单片机嵌入式Web服务器技术的研究及实现基于AT89S52单片机的通用数据采集系统基于单片机的多道脉冲幅度分析仪研究机器人旋转电弧传感角焊缝跟踪单片机控制系统

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论