基于51单片机的数字计算器的设计.docx
- 文档编号:4372881
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:22
- 大小:361.88KB
基于51单片机的数字计算器的设计.docx
《基于51单片机的数字计算器的设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的数字计算器的设计.docx(22页珍藏版)》请在冰豆网上搜索。
基于51单片机的数字计算器的设计
《单片机技术及其应用》
课程设计报告
专业:
通信工程
班级:
09312班
姓名:
某某某
学号:
09031069
指导教师:
二0一二年六月十八日
1设计目的1
2设计题目描述与要求1
3设计过程2
5软件总体方案及设计流程9
6调试与仿真13
7心得体会14
8指导老师意见15
9参考文献16
附录一16
附录二21
基于51单片机的数字计算器的设计
1设计目的
简易计算器的原理与设计是单片机课程设计课题中的一个。
在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用和单片机完整程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。
单片机课程设计既巩固了课本学到的理论,还学到了单片机硬件电路和程序设计,简易计算器课程设计通过自己动手用计算机电路设计软件,编写和调试,最后仿真,来加深对单片机的认识,充分发挥我们的个人创新和动手能力,并提高我们对单片机的兴趣,同时学习查阅资料、参考资料的方法。
本设计是基于51系列的单片机进行的简易计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED上相应的显示结果。
设计过程在硬件与软件方面进行同步设计。
硬件选择AT89C51单片机和74ls164,输入用4×4矩阵键盘。
显示用5位7段共阴极LED静态显示。
软件从分析计算器功能、流程图设计,再到程序的编写进行系统设计。
选用编译效率最高的Keil软件进行编程,并用proteus仿真。
2设计题目描述与要求
基于AT89C51数字计算器设计的基本要求与基本思路:
(1)扩展4*4键盘,其中10个数字,5个功能键,1个清零
(2)使用五位数码管接口电路
(3)完成十进制的四则运算(加、减、乘、除)
(4)实现低于三位小于255数字的连续运算
(5)使用keil软件编写程序
(6)最后用ptoteus仿真
3设计过程
3.1设计思路
按照2的设计要求,本课题需要使用数码管显示和扩展4*4键盘,由于实验箱的硬件电路已经固定,故选择串行静态显示和用P1口扩展4*4键盘,扩展的4*4键盘定义十个数字键,六个功能键,使用串行静态显示显示运算结果。
主程序进行初始化,采用定时器0进行查键,每次按键后调用显示子程序
3.2单片机简要原理
在该课程设计中,主要用到一个AT89c51芯片和串接的五个74LS164芯片。
作为该设计的主要部分。
下面将对这两个芯片原理及功能做已详细介绍和说明。
1.
AT89C51介绍
芯片AT89C51的外形结构和引脚图如3-2-1所示。
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
A主要特性:
8051CPU与MCS-51兼容
4K字节可编程FLASH存储器(寿命:
1000写/擦循环)
全静态工作:
0Hz-24KHz
三级程序存储器保密锁定
128*8位内部RAM
32条可编程I/O线
两个16位定时器/计数器
5个中断源
可编程串行通道
低功耗的闲置和掉电模式
片内振荡器和时钟电路
B管脚说明:
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外部结构和引脚图
图3-2-2
A主要特性:
?
串行输入带锁存
?
时钟输入,串行输入带缓冲
?
异步清除
?
最高时钟频率可高达36Mhz
?
功耗:
10mW/bit
?
74系列工作温度:
0Cto70C
?
Vcc最高电压:
7V
?
输入最高电压:
7V
?
最大输出驱动能力:
高电平:
-0.4mA;低电平:
8mA
B管脚说明
在单片机系统中,如果并行口的IO资源不够,而串行口又没有其他的作用,那么我们可以用74LS164来扩展并行IO口,节约单片机资源。
74LS164是一个串行输入并行输出的移位寄存器。
并带有清除端。
其中,Q0—Q7并行输出端;A,B串行输入端;MR清除端,为0时,输出清零;CP时钟输入端。
4硬件总体方案及说明
简易数字计算器系统硬件设计主要包括:
键盘电路,显示电路以及其他辅助电路。
下面分别进行设计。
4.1键盘电路的设计
键盘可分为两类:
编码键盘和非编码键盘。
编码键盘是较多按键(20个以上)和专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。
通用计算机使用的标准键盘就是编码键盘。
在智能仪器中,使用并行接口芯片8279或串行接口芯片HD7279均可以组成编码键盘,同时还可以兼顾数码管的显示驱动,其相关的接口电路和接口软件均可在芯片资料中得到。
当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。
但大多数智能仪器和电子产品的按键数目都不太多(20个以内),为了降低成本和简化电路通常采用非编码键盘。
非编码键盘的接口电路有设计者根据需要自行决定,按键信息通过接口软件来获取。
本课题需要的是16个按键,故选择用非编码键盘,为了减少所占用的端口,由P1口采用4*4矩阵式键盘。
具体电路连接如图4-1-1所示
C
0
=
+
1
2
3
-
4
5
6
*
7
8
9
/
图4-2-2
图4-1-1
4.2显示电路设计
当系统需要显示少量数据时,采用LED数码管进行显示是一种经济实用的方法。
数码管显示有静态显示和动态显示两种方法。
为了减少端口的使用,故选择静态显示,并采用共阴极接法电路如图4-2-1所示
图4-2-1
LED数码管显示块是由发光二极管显示字段的显示器件。
在单片机应用中通常使用七段LED。
这种显示块有共阴极和共阳极两种。
4.3时钟电路及数码管电路设计
1.时钟电路
机器周期(24个时钟周期)的高电平即可对单片机实现复位操作
当主电源Vcc发生掉电或者是电压降低到电平规定值时,VPD上外接的备用电源自动启用,为单片机内部RAM提供电源,以保护片内RAM中的信息不丢失,使系统在恢复上电后能正常运行
时钟电路
图4-3-1
2.多位数码管电路显示的驱动电路
单片机应用中只有一位的的数字显示是不常见的,即要同时驱动多个数码管显示,就必须要同时让多个数码管加上各自不同的选片段,这个属于静态显示。
所谓静态显示,就是每一个显示器,都要占用单独的具有封锁功能的I/O接口用于笔画字段形代码,单片机只要把显示的字形代码发送到接口电路,直到要显示新的数据时,再发送新的字形码,因此,使用这种方法单片机中CPU的开销小,可以提高单独锁存的I/O接口电路很多,这里以常用的串并转化电路74LS164为例介绍一种常用静态显示电路。
如图所示,5片74LS164首尾相串,而时钟端接在一起,这样,当输入8个脉冲时,从单片机RXD端输出的数据就进入到第一个74LS164中了,当第二个8个脉冲到来时,这个数据就进入了第二个片74LS164,新的数据则进入了第一个74LS164。
这样,当第五个脉冲完成后,首次送出的数据被送入到最左面的74LS164中,其他数据依次出现在第一、第二、第三、第四片74LS164中。
入口:
把要显示的数分别放在显示缓冲区60H-64H共五个单元中,并且分别对应五个数码管LED1-LED4。
出口:
蒋预置在显示缓冲区中的五个数组成相应的现实字形码,然后输出到显示器中显示。
多位数码管连接电路
图4-3-2
4.4总原理图
图4-4-1
将时钟电路、显示电路、数码管电路、键盘电路和51单片机按如图4-4-1所示连接。
数码管上显示的236为第一次输入的数字
5软件总体方案及设计流程
在软件规划要求下,简易计算器的程序主要包括以下功能模块:
(1)主模块,为系统初始化。
(2)显示与读键模块,分显示子程序,判键程序段、运算操作子程序等部分
5.1主程序设计
主程序主要是用来进行初始化的,调用其他子程序,清空各个标志位,清空缓存区,读取键码,判断功能,在LED上作出回应,主程序流程图如图所示。
(1)数字送显示缓冲程序设计
简易计算器所显示的数值最大位三位。
要显示数值,先判断数值大小和位数,如果是超过三位或大于255,将不显示数字。
可重新输入数字,再次计算。
(2)运算程序的设计
首先初始化参数,送LED低位显示“0”,高位不显示。
然后扫描键盘看是否有键输入,若有,读取键码。
判断键码是数字键、清零键还是功能键,是数值键则送LED显示并保存数值,是清零键则做清零处理,是功能键则又判断是“=”还是运算键,若是“=”则计算最后结果并送LED显示,若是运算键则保存相对运算程序的首地址。
5.2显示读键模块设计
1.LED显示程序设计
LED显示器由七段发光二极管组成,排列成8字形状,因此也称为七段LED显示器。
简易计算器用到的数字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
表5-2-1
2.读键子程序设计
为了实现键盘的输入功能,每个键都有其处理子程序,为此每个键都对应一个码——键码。
为了得到被按键的键码,使用行扫描法识别按键。
5.3定时查件及软件可靠性设计
1.定时查键的程序设计
进入定时器0的中断程序后,首先重新付初值,然后调用读键程序,如果有键按下,则判断按键是否与上次按键相同,如果相同则判断按键相应位是否为一,如果不为一,说明这不是持续按键导致的按键相应,并且进行相应的程序。
如果不是则退出中断程序。
读键程序使用的是反转法读键,不管键盘矩阵的规模大小,均进行两次读键。
第一次所有行线均输出低电平,从所有读入键盘信息(列信息);第二次所有列线均输出低电平,从所有行线读入键盘信息(行信息)。
将两次读键信息进行组合就可以得到按键的特征编码,然后通过查表得到按键的顺序编码。
将各特征编码按希望的顺序排成一张表,然后用当前读得的特征码来查表。
当表中有该特征码时,它的位置就是对应的顺序编码;当表中没有该特征码时,说明这是一个没有定义的键码,与没有按键(0FFH)同等看待。
数字键按下则将相应的数字送入缓存区,功能键按下则执行相应的程序。
首先对数字键的程序段进行相应的设计,如果运算键(+、-,*,/)响应标志不为一,则将输入的数字送入第一个操作数缓存区,并且清空所有响应位。
否则送入第二个操作数缓存区。
其次对功能键的程序段进行相应的设计。
如果功能键(+、-,*,/)第一次被按下,则置相应的标志位为一,并且将运算键响应标志位置一,清空第二个操作数的缓存区,为输入操作数做准备,如果是第二次按下则先调用运算操作子程序,执行上次按下的运算键的运算,置相应的标志位为一,并且将运算键响应标志位置一,清空第二个操作数的缓存区,为输入操作数做准备。
如果是’C’键按下,则先判断运算键响应位是否为一,如果不为一,则清空第一个操作数,否则清空第二个操作数。
如果是’=’键按下,则调用运算操作子程序。
2.软件的可靠性设计
提高本仪器的可靠性措施主要有:
(1)为防止程序跑飞,软件中设置了软件陷阱
(2)为防止键盘抖动造成按键错误,采取了软件防
(3)为了保证结果的正确性,结果溢出时显示错误代码0
6调试与仿真
下面用Keil与porteus仿真软件介绍数字计算器的仿真与调试。
6.1keilC51单片机软件开发系统
1.采用KEIL开发的89c51单片机应用程序步骤:
(1)在keil集成开发环境中创建新项目(Project)扩展文件名为.UV2,并为该项目选定合适的单片机CPU器件(本设计采用ATMEL公司下的AT89C51)
(2)用keil的文本编辑器编写源文件,可以是汇编文件(.ASM),并将该文件添加到项目中去。
一个项目文件可以包含多个文件,除了源程序文件外,还可以是库文件、头文件或文本说明文件。
(3)通过keil的相关选择项,配置编译环境、连接定位器以及Debug调试器的功能。
(4)对项目中的源文件进行编译连接,生成绝对目标代码和可选的HEX文件,如果出现编译连接错误则返回到第2步,修改源文件中的错误后重构整个项目。
(5)对没有语法错误的程序进行仿真调试,调试成功后将HEX文件写入到单片机应用系统的ROM中。
6.2porteus的操作
1.硬件电路图的接法操作
(1).放置选择(删除)元器件
(2).移动元器件
(3).缩放视图
(4).连接导线
(5).仿真,调试
2.单片机系统PROTEUS设计与仿真过程
Proteus强大的单片机系统设计与仿真功能,使它可成为单片机系统应用开发和改进手段之一。
全部过程都是在计算机上通过Proteus来完成的。
其过程一般也可分为三步:
(1)在ISIS平台上进行单片机系统电路设计、选择元器件、接插件、连接电路和电气检测等。
简称Proteus电路设计。
(2)在Keil平台上进行单片机系统程序设计、编辑、汇编编译、代码级调试,最后生成目标代码文件(*.hex)。
简称Proteus源程序设计和生成目标代码文件。
(3)在ISIS平台上将目标代码文件加载到单片机系统中,并实现单片机系统的实时交互、协同仿真。
它在相当程度上反映了实际单片机系统的运行情况。
简称Proteus仿真。
7心得体会
课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为自动化专业的学生来说掌握单片机的开发技术是十分重要的。
我的题目是数字计算器硬软件的设计,对于我们这些工科学生来说,这是一次考验。
怎么才能找到课堂所学与实际应用的最佳结合点?
怎样让自己的业余更接近专业?
怎样让自己的计划更具有序性,而不会忙无一用?
这都是我们所要考虑和努力的。
这次课程设计我学到很多很多的东西,学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。
不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。
这次课程设计通过自己的努力,同学的帮助,还有老师的辛勤指导下,最终顺利完成了。
通过这次课程设计,认识到自己在所学专业知识上存在很大不足,明确了今后的学习方向,为以后的就业打下了可靠的基础。
最后,对我们的老师,表示感谢!
谢谢他们两周来对我的帮助。
同时,对帮助我的所有同学和各位指导老师表示衷心的感谢!
8指导老师意见
9参考文献
[1]周美娟,肖来胜《单片机原理及系统设计》清华大学出版社
[2]余孟尝《数字电子技术基础简明教程》第三版.高等教育出版社
[3]彭伟《单片机C语言程序设计实训100例—基于8951+proteus仿真》电子工业出版社
[4]蔡骏《单片机实验指导教程》安徽大学出版社
[5]周美娟,肖来胜《单片机原理及系统设计》清华大学出版社
附录一
实验设计源程序:
DBUFEQU30H
TEMPEQU40H
YJEQU50H;结果存放
YJ1EQU51H;中间结果存放
GONGEQU52H;功能键存放
DINBIT0B0H;P3.0
CLKBIT0B1H;P3.1
ORG00H
START:
MOVR3,#0;初始化显示为空
MOVGONG,#0
MOV30H,#10H
MOV31H,#10H
MOV32H,#00H
MOV33H,#10H
MOV34H,#10H
MLOOP:
CALLDISP;PAN调显示子程序
WAIT:
CALLTESTKEY;判断有无按键
JZWAIT
CALLGETKEY;读键
INCR3;按键个数
CJNEA,#0,NEXT1;判断是否数字键
LJMPE1;转数字键处理
NEXT1:
CJNEA,#1,NEXT2
LJMPE1
NEXT2:
CJNEA,#2,NEXT3
LJMPE1
NEXT3:
CJNEA,#3,NEXT4
LJMPE1
NEXT4:
CJNEA,#4,NEXT5
LJMPE1
NEXT5:
CJNEA,#5,NEXT6
LJMPE1
NEXT6:
CJNEA,#6,NEXT7
LJMPE1
NEXT7:
CJNEA,#7,NEXT8
LJMPE1
NEXT8:
CJNEA,#8,NEXT9
LJMPE1
NEXT9:
CJNEA,#9,NEXT10
LJMPE1
NEXT10:
CJNEA,#10,NEXT11;判断是否功能键
LJMPE2;转功能键处理
NEXT11:
CJNEA,#11,NEXT12
LJMPE2
NEXT12:
CJNEA,#12,NEXT13
LJMPE2
NEXT13:
CJNEA,#13,NEXT14
LJMPE2
NEXT14:
CJNEA,#14,NEXT15
LJMPE2
NEXT15:
LJMPE3;判断是否清除键
E1:
CJNER3,#1,N1;判断第几次按键
LJMPE11;为第一个数字
N1:
CJNER3,#2,N2
LJMPE12;为第二个数字
N2:
CJNER3,#3,N3
LJMPE13;为第三个数字
N3:
LJMPE3;第四个数字转溢出
E11:
MOVR4,A;输入值暂存R4
MOV34H,A;输入值送显示缓存
MOV33H,#10H
MOV32H,#10H
LJMPMLOOP;等待再次输入
E12:
MOVR7,A;个位数暂存R7
MOVB,#10
MOVA,R4
MULAB;十位数
ADDA,R7
MOVR4,A;输入值存R4
MOV32
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 数字 计算器 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)