1、单片机十进制加法计算器设计 摘要 本设计 是基于 51 系列的单片机进行的十进制计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除 3 位无符号数字的简单四则运算,并在LED 上相应的显示结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的 AT89C51 单片机,输入采用 4 4 矩阵键盘。显示采用 3位7 段共阴极 LED 动 态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以 及高效性和功能性对 C语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用全球
2、编译效率最高的 KEIL 公司的 Vision3 软件,采用汇编语言进行编程,并用 proteus 仿真。 引言 十进制加法 计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课 程进行一次课程设计是有必要的。 单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件
3、,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。 关键词:单片机、计算器、 AT89C51芯片、汇编语言、数码管、加减乘除 目录 摘 要 .01 引 言 .01 一、 设计任务和要求 . 1、 1 设计要求 1、 2 性能指标 1、 3 设计方案的确定 二、 单片机简要原理 . 2、 1 AT89C51的介绍 2、 2 单片机最小系统 2、 3 七段共阳极数码管 三、 硬件设计 . 3、 1 键盘电路的设计 3、 2 显示电路的设计 四、 软件设计 . 4、 1 系统设计 4、 2 显示 电路 的设计
4、 五、 调试与仿真 . 5、 1 Keil C51单片机软件开发系统 5、 2 proteus的操作 六、 心得体会 . 参考文献 . 附录 1 系统硬件电路图 . 附录 2 程序清单 . 一、 设计任务和要求 1.1 设计要求 本次课程设计,我选择的课题是单片机十进制加法计算器软硬件设计 ,设计任务为: 设计一键盘显示装置,键盘上除需定义 10个十进制数字键外还要相应的功能键,其它键不定义无响应。利用此系统可分别可输 入十进制被加数与加数,实现两数相加并将结果以十进制形式显示出来。 (扩展 :多位 10进制数相加 ) 1.2 性能指标 本课程设计的十进制加法计算器的计算范围为 0255,计算
5、结果全为整数,计算结果溢出结果不显示。 1、加法:三位加法,计算结果超过 255溢出不显示 2、减法:三位减法,计算结果若小于零溢出不显示 3、乘法:三位数乘法 4、除法:整数除法 5、有清零功能 1.3 设计方案的确定 按照 1.1的设计要求,本课题需要使用数码管显示和 扩展 4*4键盘,由于AT89C51芯片的 I口不够多,而且为了硬件电路设计的简单化 ,故选择串行动态显示和用 P1口扩展 4*4键盘,扩展的 4*4键盘定义十个数字键,六个功能键,使用串行动态显示显示运算结果。 主程序进行初始化,采用行列扫描进行查表得出键值,每次按键后调用显示子程序。 二、 单片机简要原理 在该课程设计中
6、,主要用到一个 AT89C51芯片和串接的共阴数码管。作为该设计的主要部分,下面将对它们的原理及功能做详细介绍和说明。 2.1 AT89C51的介绍: 图一 AT89C51外形结构和引脚分布图 芯片 AT89C51的外形结构和引脚图如图一所示。 AT89C51是一种带 4K字节闪烁可编程可擦除只读存储器( FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能 CMOS8位微处理器,俗称单片机。该器件采用 ATMEL高密度非易失存储器制造技术制造,与工业标准的 MCS-51指令集和输出管脚相兼容。由于将多功能 8位 CPU
7、和闪烁存储器组合在单个芯片中, ATMEL的 AT89C51是一种高效微控制器,为很多嵌入式 控制系统提供了一种灵活性高且价廉的方案。 2.2 单片机最小系统 单片机最小系统就是支持主芯片正常工作的最小部分,包括主控芯片、复位电路和晶振电路。 (一) 复位电路 图二 复位电路 本设计采用上电与手动复位电路,电阻分别选取 100和 10K,电容选取 10uF,系统一上电,芯片就复位,或者中途按按键也可以进行复位。 (二) 晶振电路 图三 晶振电路 晶振电路是单片机的心脏,它 用于产生单片机工作所需要的时钟信号。单片机的晶振选取 11.0592MHz,晶振旁电容选取 30pF。 2.3 七段共阳极
8、数码管 图四 七段共阳数码管 图为七段共阳数码管的引脚图,从左到右数码管的段码分别为 a,b,c,d,e,f,g和小数点 dp,低电平时点亮,最右边为位选端。 三、 硬件设计 简易数字计算器系统硬件设计主要包括:键盘电路,显示电路以及其他辅助电路。下面分别进行设计。 3.1 键盘电路的设计 键盘可分为两类:编码键盘和非编码键盘。编码键盘是较多按键( 20个以上)和专用驱 动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。通用计算机使用的标准键盘就是编码键盘。当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。但大多数智能仪器和电
9、子产品的按键数目都不太多( 20个以内),为了降低成本和简化电路通常采用非编码键盘。非编码键盘的接口电路有设计者根据需要自行决定,按键信息通过接口软件来获取。本课题需要的是 16个按键,故选择用非编码键盘。 计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下, 编程会很简单,但是会占用大量的 I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用四条 I/O 线作为行线,四条 I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为 4 4个。这种行列式键盘结构能有效地提高单片机系统中 I/O 口
10、的利用率。 矩阵键盘的工作原理:计算器的键盘布局如图五所示:一般有 16个键组成,在单片机中正好可以用一个 P口实现 16个按键功能,这种形式在单片机系统中也最常用。 具体电路连接如图五所示: 图五 4*4键盘接口电路 3.2 显示电路的设计 当系统需要显示少量数据时,采用 LED数码管进行显示是一种经济实用的方法。数码管显示有静态显示和动态显示两种方法。为了减少端口的使用,故选择动态显示。 电路如下图六所示: 图六 三位数码管的显示电路 四、 软件设计 在十进制加法计算器的软件规划要求下, 简易计算器的程序主要包括以下功能模块:( 1) 主模块,为系统的初始化。( 2) 显示与读键模 块,分
11、为判键程序段、运算操作子程序、显示子程序等部分; 4.1 系统设计 (一) 系统模块图 单片机运算模块显示模块输入模块图六 系统模块图 此系统包括输入、运算和显示模块,由单片机控制。其中通过输入键盘模块将数字 09和运算符号“ +”、“ -”、“ *”、“ /”输入单片机进行运算;运算模块分别根据输入的运算符进行加减乘除运算;显示模块将运算后的数值通过动态扫描使之在数码管上输出。 (二) 系统总流程图 主程序主要是用来进行初始化的,调用其他 子程序,清空各个标志位,清空缓存区,读取键码,判断功能,在 LED上作出回应,主程序流程图如图六所示。 ( 1) 数字送显示缓冲程序设计 简易计算器所显示
12、的数值最大位三位。要显示数值,先判断数值大小和位数,如果是超过三位或大于 255,将不显示数字。可重新输入数字,再次计算。 (2) 运算程序的设计 首先初始化参数,送 LED三位显示 “0”,其它位不显示。然后扫描键盘看是否有键输入,若有,读取键码。判断键码是数字键、清零键还是功能键,是数值键则送 LED显示并保存数值,是清零键则做清零处理,是功能键则又判断是 “=”还是运算键,若是 “=”则计算最后结果并送 LED显示,若是运算键则保存相对运算程序的首地址。 图七 主程序流程图 初始化参数 清零键 LED 显示 输入数值 读取键值 状态清零 数值送显示缓存 开始 按键输入? 分析键值 数字键
13、 等待数值输入 结果送显示缓存 保存结果和功能键 根据上次功能键和输入的数据计算结果 功能键 否 是 是数字键 是清零键 是功能键 4.2 显示与按键设计 (一) LED显示程序设计 LED显示器由七段发光二极管组成,排列成 8字形状,因此也称为七段 LED显示器。为了显示数字或符号,要为 LED显示器提供代码,即字形代码。七段发光二极管,再加上一个小数点位,共计 8段,因此提供的字形代码的长度正好是一个字节。简易 计算器用到的数字 09的共阳极字形代码如下表: 显示字型 g f e d c b a 段码 0 0 1 1 1 1 1 1 0c0h 1 0 0 0 0 1 1 0 0f9h 2
14、1 0 1 1 0 1 1 0a4h 3 1 0 0 1 1 1 1 0b0h 4 1 1 0 0 1 1 0 99h 5 1 1 0 1 1 0 1 92h 6 1 1 1 1 1 0 1 82h 7 0 0 0 0 1 1 1 0f8h 8 1 1 1 1 1 1 1 80h 9 1 1 0 1 1 1 1 90h 表一 共阳极数码管段码对照表 (二 ) 读键子程序设计 为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码 键码。为了得到被按键的键码,现使用行扫描法识别按键。其程序框图如图八: 读键程序使用的是反转法读键,不管键盘矩阵的规模大小,均进行两次读键。第一次所有列线均输出低电平,从所有读入键盘信息(行信息);第二次所有行线均输出低电平,从所有行线读入键盘信息(列信息)。将两次读键信息进行组合就可以得到按键的特征编码,然 后通过查表得到按键的顺序编码。将各特征编码按希望的顺序排成一张表,然后用当前读得的特征码来查表。当表中有该特征码时,它的位置就是对应的顺序编码;当表中没有该特征码时,说明这是一个没有定义的键码,与没有按键( 0FFH)同等看待。