1、燕山大学课 程 设 计 说 明 书题目: 基于单片机的数字计算器 学院(系): 里仁自动化系 年级专业: 10级自动化5 学 号: 101203011137 学生姓名: 王然 指导教师: 刘剑鸣 教师职称: 副教授 燕山大学课程设计(论文)任务书院(系): 里仁学院 基层教学单位: 自动化系 学 号101203011137学生姓名王然专业(班级)自动化5设计题目基于单片机的数字计算器设计技术参数1、据设计方案,应用所学过的计算机控制、计算机原理、单片机原理等课程,选择控制变量和被控参数,检测与转换器件、控制器和执行器的选择。2、应用所学过的单片机原理等课程,选择计算机控制系统的控制器的类型,并
2、对控制参数进行整定。设计要求1说明书一份。2说明书封面与内容需一致(打印或本人手抄)。3完成电路图一张。4鼓励学生进行创造性的设计和发明。工作量1、 阅读相关教科书、查资料。2、 说明书一份,不少于6000字(如打印用小四号字)。3、 电路图为A3图纸一张。工作计划第一周:选定题目、查资料、阅读相关教科书。第二周:设计单片机控制系统(包括硬件、软件、外围电路)、 完成设计说明书、画电路图、进行成绩考核。参考资料反馈控制理论、工厂电器、半导体变流技术、电力拖动及自动化、电子技术、计算机控制、制图、计算机原理、单片机原理及应用、电力电子技术、计算机操作系统、计算机控制系统等课程教课书及相关专业报纸
3、、杂志和论文。指导教师签字基层教学单位主任签字说明:此表一式四份,学生、指导教师、基层教学单位、系部各一份。2013年 6 月 22 日 燕山大学课程设计评审意见表指导教师评语:成绩: 指导教师: 2013年 7 月 5 日答辩小组评语:成绩: 评阅人: 2013年 7月 5 日课程设计总成绩:答辩小组成员签字:2013年 7 月 5 日 燕 山 大 学 课 程 设 计 说 明 书摘要本设计是基于51系列的单片机进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED上相应的显示结果。设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑
4、,首先选择内部存储资源丰富的AT89C51单片机,输入采用44矩阵键盘。显示采用5位7段共阴极LED静态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用全球编译效率最高的KEIL公司的Vision3软件,采用汇编语言进行编程,并用proteus仿真。关键词:单片机 计算器 AT89c51 键盘目 录第一章 方案设计61.1单片机系统开发与应用工程实习计报告61.2 系统分析6第二章 系统的硬件设计72.1 主控制器72. 2 键盘电路12
5、2. 3 其他电路设计13第三章系统的软件设计143. 1 主程序153. 2读键子程序设计163. 3 定时查键的程序设计163.4 LED显示程序设计163.5 数字送显示缓冲程序设计17第四章 系统的测试174.1 Keil C51单片机软件开发系统174.2 proteus的操作184.3 软件的可靠性设计18参考文献19第一章 方案设计1.1单片机系统开发与应用工程实习计报告1. 设计要求 本次课程设计,我选择的课题是单片机数字计算器设计,设计任务为: 1. 扩展4*4键盘,其中10个数字,5个功能键,1个清零2. 使用五位数码管接口电路3. 完成十进制的四则运算(加、减、乘、除);
6、 4. 实现低于三位小于255数字的连续运算;5. 使用keil C软件编写程序; 6. 最后用ptoteus仿真;7. 具有较强的抗干扰能力;8. 体积小、功耗低,便于嵌入其他系统。 2. 项目要求基于 AT89c51 单片机的简易计算器,采用 12MHZ 晶振。设计要求如下: (1) 计算器至少能正常显示 8 位数。 (2) 卡机时,显示 0。第一次按下时,显示 D1;第二次按下时,显示 D1D2。 (3) 计算器能对整数进行简单的加、减、乘、除四则运算,在做除法时能自动舍去 小数部分。 (4) 运算结果超过可显示的位数时能进行出错提示。1.2 系统分析 1.总体设计计算器以 AT89C5
7、1 单片机为核心芯片,通过扫描键盘来得到数据,另外通过 CPU 将得到的数据按要求进行运算并将结果送到显示电路进行显示。2. 框图设计基于 AT89C51 单片机的简易计算器由电源电路、单片机主控电路、按键电路、显示电路和复位电路几部分组成,框图组成如图 2-1 所示。图 2.1基于 AT89C51 单片机的简易计算器系统框图3. 知识点本项目需要通过学习和查阅资料,掌握和了解如下知识: 电源原理及设计。 单片机复位电路工作原理及设计。 单片机晶振电路工作原理及设计。 按键电路的设计。 驱动电路的设计。 七段数码管的特性及使用。 AT89C51 单片机引脚。单片机C语言及程序设计。第二章 系统
8、的硬件设计2.1 主控制器 1.单片机简介在该课程设计中,主要用到一个AT89c51芯片和串接的五个74LS164芯片。作为该设计的主要部分。下面将对这两个芯片原理及功能做已详细介绍和说明。图 2.1 AT89c51芯片 芯片AT89c51的外形结构和引脚图如2.1所示。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功
9、能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。(1)主要特性:8051 CPU与MCS-51 兼容4K字节可编程FLASH存储器(寿命:1000写/擦循环)全静态工作:0Hz-24KHz三级程序存储器保密锁定128*8位内部RAM2条可编程I/O线两个16位定时器/计数器5个中断源可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路(2)管脚说明: VCC:供电电压(图中未画出) GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被
10、定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输
11、入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特
12、殊功能口,如下表所示:口管脚备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,A
13、LE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令时才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH
14、),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出引脚。2.芯片74LS164介绍 74LS164是一个串入并出的8位移位寄存器,它常用于单片机系统中,下面介绍一下这个元件的基本知识。74LS164外部结构和引脚如图22所示:图2.2 74LS164引脚图(1)主要特性: 串行输入带锁存 时钟输入,串行输入带缓冲 异步清除 最高时钟频率可高达36Mhz 功耗:10mW
15、/bit 74系列工作温度:0C到70C Vcc最高电压:7V 输入最高电压:7V 最大输出驱动能力:高电平:0.4mA ; 低电平:8mA (2)引脚功能:在单片机系统中, 如果并行口的IO资源不够,而串行口又没有其他的作用, 那么我们可以用74LS164来扩展并行IO口,节约单片机资源。74LS164是一个串行输入并行输出的移位寄存器。并带有清除端。Q0Q7 并行输出端 A,B 串行输入端MR 清除端, 为0时,输出清零CP 时钟输入端3. 复位、时钟电路设计MCS-51单片机芯片内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。当使用内
16、部振荡电路时,XTAL1.XTAL2引脚外接石英晶体和微调电容,如图33所示,图中C2.C3大小一般为30PF。还加了复位/备用电源引脚的接线方法,任何单片机在工作之前都要进行复位,以便CPU以及其他功能部件都处于一个确定的初始化状态,并从这个状态开始工作,也就是程序开始执行之前,单片机做好准备工作。如何进行复位呢?只用在单片机的RST引脚上保持两个机器周期(24个时钟周期)的高电平即可对单片机实现复位操作。当主电源Vcc发生掉电或者是电压降低到电平规定值时,VPD上外接的备用电源自动启用,为单片机内部RAM提供电源,以保护片内RAM中的信息不丢失,使系统在恢复电后能正常运行。图 2.3 复位
17、电路和时钟电路2. 2 键盘电路 键盘可分为两类:编码键盘和非编码键盘。编码键盘是较多按键(20个以上)和专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。通用计算机使用的标准键盘就是编码键盘。在智能仪器中,使用并行接口芯片8279或串行接口芯片HD7279均可以组成编码键盘,同时还可以兼顾数码管的显示驱动,其相关的接口电路和接口软件均可在芯片资料中得到。当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。但大多数智能仪器和电子产品的按键数目都不太多(20个以内),为了降低成本和简化电路通常采用非编码键盘。非编码键盘的接口
18、电路有设计者根据需要自行决定,按键信息通过接口软件来获取。 本课题需要的是16个按键,故选择用非编码键盘,为了减少所占用的端口,由P1口采用4*4矩阵式键盘。具体电路连接如图2.4所示 图2.4 4*4键盘输入 当系统需要显示少量数据时,采用LED数码管进行显示是一种经济实用的方法。数码管显示有静态显示和动态显示两种方法。为了减少端口的使用,故选择静态显示。 电路如下图32所示:图2.5 五位数码管显示 2. 3 其他电路设计多位数码管电路显示的驱动电路 LED数码管显示块是由发光二极管显示字段的显示器件。在单片机应用中通常使用七段LED。这种显示块有共阴极和共阳极两种,如图是它的管脚配置 ,
19、本设计采用的是共阴极接法。单片机应用中只有一位的的数字显示是不常见的,即要同时驱动多个数码管显示,就必须要同时让多个数码管加上各自不同的选片段,这个属于静态显示。所谓静态显示,就是每一个显示器,都要占用单独的具有封锁功能的I/O接口用于笔画字段形代码,单片机只要把显示的字形代码发送到接口电路,直到要显示新的数据时,再发送新的字形码,因此,使用这种方法单片机中CPU的开销小,可以提高单独锁存的I/O接口电路很多,这里以常用的串并转化电路74LS164为例介绍一种常用静态显示电路。74ls164Q1.Q874ls164Q1.Q874ls164Q1.Q874ls164Q1.Q874ls164Q1.Q
20、8TXDRXD89C51H.AH.AH.AH.AH.A图 2.7 五位数码管静态显示接法如图2.7所示,5片74LS164首尾相串,而时钟端接在一起,这样,当输入8个脉冲时,从单片机RXD端输出的数据就进入到第一个74LS164中了,当第二个8个脉冲到来时,这个数据就进入了第二个片74LS164,新的数据则进入了第一个74LS164。这样,当第五个脉冲完成后,首次送出的数据被送入到最左面的74LS164中,其他数据依次出现在第一、第二、第三、第四片74LS164中。入口:把要显示的数分别放在显示缓冲区60H-64H共五个单元中,并且分别对应五个数码管LED1-LED4。出口:将预置在显示缓冲区
21、中的五个数组成相应的现实字形码,然后输出到显示器中显示。 第三章系统的软件设计在数字计算器的软件设计规划要求下,简易计算器的程序主要包括以下几个功能模块:(1)主模块,为系统的初始化;(2)显示与读键模块,分为显示子程序,判键程序段、运算操作子程序等部分。3. 1 主程序初始化参数清零键LED显示输入数值读取键值状态清零数值送显示缓存开始按键输入?分析键值数字键等待数值输入结果送显示缓存保存结果和功能键根据上次功能键和输入的数据计算结果功能键否是是数字键是清零键是功能键图4.1 主程序流程图主程序主要是用来进行初始化的,调用其他子程序,清空各个标志位,清空缓存区,读取键码,判断功能,在LED上
22、作出回应,主程序流程图如图41所示。3. 2读键子程序设计为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码键码。为了得到被按键的键码,现使用行扫描法识别按键。 3. 3 定时查键的程序设计进入定时器0的中断程序后,首先重新赋初值,然后调用读键程序,如果有键按下,则判断按键是否与上次按键相同,如果相同则判断按键相应位是否为一,如果不为一,说明这不是持续按键导致的按键相应,并且进行相应的程序。如果不是则退出中断程序。 读键程序使用的是反转法读键,不管键盘矩阵的规模大小,均进行两次读键。第一次所有行线均输出低电平,从所有读入键盘信息(列信息);第二次所有列线均
23、输出低电平,从所有行线读入键盘信息(行信息)。将两次读键信息进行组合就可以得到按键的特征编码,然后通过查表得到按键的顺序编码。将各特征编码按希望的顺序排成一张表,然后用当前读得的特征码来查表。当表中有该特征码时,它的位置就是对应的顺序编码;当表中没有该特征码时,说明这是一个没有定义的键码,与没有按键(0FFH)同等看待。 数字键按下则将相应的数字送入缓存区,功能键按下则执行相应的程序。 首先对数字键的程序段进行相应的设计,如果运算键(、,*,/)响应标志不为一,则将输入的数字送入第一个操作数缓存区,并且清空所有响应位。否则送入第二个操作数缓存区。其次对功能键的程序段进行相应的设计。 如果功能键
24、(、,*,/)第一次被按下,则置相应的标志位为一,并且将运算键响应标志位置一,清空第二个操作数的缓存区,为输入操作数做准备,如果是第二次按下则先调用运算操作子程序,执行上次按下的运算键的运算,置相应的标志位为一,并且将运算键响应标志位置一,清空第二个操作数的缓存区,为输入操作数做准备。 如果是C键按下,则先判断运算键响应位是否为一,如果不为一,则清空第一个操作数,否则清空第二个操作数。 如果是=键按下,则调用运算操作子程序。 3.4 LED显示程序设计LED显示器由七段发光二极管组成,排列成8字形状,因此也称为七段LED显示器。为了显示数字或符号,要为LED显示器提供代码,即字形代码。七段发光
25、二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。简易计算器用到的数字09的共阴极字形代码如下表:(表一) 计算器数字09字形代码显示字型gfedcba段码001111113fh1000011006h210110115bh310011114fh4110011066h511011016dh611111017dh7000011107h811111117fh911011116fh3.5 数字送显示缓冲程序设计简易计算器所显示的数值最大位三位。要显示数值,先判断数值大小和位数,如果是超过三位或大于255,将不显示数字。可重新输入数字,再次计算。第四章 系统的测试下面用KEI
26、L uVision与 porteus仿真软件介绍数字计算器的仿真与调试。4.1 Keil C51单片机软件开发系统1. 系统的整体结构C51工具包的整体结构中,其中uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dSco
27、pe51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。2 采用KEIL 开发的89c51单片机应用程序步骤:(1) 在uVision 集成开发环境中创建新项目(Project),扩展文件名为.UV2,并为该项目选定合适的单片机CPU器件(本设计采用ATMEL 公司下的AT89C51)(2)用uVision 的文本编辑器编写源文件,可以是汇编文件(.ASM),也可以使C语言文件(扩展名.C),并将该文件添加到项目中去。一个项目文件可以包含多个文件,除了源程序文件外,还可以是库文件、头文件或文本说明文件。(3)通过uVisio
28、n 2 的相关选择项,配置编译环境、连接定位器以及Debug调试器的功能。(4)对项目中的源文件进行编译连接,生成绝对目标代码和可选的HEX文件,如果出现编译连接错误则返回到第2步,修改源文件中的错误后重构整个项目。(5)对没有语法错误的程序进行仿真调试,调试成功后将HEX文件写入到单片机应用系统的ROM中。4.2 proteus的操作1.硬件电路图的接法操作 (1).放置选择(删除)元器件(2).移动元器件(3).缩放视图(4).连接导线(5).仿真,调试2. 单片机系统PROTEUS设计与仿真过程Proteus强大的单片机系统设计与仿真功能,使它可成为单片机系统应用开发和改进手段之一。全部
29、过程都是在计算机上通过Proteus来完成的。其过程一般也可分为三步:(1)在ISIS平台上进行单片机系统电路设计、选择元器件、接插件、连接电路和电气检测等。简称Proteus电路设计。(2)在Keil平台上进行单片机系统程序设计、编辑、汇编编译、代码级调试,最后生成目标代码文件(*.hex)。简称Proteus源程序设计和生成目标代码文件。(3)在ISIS平台上将目标代码文件加载到单片机系统中,并实现单片机系统的实时交互、协同仿真。它在相当程度上反映了实际单片机系统的运行情况。简称Proteus仿真。4.3 软件的可靠性设计 提高本仪器的可靠性措施主要有: (1)为防止程序跑飞,软件中设置了软件陷阱 (2)为了保证结果的正确性,结果溢出时显示错误代码0 参考文献1. 周航慈. 单片机应用程序设计技术(第3版).北京航空航天大学出版社,2011年:90页到128页2.张志良.单片机原理与控制技术.(第2版). 机械工业出版社,2011年:20页到156页3. 杨志旺.51单片机快速上手第1版. 机械工业出版社,2009年:197页到216页 4. 周国雄.单片机应用系统设计精讲.中国铁道出版社,2011年:216页到233页19