简易计算器设计.docx
简易计算器设计 课程设计报告课程名称:单片机原理及应用课程设计 设计题目:简易计算器 系别:通信与控制工程系 专业:电子信息工程 班级:2班 学生姓名: 学号: 起止日期:指导教师: 教研室主任: 摘要 该简易计算器以STC89C52单片机为核心,8255芯片,数码管,利用汇编语言编写相应程序进行有效四则运算。该计算器计算精度不高,只能实现简单的加减乘除,且有效数字位数有限。该装置由STC89C52模块,4x4键盘(包括19,+,-,*,/等十六个字符),数码管显示屏组成。STC89C52为主模块,其控制键盘及8255模块。键盘可以实现数字及运算符号的输入,8255控制的数码管可以进行人机交互,显示按下键盘所对应的字符以及显示运算结果。显示部分:采用数码管显示。按键部分:采用4*4键盘;通过扩展必要的外围接口电路,用汇编对单片机进行编程,实现对计算器的设计。 关键字:STC89C52;8255;LED数码管 目录 1 设计要求 (1) 1.1 要求 (1) 2 硬件设计部分 (2) 2.1 主控芯片STC89C52 (2) 2.2 8255芯片 (3) 2.3 键盘 (4) 2.4 LED数码显示管 (4) 3 软件设计部分 (6) 3.1 LED显示程序设计 (6) 3.2 读键输入程序设计 (6) 3.3 数值送显示缓冲程序设计 (7) 3.4 运算主程序设计 (8) 4 系统测试 (9) 4.1 软件调试步骤 (9) 4.2 程序调试步骤 (10) 4.3 矩阵4*4键盘的调试 (10) 4.4 数码管程序调试 (10) 4.5 测试结果 (10) 5 总结与思考 (11) 参考文献 (12) 致谢 (13) 附录一 (14) 附录二 (26) 简易计算器 1设计要求 1.1要求 设计一个简易计算器,要求能够进行简单的加减乘除运算,具体要求如下: 1. 4X4键盘输入,数码管显示。 2. 完成整数的加减乘除,加法和减法要求可以实现连加、连减。 3. 可进行错误判断,溢出、除零等错误将显示一个字符 E 。 4. 由于键盘只有16个按键,安排如下: +-+ | 7 | 8 | 9 | + | | 4 | 5 | 6 | - | | 1 | 2 | 3 | * | | 0 | . | = | / | +-+ 2硬件设计部分 2.1主控芯片STC89C52 STC89C52是一个低功耗,高性能CMOS 8位单片机,片内含4k BytesISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用STC公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构。STC89C52具有如下特点:40个引脚(引脚图如图1所示),4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。此外,STC89C52RC设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM 定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP 和PLCC等三种封装形式,以适应不同产品的需求。 图 1 STC89C51 VCC(40):5V; GND(20):接地; P0口(3932):P0口为8位漏极开路双向I/O口,每引脚可吸收8个TTL门电流。 P1口(18):P1口是从内部提供上拉电阻器的8位双向I/O口,P1口缓冲器能接收和输出4个TTL门电流。 P2口(2128):P2口为内部上拉电阻器的8位双向I/O口,P2口缓冲器可接收和输出4个TTL门电流;P3口(1017):P3口是8个带内部上拉电阻器的双向I/O口,可接收和输出4个TTL门电流。 P3口也可作为AT89C51的特殊功能口。 RST(9):复位输入。当振荡器复位时,要保持RST引脚2个机器周期的高电平时间。ALE/PROG(30):当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节,在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6,它可用作对外部输出的脉冲或用于定时目的,要注意的是,每当访问外部数据存储器时,将跳过图21个ALE脉冲。 PSEN(29):外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期2次PSEN有效,但在访问外部数据存储器时,这2次有效的PSEN信号将不出现。EA/VPP(31):当EA保持低电平时,外部程序存储器地址为(0000HFFFFH)不管是否有内部程序存储器。FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1(19):反向振荡器放大器的输入及内部时钟工作电路的输入;XTAL2(18):来自反向振荡器的输出。 2.2 8255芯片 利用8255可编程并行口芯片,实现输入/输出实验,实验中用8255 PA和PB口 做输出,实现在数码管上从0到F循环显示的效果。 图 3 8255和STC89C52 2.3 键盘 键盘输入采用4*4的矩阵键盘。4*4键盘分别与P3.0P3.7相连。P3.0P3.3作为输入口(回送线),P3.4P3.7作为输出口(扫描线)。16个按键分别用于控制数字“09”以及数学运算符号“+、-、*、/”。键盘模块电路如下图所示: 图4 2.4 LED数码显示管 LED显示器由七段发光二极管组成,排列成8字形状,因此也成为七段LED显示管,排列形状如图5所示: 图 5 与8255的PA,PB,PC口的连接如下图所示: 图 6 LED显示接口 3软件设计部分 3.1 LED显示程序设计 为了显示数字或符号,要为LED显示器提供代码,即字形代码。七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。简易计算器用到的数字09的共阳极字形代码如下表: 表格 1 3.2 读键输入程序设计 为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码键码。为了得到被按键的键码,现使用行扫描法识别按键。 其程序框图如下: 图7 读键流程图 3.3 数值送显示缓冲程序设计 简易计算器所显示的数值最大位两位。要显示数值,先判断数值正负,如果是负值,则符号位显示“-”,然后将数值除以10,余数送显最最低位,判断商是否为0,