ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:217.22KB ,
资源ID:876970      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/876970.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于proteus的AT89C51单片机实现计算器的加减乘数开方等功能.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于proteus的AT89C51单片机实现计算器的加减乘数开方等功能.docx

1、基于proteus的AT89C51单片机实现计算器的加减乘数开方等功能一、任务说明2二、原理图绘制说明3三、流程图绘制以及说明5 1显示程序设计5 2键盘识别程序设计6 3运算程序设计8 4风鸣器程序设计9四、PROTEUS仿真说明 10五、课程设计体会 15附I:计算器电路原理图16附II:源程序代码 17参考文献 34一、任务说明本设计是一个实现加、减、乘、除的计算器,它的硬件主要由四部分组成,一个AT89C51单片机芯片,一个八位共阳极的数码管,一个四乘四的键盘,一个排阻做P0口的上拉电阻,它可以实现结果低于65535的加、减、乘、除运算。采用动态显示,由八位共阳极数码管通过P0口,P2

2、口与单片机相连,数码管的A,B,C,D,E,F,G,DP分别依次与单片机的P0.0P0.7相连,P0口做为字码控制端,数码管的1,2,3,4,5,6,7,8各引脚分别与单片机的P2.0P2.7相连,P2口做为数码管的位控制端,动态显示是每次数码管只显示一位,由于人的视觉停留是0.05到0.2秒之间,当数码管依次点亮各个位时,使循环的频率高于人的视觉停留时间,人们就会认为数码管是同时点亮的,就可以达到动态显示的效果。采用4*4键盘。采用软件识别键值并执行相应的操作,键盘的第0行到第3行依次与单片机的P3.4P3.7管脚相连,键盘的第0列到第3列依次与单片机的P1.0P1.3管脚相连,程序运行时依

3、次扫描各行,查询是否有键按下,如果有则进入键盘识别处理程序,实现相应的运算,然后通过数码管输出结果,如果没有按键就调用显示程序显示一个0,等待按键按下,在进入按键扫描程序。这样循环执行。基本功能如下:1.计算器可显示8位数字,开机运行时,只有数码管最低位显示为“0”,其余位全部不显示;2.第一次按下时,显示“D1”;第二次按下时,显示“D1D2”;第三次按下时,显示“D1D2D3”,8个全显示完毕,再按下按键下时,给出“嘀”提示音,并且输入的第九个数不接收,仍然显示原来的八位数;3.可以对计算结果小于65535的两个无符号数进行、-、*、/运算,并显示计算结果,如果输入的预计算的数超过6553

4、5,则运算时报错,显示“ERROR”,如果结果超过65535仍然报错,显示“ERROR”,以提示使用者输入错误,应清零后在从新输入。4.运算时,如果输入错了可按清零键清零,重新输入数据,运算过程中,如果运算的表达式是加、减、乘、除混合运算,可以连续运算,不需按等号键,运算规则是从左到右,不区分运算等级,即、-、*、/认为是同级别的运算。二、原理图绘制说明首先得设计一个显示程序,这个显示程序应是动态显示,思路有两个:(1)让P2口做位扫描,P0口做段码输出,在调用显示程序时,P2口循环选通数码管每一位的,P0口也依次循环输出相对应位的代码。如何控制数字显示呢?可先将09、熄灭,11个段码放入列表

5、中,在设置八个显示缓冲区,数码管要显示的数字就存放在这八个单元中,通过控制八个缓冲区的内容来控制输出的数字。如:要显示的是1234则将缓冲区从低位开始依次放入04H、03H、02H、01H剩余四位放入11H(代表数码管熄灭的代码),要注意的是,当调用显示程序时,通过程序根据八个数码管缓冲区的数字调用相对应的代码就可以循环输出,但是我们看到的是同时显示1234,因为视觉停留的原故。当它的循环频率大于人的视觉停留时间,人们就认为它是同时显示的。虽然八个数码管都输出了,但是高四位送的代码是熄灭,即不显示,当不输入数字时使八个缓冲区初始化为,第一位放00H,其余放11H,就可以只显示0,等待输入数据,

6、这样就控制了显示位数实现了动态显示。(2)让P2口做位扫描,P0口做段码输出,设置一个单元用来记录输入数字的位数,这样可以不用循环扫描每一位,而是根据输出位数判断扫描哪些位。如上面的例子,当显示1234时,不用在向高四位送入11H,也不需要熄灭的代码了。调用显示程序时先选通第一位(最低位),送出代码1,然后判断是否显示完毕,(通过记录数字个数单元的内容减一是否得0来判断),如没显示完则显示下一位,如显示完则跳出。在本设计中选用后者。其次是设计键盘扫描程序,这里采用4*4矩阵键盘,通过软件识别,行和列可接在同个端口上,也可接在不同端口上,本设计行接在P3口的高四位,列接在P1口的低四位,通过循环

7、扫描行,读取列的数据判断是否有键按下,如果有则调用按键识别程序识别是哪个键,执行相应的操作,按键识别是根据按键时得到的列代码与行代码组合,来判断是哪个键的。按键识别后,如果是数字键则直接放入数码管显示缓冲区,如果再次有数字键按下,则应将缓存区的数字向高位移一位,将刚输入的数放入最低位,并且记录按键次数,每输入一个键值都调用显示程序显示出来,如果是运算符,则执行相应的运算,然后在调用显示程序显示结果。最后是运算程序的加入,运算程序很简单,只要把、-、*、/分别做成模块,用到时即可调用,本设计的难点是键盘识别和数值显示,因为这里边涉及到键盘输入的数值在内部要转换成10进制运算,运算结果要转换成各个

8、位的显示数字输出。在硬件的选择和连接上,单片机选择AT89C51,数码管选择共阳机八位数码管,键盘4*4矩阵键盘,P0口接上拉电阻,数码管的A,B,C,D,E,F,G,DP分别依次与单片机的P0.0P0.7管脚相连,P0口做为单片机的字码控制端,数码管的1,2,3,4,5,6,7,8各引脚分别与单片机的P2.0P2.7管脚相连,键盘的第0行到第3行依次与单片机的P3.4P3.7,键盘的第0列到第3列依次与单片机的P1.0P1.3,AT89C51接12MHZ晶振。P3.0接风鸣器。计算器原理图如图1所示:图1计算器原理图三、流程图绘制及说明1、显示程序设计显示程序流程图如图2所示。考虑到显示程应

9、具有通用性,在不进行输入时显示0,输入时显示输入的数字或运算结果,而且要使8个数码管同时显示不同的数字,选用动态显示应是最佳的。将30H-37H单元设置成数码管显示缓冲区,分别存放数码管各个位要显示的数据,40H单元作为输入数据的计数单元。因为运算结果超出范围时应报错,使数码管显示“ERROR”即可,将数码管的09的代码和“ERROR”代码存于LABLE1列表中。当调用显示程序时,显示程序根据40H单元的记录的个数决定数码管显示的位数。如果输入错误将在数码管上显示“ERROR”。这样就得到了显示程序的入口:30H-37H,依次存放个位千万位。 40H,存放输出的数字位数。 出口:数码管,P0输

10、出字段码 P2输出位选码。图2数码管显示流程图2、键盘识别程序设计键盘识别程序流程图如图3所示。首先将P3口送0EOH,将P1口先送1在读P1口的数据当P1口低四位全一时说明没有键按下,在扫描下一行,如果P1口不全一,则有键按下,将P3口高四位与P1口低四位组合成一个字节,放入R5寄存器中,按键去抖,判键是否松开,如松开则将得到的键值判别是哪个键,如果是数字键则首先将其对应的数字(按键代码对应如下表)放入缓冲区30H,同时将将键值放入结果缓冲区,并调用显示程序,显示键值,在调用扫描键盘程序,如果在有键值输入则将原来的数值在数码管显示缓冲区向高位依次移一位,将刚键入的数值放入最低位,并将原来的数

11、值乘十加上刚键入的数放人结果缓冲区,然后调用显示程序,如果是运算符,则记录运算符标志,加法用01H表示,减法用02H表示,乘法用03H表示,除法用04H表示,并将结果缓冲区的数转移到中间结果缓冲区,将结果缓冲区清零,等待输入运算数据,当按等号时,根据记录的运算符标志,判断是那种运算,执行运算将结果依次除10取余数放入结果显示缓冲区,调用显示程序。依次循环执行。键码 键值键码 键值EE7BE1 ED8BD2 EB9BB3 E7/B7- DE47ECL DD57D0 DB67B= D7*77+ 图3 键盘扫描流程图3、运算程序设计 运算程序流程图如图4所示。运算程序分四个模块,即加减乘除。分别采用

12、两字节运算,因此运算结果不能超出两字节,否则会溢出。溢出时显示ERROR。加法程序:入口:R0被加数低位字节地址指针,R1加数低位字节地址指针,R3字节数。出口:R0和值地位字节地址指针,R3和值字节数。运算时用R0,R1间接寻址,从低字节算起,高字节采用带进位加(ADDC),计算结果回送到R0所指的单元中,并将和字节数放入R3单元中,如果R3大于等于3说明溢出。减法同加法类似,入口:R0被减数低位字节地址指针,R1减数低位字节地址指针,R3字节数。出口:R0和值地位字节地址指针,R3和值字节数。只是判断溢出是通过CY位,如果运算后CY位有借位,则将07H位置1,否则置0。乘法程序:入口:R3

13、,被乘数低位地址字节,R2,被乘数高位地址字节,R7,乘数低位地址字节,R6,乘数高位地址字节。出口:R4,R5,R6,R7结果字节由高到低。通过判断R5是否为零就可以知道运算结果是否溢出,如果溢出调用溢出程序。 除法程序:入口:被除数放在R4R5R6R7,R4R5,内容为零,R4高R5低,除数放在R2R3,R2高R3低。出口:商放在R6R7,R6高R7低,余数放在R4R5,R4高R5低 。NNY图4运算程序流程图3.4风鸣器程序设计 这个程序是实现当输入八个数字时,如果在输入数字它便鸣叫,提示使用者输入以满,不允许在键入值,只需在键盘程序中,加入判别输入是否超过八个如果超过则调用风鸣器程序,

14、使P3.0由低电平转入高电平,延迟1ms返回。四、proteus仿真说明1开机显示:运行显示0,等待键入数值。如图5所示。图5 开机显示界面2加法运算:键入被加数1000,显示1000。如图6所示。图6 键入加数1000显示键入“+”显示原来键入的数值,等待键入加数。如图7所示。图7 键入+号显示界面键入加数5000,显示5000。如图8所示。图8 键入加数5000显示界面键入“”显示结果,6000。如图9所示。图9 键入=号显示界面3减法运算:键入清零键“CL”。如图10所示。图10 清零显示界面键入被减数4000,显示4000。如图11所示。图11 键入被减数4000界面键入“”显示上次键入的值,等待键入减数。如图12所示。图12 键入-号显示界面键入减数2000,显示录2000。如图13所示。图13键入减数显示界面键入等号“”显示结果2000。如图14所示。图14 键入=号显示界面4乘法运算:清零后键入被乘数5000,显示5000。如图15所示图15 键入被乘数5000显示界面键入乘号“*”,显示上一次键入的数

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1