基于单片机的数字计算器设计.docx
- 文档编号:9862403
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:37
- 大小:611.45KB
基于单片机的数字计算器设计.docx
《基于单片机的数字计算器设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字计算器设计.docx(37页珍藏版)》请在冰点文库上搜索。
基于单片机的数字计算器设计
单片机数字计算器硬软件设计
摘要
本设计是基于51系列的单片机进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED上相应的显示结果。
设计过程在硬件与软件方面进行同步设计。
硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机,输入采用4×4矩阵键盘。
显示采用5位7段共阴极LED静态显示。
软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。
编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用全球编译效率最高的KEIL公司的μVision3软件,采用汇编语言进行编程,并用proteus仿真。
引言
简易计算器的原理与设计是单片机课程设计课题中的一个。
在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。
单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,数字计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。
关键词:
单片机计算器AT89c51芯片74LS164
目录
单片机应用系统设计报告0
一、方案设计3
1.1单片机系统开发与应用工程实习计报告3
1.2系统分析3
1.3系统设计4
二、系统的硬件设计5
2.1主控制器5
2.2键盘电路9
2.3其他电路设计10
三、系统的软件设计12
3.1主程序12
3.2读键子程序设计12
3.3定时查键的程序设计13
3.4LED显示程序设计14
3.5数字送显示缓冲程序设计14
四、系统的测试15
4.1KeilC51单片机软件开发系统15
4.2proteus的操作15
4.3软件的可靠性设计16
五、总结17
六、同组分工18
七、参考文献18
附录1原理图19
附录2源程序清单19
一、方案设计
1.1单片机系统开发与应用工程实习计报告
1.设计要求
本次课程设计,我选择的课题是单片机数字计算器设计,设计任务为:
1.扩展4*4键盘,其中10个数字,5个功能键,1个清零
2.使用五位数码管接口电路
3.完成十进制的四则运算(加、减、乘、除);
4.实现低于三位小于255数字的连续运算;
5.使用keilC软件编写程序;
6.最后用ptoteus仿真;
7.具有较强的抗干扰能力;
8.体积小、功耗低,便于嵌入其他系统。
2.项目要求
基于AT89S52单片机的简易计算器,采用12MHZ晶振。
设计要求如下:
(1)计算器至少能正常显示8位数。
(2)卡机时,显示0。
第一次按下时,显示D1;第二次按下时,显示D1D2。
(3)计算器能对整数进行简单的加、减、乘、除四则运算,在做除法时能自动舍去小数部分。
(4)运算结果超过可显示的位数时能进行出错提示。
1.2系统分析
1.总体设计
计算器以AT89S52单片机为核心芯片,通过扫描键盘来得到数据,另外通过CPU将得到的数据按要求进行运算并将结果送到显示电路进行显示。
2.框图设计
基于AT89S52单片机的简易计算器由电源电路、单片机主控电路、按键电路、显示电路和复位电路几部分组成,框图组成如图2-1所示。
图2.1基于AT89S52单片机的简易计算器系统框图
3.知识点
本项目需要通过学习和查阅资料,掌握和了解如下知识:
电源原理及设计。
单片机复位电路工作原理及设计。
单片机晶振电路工作原理及设计。
按键电路的设计。
驱动电路的设计。
七段数码管的特性及使用。
AT89S52单片机引脚。
单片机C语言及程序设计。
1.3系统设计
1.电路原理图如下:
图1.1电路原理图
二、系统的硬件设计
2.1主控制器
1.单片机简介
在该课程设计中,主要用到一个AT89c51芯片和串接的五个74LS164芯片。
作为该设计的主要部分。
下面将对这两个芯片原理及功能做已详细介绍和说明。
图2.1AT89c51芯片
芯片AT89c51的外形结构和引脚图如2.1所示。
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
(1)主要特性:
8051CPU与MCS-51兼容
4K字节可编程FLASH存储器(寿命:
1000写/擦循环)
全静态工作:
0Hz-24KHz
三级程序存储器保密锁定
128*8位内部RAM
2条可编程I/O线
两个16位定时器/计数器
5个中断源
可编程串行通道
低功耗的闲置和掉电模式
片内振荡器和时钟电路
(2)管脚说明:
VCC:
供电电压(图中未画出)
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
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”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令时才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出引脚。
2.芯片74LS164介绍
74LS164是一个串入并出的8位移位寄存器,他常用于单片机系统中,下面结束一下这个元件的基本知识。
74LS164外部结构和引脚如图2—2所示:
图2.274LS164引脚图
(1)主要特性:
∙串行输入带锁存
∙时钟输入,串行输入带缓冲
∙异步清除
∙最高时钟频率可高达36Mhz
∙功耗:
10mW/bit
∙74系列工作温度:
0Cto70C
∙Vcc最高电压:
7V
∙输入最高电压:
7V
∙最大输出驱动能力:
高电平:
-0.4mA;低电平:
8mA
(2)引脚功能:
在单片机系统中,如果并行口的IO资源不够,而串行口又没有其他的作用,那么我们可以用74LS164来扩展并行IO口,节约单片机资源。
74LS164是一个串行输入并行输出的移位寄存器。
并带有清除端。
Q0—Q7并行输出端
A,B串行输入端
MR清除端,为0时,输出清零
CP时钟输入端
3.复位、时钟电路设计
MCS-51单片机芯片内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。
当使用内部振荡电路时,XTAL1.XTAL2引脚外接石英晶体和微调电容,如图3—3所示,图中C2.C3大小一般为30PF。
还加了复位/备用电源引脚的接线方法,任何单片机在工作之前都要进行复位,以便CPU以及其他功能部件都处于一个确定的初始化状态,并从这个状态开始工作,也就是程序开始执行之前,单片机做好准备工作。
如何进行复位呢?
只用在单片机的RST引脚上保持两个机器周期(24个时钟周期)的高电平即可对单片机实现复位操作。
当主电源Vcc发生掉电或者是电压降低到电平规定值时,VPD上外接的备用电源自动启用,为单片机内部RAM提供电源,以保护片内RAM中的信息不丢失,使系统在恢复上电后能正常运行。
图2.3复位电路和时钟电路
2.2键盘电路
键盘可分为两类:
编码键盘和非编码键盘。
编码键盘是较多按键(20个以上)和专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。
通用计算机使用的标准键盘就是编码键盘。
在智能仪器中,使用并行接口芯片8279或串行接口芯片HD7279均可以组成编码键盘,同时还可以兼顾数码管的显示驱动,其相关的接口电路和接口软件均可在芯片资料中得到。
当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。
但大多数智能仪器和电子产品的按键数目都不太多(20个以内),为了降低成本和简化电路通常采用非编码键盘。
非编码键盘的接口电路有设计者根据需要自行决定,按键信息通过接口软件来获取。
本课题需要的是16个按键,故选择用非编码键盘,为了减少所占用的端口,由P1口采用4*4矩阵式键盘。
具体电路连接如图2.4所示
图2.44*4键盘输入
当系统需要显示少量数据时,采用LED数码管进行显示是一种经济实用的方法。
数码管显示有静态显示和动态显示两种方法。
为了减少端口的使用,故选择静态显示。
电路如下图3—2所示:
图2.5五位数码管显示
2.3其他电路设计
多位数码管电路显示的驱动电路
图2.6LED数码管
LED数码管显示块是由发光二极管显示字段的显示器件。
在单片机应用中通常使用七段LED。
这种显示块有共阴极和共阳极两种,如图是它的管脚配置,本设计采用的是共阴极接法。
单片机应用中只有一位的的数字显示是不常见的,即要同时驱动多个数码管显示,就必须要同时让多个数码管加上各自不同的选片段,这个属于静态显示。
所谓静态显示,就是每一个显示器,都要占用单独的具有封锁功能的I/O接口用于笔画字段形代码,单片机只要把显示的字形代码发送到接口电路,直到要显示新的数据时,再发送新的字形码,因此,使用这种方法单片机中CPU的开销小,可以提高单独锁存的I/O接口电路很多,这里以常用的串并转化电路74LS164为例介绍一种常用静态显示电路。
图2.7五位数码管静态显示接法
如图2.7所示,5片74LS164首尾相串,而时钟端接在一起,这样,当输入8个脉冲时,从单片机RXD端输出的数据就进入到第一个74LS164中了,当第二个8个脉冲到来时,这个数据就进入了第二个片74LS164,新的数据则进入了第一个74LS164。
这样,当第五个脉冲完成后,首次送出的数据被送入到最左面的74LS164中,其他数据依次出现在第一、第二、第三、第四片74LS164中。
入口:
把要显示的数分别放在显示缓冲区60H-64H共五个单元中,并且分别对应五个数码管LED1-LED4。
出口:
蒋预置在显示缓冲区中的五个数组成相应的现实字形码,然后输出到显示器中显示。
三、系统的软件设计
在数字计算器的软件设计规划要求下,简易计算器的程序主要包括以下几个功能模块:
(1)主模块,为系统的初始化;
(2)显示与读键模块,分为显示子程序,判键程序段、运算操作子程序等部分。
3.1主程序
图4.1主程序流程图
主程序主要是用来进行初始化的,调用其他子程序,清空各个标志位,清空缓存区,读取键码,判断功能,在LED上作出回应,主程序流程图如图4—1所示。
3.2读键子程序设计
为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码——键码。
为了得到被按键的键码,现使用行扫描法识别按键。
其程序框图如图4—2:
图4.2计算键值子程序流程图
3.3定时查键的程序设计
进入定时器0的中断程序后,首先重新付初值,然后调用读键程序,如果有键按下,则判断按键是否与上次按键相同,如果相同则判断按键相应位是否为一,如果不为一,说明这不是持续按键导致的按键相应,并且进行相应的程序。
如果不是则退出中断程序。
读键程序使用的是反转法读键,不管键盘矩阵的规模大小,均进行两次读键。
第一次所有行线均输出低电平,从所有读入键盘信息(列信息);第二次所有列线均输出低电平,从所有行线读入键盘信息(行信息)。
将两次读键信息进行组合就可以得到按键的特征编码,然后通过查表得到按键的顺序编码。
将各特征编码按希望的顺序排成一张表,然后用当前读得的特征码来查表。
当表中有该特征码时,它的位置就是对应的顺序编码;当表中没有该特征码时,说明这是一个没有定义的键码,与没有按键(0FFH)同等看待。
数字键按下则将相应的数字送入缓存区,功能键按下则执行相应的程序。
首先对数字键的程序段进行相应的设计,如果运算键(+、-,*,/)响应标志不为一,则将输入的数字送入第一个操作数缓存区,并且清空所有响应位。
否则送入第二个操作数缓存区。
其次对功能键的程序段进行相应的设计。
如果功能键(+、-,*,/)第一次被按下,则置相应的标志位为一,并且将运算键响应标志位置一,清空第二个操作数的缓存区,为输入操作数做准备,如果是第二次按下则先调用运算操作子程序,执行上次按下的运算键的运算,置相应的标志位为一,并且将运算键响应标志位置一,清空第二个操作数的缓存区,为输入操作数做准备。
如果是’C’键按下,则先判断运算键响应位是否为一,如果不为一,则清空第一个操作数,否则清空第二个操作数。
如果是’=’键按下,则调用运算操作子程序。
3.4LED显示程序设计
LED显示器由七段发光二极管组成,排列成8字形状,因此也称为七段LED显示器。
为了显示数字或符号,要为LED显示器提供代码,即字形代码。
七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。
简易计算器用到的数字0~9的共阴极字形代码如下表:
(表一)计算器数字0~9字形代码
显示字型
g
f
e
d
c
b
a
段码
0
0
1
1
1
1
1
1
3fh
1
0
0
0
0
1
1
0
06h
2
1
0
1
1
0
1
1
5bh
3
1
0
0
1
1
1
1
4fh
4
1
1
0
0
1
1
0
66h
5
1
1
0
1
1
0
1
6dh
6
1
1
1
1
1
0
1
7dh
7
0
0
0
0
1
1
1
07h
8
1
1
1
1
1
1
1
7fh
9
1
1
0
1
1
1
1
6fh
3.5数字送显示缓冲程序设计
简易计算器所显示的数值最大位三位。
要显示数值,先判断数值大小和位数,如果是超过三位或大于255,将不显示数字。
可重新输入数字,再次计算。
四、系统的测试
下面用KEILuVision与porteus仿真软件介绍数字计算器的仿真与调试。
4.1KeilC51单片机软件开发系统
1.系统的整体结构
C51工具包的整体结构中,其中uVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。
开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。
然后分别由C51及A51编译器编译生成目标文件(.OBJ)。
目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。
ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。
2采用KEIL开发的89c51单片机应用程序步骤:
(1)在uVision集成开发环境中创建新项目(Project),扩展文件名为.UV2,并为该项目选定合适的单片机CPU器件(本设计采用ATMEL公司下的AT89C51)
(2)用uVision的文本编辑器编写源文件,可以是汇编文件(.ASM),也可以使C语言文件(扩展名.C),并将该文件添加到项目中去。
一个项目文件可以包含多个文件,除了源程序文件外,还可以是库文件、头文件或文本说明文件。
(3)通过uVision2的相关选择项,配置编译环境、连接定位器以及Debug调试器的功能。
(4)对项目中的源文件进行编译连接,生成绝对目标代码和可选的HEX文件,如果出现编译连接错误则返回到第2步,修改源文件中的错误后重构整个项目。
(5)对没有语法错误的程序进行仿真调试,调试成功后将HEX文件写入到单片机应用系统的ROM中。
4.2proteus的操作
1.硬件电路图的接法操作
(1).放置选择(删除)元器件
(2).移动元器件
(3).缩放视图
(4).连接导线
(5).仿真,调试
2.单片机系统PROTEUS设计与仿真过程
Proteus强大的单片机系统设计与仿真功能,使它可成为单片机系统应用开发和改进手段之一。
全部过程都是在计算机上通过Proteus来完成的。
其过程一般也可分为三步:
(1)在ISIS平台上进行单片机系统电路设计、选择元器件、接插件、连接电路和电气检测等。
简称Proteus电路设计。
(2)在Keil平台上进行单片机系统程序设计、编辑、汇编编译、代码级调试,最后生成目标代码文件(*.hex)。
简称Proteus源程序设计和生成目标代码文件。
(3)在ISIS平台上将目标代码文件加载到单片机系统中,并实现单片机系统的实时交互、协同仿真。
它在相当程度上反映了实际单片机系统的运行情况。
简称Proteus仿真。
4.3软件的可靠性设计
提高本仪器的可靠性措施主要有:
(1) 为防止程序跑飞,软件中设置了软件陷阱
(2) 为防止键盘抖动造成按键错误,采取了软件防
(3) 为了保证结果的正确性,结果溢出时显示错误代码0
五、总结
基于单片机的设计至今为止已经进入了令人鼓舞的阶段,在进行了两周时间的摸索与设计,使我不仅仅对于单片机软件与硬件的常用设计与功能有所认识,还使我对于一项设计研究的制作过程所需要的详细步骤和具体实现方法有了进一步的掌握。
由于我们的初步尝试,当中的缺点是无可非议地存在着。
当然在这次宝贵的设计活动中,经验才是对于我们最大的收获,而且还增强了自身对未知问题以及对知识的深化认识的能力,但是,仅仅是完成了作品还是不可以自我满足的,我们要认真的思考设计过程中遇到的问题,多查资料,将理论与实际相结合思考,并在以后的学习中更要加倍注意犯过的错误。
总之,这次设计从软件编写调试到软硬件联机调试,发现了自己的许多不足,在以后的学习中,我将一定回注意。
课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为自动化专业的学生来说掌握单片机的开发技术是十分重要的。
我的题目是数字计算器的设计,对于我们这些工科学生来说,这是一次考验。
怎么才能找到课堂所学与实际应用的最佳结合点?
怎样让自己的业余更接近专业?
怎样让自己的计划更具有序性,而不会忙无一用?
这都是我们所要考虑和努力的。
这次课程设计我学到很多很多的东西,学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。
不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。
这次课程设计通
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 数字 计算器 设计