找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3348|回复: 1
收起左侧

51单片机多位十进制数计算器电路与程序设计

[复制链接]
ID:792112 发表于 2020-6-28 19:04 | 显示全部楼层 |阅读模式

    随着社会的发展,科学的进步,人们的生活水平在逐步地提高,尤其是微电子技术的发展犹如雨后春笋般的变化。电子产品的更新速度快就不足惊奇了。计算器在人们的日常中是比较常见的电子产品之一,如何使计算器技术更加的成熟。充分利用已有的软件和硬件条件,设计出更出色的计算器,使其更好地为各个行业服务,成了如今电子领域重要的研究课题。

现如今,人们的日常生活中已经离不开计算器了,社会的各个角落都有它的身膨,比如商店、办公室、学校。因此设计一款简单实用的计算器会有很大的实际意义。


1.2设计目的
  •      为了培养学生在查阅资料、复习、学习知识的基础上,进行包括光、机、电系统的设计、计算、仿真、编程、调试等多个环节的综合能力培养;
  •      是对学生进行设计前的一次大型练兵,进一步培养学生独立地分析、解决实际问题的实际能力。
  •      培养学生用专业的、简洁的文字,清晰的图表来表达自己设计思想的能力。

1.3 设计要求

1. 系统通过4×4的矩阵键盘输入数字及运算符。

2. 可以进行多位十进制数以内的运算(包括加,减,乘,除,幂次方,对数等功能),如果计算结果超过显示范围,则屏幕显示E。

3. 可显示输入时的数字及结果;

4. 设计控制电路总体方案;

5. 电路的设计、仿真与调试。

2 总体设计方案分析

2.1 系统组成

本设计是一个可以进行多位十进制数以内的运算(包括加,减,乘,除,幂次方,对数等功能)的计算器,系统结构框图如图2.1。它的硬件电路主要由五部分组成,一个AT89C51单片机芯片、一个八位共阳极的数码管、一个四乘四的矩阵键盘、手动清零电路和起振电路。软件程序主要由四部分组成:主程序、矩阵键盘扫描程序、算术运算程序和显示程序。

在硬件的选择和连接上,单片机选择AT89C51,数码管选择共阳机八位数码管,键盘4*4矩阵键盘。数码管的A,B,C,D,E,F,G,DP分别依次与单片机的P0.0—P0.7管脚相连,P0口做为单片机的字码控制端,数码管的1,2,3,4,5,6,7,8各引脚分别与单片机的P2.0—P2.7管脚相连,键盘的第0行到第3行依次与单片机的P1.1—P1.3,键盘的第0列到第3列依次与单片机的P1.4—P1.7,AT89C51接12MHZ晶振。

图 2.1 系统结构框图

2.2 系统基本功能

1.计算器可显示8位数字,开机运行时,只有数码管最低位显示为“0”,其余位全部不显示。

2.第一次按下时,显示“D1”;第二次按下时,显示“D1D2”;第三次按下时,显示“D1D2D3”,8个全显示完毕,再按下按键下时,显示E。

3.可以设置计算范围,对计算结果在该范围内的两个无符号数进行+、-、*、/、^、对数运算,并显示计算结果。输入数字或结果超出设定范围时,屏幕显示E;做减法运算时,当被减数<减数时,屏幕显示E;做除法运算时,除数为0时,屏幕显示E,以提示使用者输入错误,应清零后重新输入。

4.在进行加、乘、除运算时,可直接按符号键进行运算,若需要进行减、幂方、对数运算时,按运算符之前要先按“shift”键进行转换,再进行运算。

5.运算时,按清零键清零,终止本次运行,必须重新输入数据,运算过程中,如果运算的表达式是加、减、乘、除、幂方、对数混合运算,可以连续运算,无需按等号键,混合运算过程运算符不设优先级。

3 硬件电路设计

3.1 主控芯片 AT89C51单片机简介

AT89C51是一种带4K字节FLASH存储器(FPEROM-Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机,如图3.1。

单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪速存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

AT89C51 提供以下标准功能:4k字节Flash闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

图 3.1 AT89C51单片机结构图

3.2显示模块

7seg-mpx8-ca是共阳极数码管显示器,如图3.2。它左下侧的ABCDEFG DP是LED数码管显示器的I/O口,是段选信号,右下侧的12345678是它的位选信号,从左到右分别是第一位到第八位,段选信号与位选信号分别接到单片机的不同输出口。本次设计中段选信号接到了P0口,位选信号接到了P2口。

共阳极的字形显示代码为:

Uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

0x80,0x90,0x86 }.

位选信号代码为:

uchar Digits[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

当选中第一位时,段选信号就执行从0到9的显示。

图3.2 七段数码管显数器

3.3键盘接口电路

采用4*4矩阵键盘。如图3.3。采用软件识别键值并执行相应的操作,键盘的第0行到第3行依次与单片机的P1.0—P1.3管脚相连,键盘的第0列到第3列依次与单片机的P1.4—P1.7管脚相连,计算机输入数字和其他功能按键时要用到很多按键,如果采用独立按键的方式,编程会很简单,但是会占用大量的I/O口资源,因此在很多情况下都不采用这样的方式,而是采用矩阵键盘的方式。矩阵键盘采用四条I/O线作为行线,四条I/O线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的数量就为4*4个。这样行列式键盘结构能有效的提高单片机系统中I/O口的利用率。一般有16个键组成,在单片机中正好有一个P端口实现16个按键功能,这种形式在单片机系统中最常用。

按键识别是通过逐行扫描进行判断。某一行中如果有低电平产生,则辨别该低电平产生于哪一列,从而得到按键的行列地址,给按键赋值。

按键识别后,如果是数字键则直接放入数码管显示缓冲区,如果再次有数字键按下,则应将缓存区的数字向高位移一位,将刚输入的数放入最低位,并且记录按键次数,每输入一个键值都调用显示程序显示出来,如果是运算符,则执行相应的运算,然后再调用显示程序显示结果。

图3.3 矩阵键盘结构图

3.4 算术运算模块

算术运算模块,在任何时候按下清零键,都必须退出当前操作,重新进行运算。每次运算结束也要按下清零键后,再进行重新操作。运算模块由键盘和显示器组成。由于按键不足,设计一个转换键,可以对运算符进行转换,将“+”和“-”、“*”和“^”、“/”和“log”利用“shift”进行转换,实现六个运算符的运算。

3.5 总设计图

将以上模块连接起来,总设计图如图3.4。

图3.4 总设计图

4 软件设计模块

软件程序主要由四部分组成:主程序、键盘扫描程序、算术运算模块程序和显示程序,总程序设计图如图4.1。

图4.1 总程序设计图

4.1 显示程序设计

采用动态显示,由八位共阳极数码管通过P0口,P2口与单片机相连,P0口做字码控制端,P2口做数码管的位控制端,动态显示是每次数码管只显示一位,由于人的视觉停留是0.05到0.2秒之间,当数码管依次点亮各个位时,使循环的频率高于人的视觉停留时间,人们就会认为数码管是同时点亮的,就可以达到动态显示的效果。其中位控制是哪个数码管亮,段控制是数码管亮数字几。本设计的难点是键盘识别和数值显示,因为这里边涉及到键盘输入的数值在内部要转换成10进制运算,运算结果要转换成各个位的显示数字输出。

4.2 矩阵键盘扫描程序设计

矩阵键盘采用4行4列结构,每行每列各对应一个I/O口。本设计键盘的第0行到第3行依次与单片机的P1.0—P1.3管脚相连,键盘的第0列到第3列依次与单片机的P1.4—P1.7管脚相连,程序运行时依次扫描各行,查询是否有键按下,如果有则进入键盘识别处理程序,实现相应的运算,然后通过数码管输出结果,如果没有按键就调用显示程序显示一个0,等待按键按下,在进入按键扫描程序,这样循环执行。按键识别是根据按键时得到的列代码与行代码组合,来判断是哪个键的。当键盘按键按下时它的那一行、那一列的端口为低电平。因此,只要扫描行、列端口是否都为低电平就可以确定是哪个键被按下。

键扫程序的过程为:开始时,先判断是否有键闭合,无键闭合时,返回继续判断,有键闭合时,先去抖动,然后确定是否有键按下,若无键按下,则返回继续判断是否有键闭合,若有键按下,则判断键号,然后释放,若释放按键完毕,则返回,若没有释放按键,则返回继续释放。流程图如图4.2。

图4.2 矩阵键盘扫描程序设计

4.3 算术运算模块设计

程序的过程为:先判断输入的运算符是+、-、*、/、^、log 中的哪一个,只要把各运算符分别做成模块,用到时调用即可。若是“+”、“*”、“log”或“^”,则要判断运算结果是否溢出,溢出则显示“E”,没溢出就显示运算结果,若是“/”,则要先判断除数是否为零,为零就显示错误信息,输出“E”,不为零则显示运算结果,若是“-”,被减数小于减数,结果应为负数,但因为是无符号运算,输出‘E’,否则直接显示运算结果。其流程图如图4.3所示。

图4.3 算术运算程序设计流程图
5 实验结果及分析

5.1乘法运算超出范围(溢出值999999

计算5400*200=1080000,溢出,显示“E”。

键入第一个操作数5400,显示如图5.1:

图5.1 键入5400

乘以第二个操作数200,如图5.2:

图5.2 键入200

显示结果(超出范围),如图5.3:

图5.3 结果溢出

5.2 幂方运算

计算3^6=729,结果正确。

输入3,如图5.4:

图5.4 输入3

输入幂次6,如图5.5:

图5.5 输入幂次6

显示结果729,结果正确。如图5.6:

图5.6 显示结果729

5.3 除法运算( 除数为0时,显示错误信息“E”)


除数为0,如图5.7:

图5.7 键入除数为0

显示结果“E”,如图5.8:

图5.8 显示结果“E”

5.4 减法运算(被减数小于减数时)

键入被减数1000,如图5.9:

图5.9 显示1000

键入减数3000,如图5.10:

图 5.10 键入减数3000

显示结果“E”,如图5.11:

图5.11 显示结果

5.5 连续运算

800*20/400+60=100

键入800,如图5.12:

图5.12 键入800

键入乘数20,如图5.13:

图5.13 键入20

按下除号时显示上一步运算结果,并继续进行下一步运算,如图5.14:

图5.14 显示上一步计算结果

继续键入除数400,如图5.15:

图5.15 键入除数400

继续加上60,如图5.16:

图5.16 加60

显示结果100,如图5.17:

图5.17 显示结果

6 评述与心得

本次的设计要求实现多位十进制数计算器系统设计,我主要负责报告的整合和程序的调试。总体来说,整个设计并不复杂,通过分析题目、查阅资料、比较不同方案,经过多次调试与测试也基本实现了要求的内容,但在实现过程中还是遇到了不少问题。整个设计包括主控芯片、显示模块、输入模块、运算模块。首先用protues连接电路时要注意各端口对应,电路图尽量做到简洁,整齐,确保连接正确。然后在输入模块我们采用4*4矩阵键盘,难点在于矩阵键盘扫描程序,要明确按键原理,并合理规范按键,按键分配上,我们提出用转换键“shift”实现对运算符的转换,达到在按键有限的条件下,最大程度的实现多种运算功能,结果较为满意。除此之外,整个设计除过主程序还包括显示程序、算数运算程序等模块,算数运算模块里面又涉及各个运算符的相应程序,整个程序的调试测试比较麻烦。在最初程序中,由于无符号整形字节的范围限制,结果最大只能到65535,超过后将不能显示正确答案。最后调整为长整型后,范围扩大至2^32,可自由设定计算器的溢出值,使得结果在超过溢出值后显示“E”。对于除法,除数为0时,使显示结果为“E”给出错误提示。对减数运算结果为负时,使显示结果为“E”给出错误提示。并实现连续运算功能,可显示中间结果。显示模块采用共阳极数码管,通过查询数字和相关字母对应的码表,编写程序,实现输入模块到主控芯片内部,芯片到数码管的一系列字符-数字、数字-字符的转化。多次调试后有了较为理想的结果,基本实现了老师的要求,但仍有不足,比如只能进行无符号整形的运算;最多只能进行八位十进制数的混合运算;当连续出现错误操作时,如连续输入减号,程序不能自动复位,会产生连续错误;没有删除输入功能,当输入出错时,只能通过清零后重新输入。这些都局限了该计算器系统的使用,也认识到了自己的能力还需要很大的提高。

同时,本次为期两周的设计让我对单片机软件与硬件的常用设计有了更深入的了解,包括单片机需按照统一节拍工作,而晶振是给单片机提供工作信号脉冲的。这个脉冲就是单片机的工作速度。晶振频率的大小决定了单片机速度的快慢。而一般晶振电路都有这两个小电容的,它是振荡回路交联电容,如果没这两个电容的话,振荡部分会因为没有回路而停振,电路不能正常工作。对单片机的内部结构及接口相应的功能也有了更深的理解记忆,对keil和proteus软件的使用也有了进本的掌握。

通过查阅资料,快速查找有效信息,提高了自己的文献检索能力。设计过程中的分析、组成电路、排查错误、调试测试、提高改进,也进一步锻炼了自己的思维,小组工作中,提高了自己的交流能力和团队合作意识,综合能力得到提升,并取得了较为不错的测试结果,比较满意,感谢队友,也感谢老师给我们提供这样的机会,让我们认识自我,提升自我。以后我会继续努力,多多学习跟专业有关的知识,把理论与实践相结合,融会贯通,举一反三。


仿真程序下载:

http://www.51hei.com/bbs/dpj-191483-1.html



回复

使用道具 举报

ID:1008471 发表于 2022-3-5 22:46 | 显示全部楼层
难理解
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表