单片机十进制加法计算器设计

上传人:沈*** 文档编号:142339205 上传时间:2022-08-24 格式:DOC 页数:20 大小:231KB
收藏 版权申诉 举报 下载
单片机十进制加法计算器设计_第1页
第1页 / 共20页
单片机十进制加法计算器设计_第2页
第2页 / 共20页
单片机十进制加法计算器设计_第3页
第3页 / 共20页
资源描述:

《单片机十进制加法计算器设计》由会员分享,可在线阅读,更多相关《单片机十进制加法计算器设计(20页珍藏版)》请在装配图网上搜索。

1、 目录一、 设计任务和要求.(2)1、1 设计要求. (2)1、2 性能指标.(2)1、3 设计方案的确定.(2) 二、 单片机简要原理.(2)2、1 AT89C51的介绍单片机最小系统.(2)2、2 单片机最小系统.(2)三、 硬件的设计.(4)3、1 键盘电路的设计.(4) 3、2 显示电路的设计.(5)四、 软件的设计.(6) 4、1 系统设计.(6)4、2 显示电路的设计.(8)五、 调试与仿真.(10)5、1 Keil C51单片机软件开发系统.(10)5、2 proteus的操作.(10)六、 总结.(11)七、 参考文献.(11)附录1 程序.(12)附录2 系统硬件电路图.(1

2、8) 一、 设计任务和要求1.1 设计要求 本次课程设计,我选择的课题是单片机十进制加法计算器软硬件设计 ,设计任务为: 设计一键盘显示装置,键盘上除需定义10个十进制数字键外还要相应的功能键,其它键不定义无响应。利用此系统可分别可输入十进制被加数与加数,实现两数相加并将结果以十进制形式显示出来。1.2 性能指标 本课程设计的十进制加法计算器的计算范围为0255,计算结果全为整数,计算结果溢出结果不显示。 1、加法:三位加法,计算结果超过255溢出不显示 2、减法:三位减法,计算结果若小于零溢出不显示 3、乘法:三位数乘法 4、除法:整数除法 5、有清零功能1.3 设计方案的确定 按照1.1的

3、设计要求,本课题需要使用数码管显示和扩展4*4键盘,由于AT89C51芯片的I口不够多,而且为了硬件电路设计的简单化,故选择串行动态显示和用P1口扩展4*4键盘,扩展的4*4键盘定义十个数字键,六个功能键,使用串行动态显示显示运算结果。 主程序进行初始化,采用行列扫描进行查表得出键值,每次按键后调用显示子程序。 二、 单片机简要原理在该课程设计中,主要用到一个AT89C51芯片和串接的共阴数码管。作为该设计的主要部分,下面将对它们的原理及功能做详细介绍和说明。2.1 AT89C51的介绍: 图1 AT89C51外形结构和引脚分布图芯片AT89C51的外形结构和引脚图如图一所示。AT89C51是

4、一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。2.2 单片机最小系统 单片机最小系统就是支持主芯片正常工作的最小部分,包括主控芯片、复位电路和晶振电路。 (一) 复位电路 图2 复位电路 本设计

5、采用上电与手动复位电路,电阻分别选取100和10K,电容选取10uF,系统一上电,芯片就复位,或者中途按按键也可以进行复位。(二) 晶振电路 图3 晶振电路晶振电路是单片机的心脏,它用于产生单片机工作所需要的时钟信号。单片机的晶振选取11.0592MHz,晶振旁电容选取30pF。 三、 硬件设计简易数字计算器系统硬件设计主要包括:键盘电路,显示电路以及其他辅助电路。下面分别进行设计。 3.1 键盘电路的设计 键盘可分为两类:编码键盘和非编码键盘。编码键盘是较多按键(20个以上)和专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。通用计算

6、机使用的标准键盘就是编码键盘。当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。但大多数智能仪器和电子产品的按键数目都不太多(20个以内),为了降低成本和简化电路通常采用非编码键盘。非编码键盘的接口电路有设计者根据需要自行决定,按键信息通过接口软件来获取。本课题需要的是16个按键,故选择用非编码键盘。计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设

7、置一个按键。这样键盘上按键的个数就为44个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。矩阵键盘的工作原理:计算器的键盘布局如图五所示:一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。具体电路连接如图五所示: 图5 4*4键盘接口电路3.2 显示电路的设计 当系统需要显示少量数据时,采用LED数码管进行显示是一种经济实用的方法。数码管显示有静态显示和动态显示两种方法。为了减少端口的使用,故选择动态显示。 电路如下图六所示: 图6 三位数码管的显示电路四、 软件设计在十进制加法计算器的软件规划要求下,简易计算器的程序主要包括以

8、下功能模块:(1) 主模块,为系统的初始化。(2)显示与读键模块,分为判键程序段、运算操作子程序、显示子程序等部分;4.1 系统设计输入模块单片机(一) 系统模块图 运算模块显示模块 图六 系统模块图 此系统包括输入、运算和显示模块,由单片机控制。其中通过输入键盘模块将数字09和运算符号“+”、“-”、“*”、“/”输入单片机进行运算;运算模块分别根据输入的运算符进行加减乘除运算;显示模块将运算后的数值通过动态扫描使之在数码管上输出。(二) 系统总流程图主程序主要是用来进行初始化的,调用其他子程序,清空各个标志位,清空缓存区,读取键码,判断功能,在LED上作出回应,主程序流程图如图六所示。(1

9、)数字送显示缓冲程序设计简易计算器所显示的数值最大位三位。要显示数值,先判断数值大小和位数,如果是超过三位或大于255,将不显示数字。可重新输入数字,再次计算。(2)运算程序的设计开始首先初始化参数,送LED三位显示“0”,其它位不显示。然后扫描键盘看是否有键输入,若有,读取键码。判断键码是数字键、清零键还是功能键,是数值键则送LED显示并保存数值,是清零键则做清零处理,是功能键则又判断是“=”还是运算键,若是“=”则计算最后结果并送LED显示,若是运算键则保存相对运算程序的首地址。初始化参数 LED显示功能键 否按键输入?根据上次功能键和输入键的数据计算结果是功能键是初始化参数保存结果和功能

10、键1是数字键分析键值结果送显示缓存是清零键清零键数字键等待数值输入状态清零输入数值数值送显示缓存图7 主程序流程图 4.2 显示与按键设计(一) LED显示程序设计 LED显示器由七段发光二极管组成,排列成8字形状,因此也称为七段LED显示器。为了显示数字或符号,要为LED显示器提供代码,即字形代码。七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。简易计算器用到的数字09的共阳极字形代码如下表:显示字型gfedcba段码001111110c0h100001100f9h210110110a4h310011110b0h4110011099h5110110192

11、h6111110182h700001110f8h8111111180h9110111190h 表1 共阳极数码管段码对照表(二) 读键子程序设计为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码键码。为了得到被按键的键码,现使用行扫描法识别按键。其程序框图如图八:读键程序使用的是反转法读键,不管键盘矩阵的规模大小,均进行两次读键。第一次所有列线均输出低电平,从所有读入键盘信息(行信息);第二次所有行线均输出低电平,从所有行线读入键盘信息(列信息)。将两次读键信息进行组合就可以得到按键的特征编码,然后通过查表得到按键的顺序编码。将各特征编码按希望的顺序排成一

12、张表,然后用当前读得的特征码来查表。当表中有该特征码时,它的位置就是对应的顺序编码;当表中没有该特征码时,说明这是一个没有定义的键码,与没有按键(0FFH)同等看待。 开始初始化地址参数输出列扫描信号列扫描信号移位读入行信号是该列有输入?按照行列计算键值否四列扫描完?查表得键值否是返回等待按键释放开始 图8 计算键值子程序流程图五、 调试与仿真下面用KEIL uVision3与 proteus仿真软件介绍十进制加法计算器的仿真与调试。5.1Keil C51单片机软件开发系统(一) 系统的整体结构C51工具包的整体结构中,其中uVision是C51 for Windows的集成开发环境(IDE)

13、,可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。(二) 采用KEIL 开发的89c51单片机应用程序步骤:1. 在uVision 集成开发环境中创建新项目(Project),扩展文件名为.UV2,并

14、为该项目选定合适的单片机CPU器件(本设计采用ATMEL 公司下的AT89C51) 2. 用uVision 的文本编辑器编写源文件,可以是汇编文件(.ASM),也可以使C语言文件(扩展名.C),并将该文件添加到项目中去。一个项目文件可以包含多个文件,除了源程序文件外,还可以是库文件、头文件或文本说明文件。 3. 通过uVision 3 的相关选择项,配置编译环境、连接定位器以及Debug调试器的功能。 4. 对项目中的源文件进行编译连接,生成绝对目标代码和可选的HEX文件,如果出现编译连接错误则返回到第2步,修改源文件中的错误后重构整个项目。 5. 对没有语法错误的程序进行仿真调试,调试成功后

15、将HEX文件写入到单片机应用系统的ROM中。5.2 proteus的操作 (一)硬件电路图的接法操作 1.放置选择(删除)元器件2.移动元器件3.缩放视图4.连接导线5.仿真,调试 (二) 单片机系统PROTEUS设计与仿真过程Proteus强大的单片机系统设计与仿真功能,使它可成为单片机系统应用开发和改进手段之一。全部过程都是在计算机上通过Proteus来完成的。其过程一般也可分为三步:1.在ISIS平台上进行单片机系统电路设计、选择元器件、接插件、连接电路和电气检测等,简称Proteus电路设计。2.在Keil平台上进行单片机系统程序设计、编辑、汇编编译、代码级调试,最后生成目标代码文件(

16、*.hex)。简称Proteus源程序设计和生成目标代码文件。3.在ISIS平台上将目标代码文件加载到单片机系统中,并实现单片机系统的实时交互、协同仿真。它在相当程度上反映了实际单片机系统的运行情况。简称Proteus仿真。(三) Proteus中课程设计的仿真结果在Proteus中将硬件电路全部接好以后,将Keil中生成的.hex文件导入到单片机中,点击开始仿真按钮,电路开始仿真。可以观察到:数码管显示“000”;分别依次按下按键“5”、“+”、“6”和“=”,可以看到数码管显示“11”;也可以分别调试其它功能键,结果发现调试结果与预期的理论值相吻合,即本次课设已成功。总的仿真原理电路图见附

17、录1图九。六、 总结第一次做课程设计,一周的时间很快过去,通过这次课程设计,我进一步加深了对电子自动控制的了解。并进一步熟练了对Keil和Proteus软件的操作。也掌握了做课程设计的一般流程,为接下来两周的课设积累了一定的经验。同时发现自己有很多不足。对知识的掌握还不够全面。四处查资料,找同学帮忙,终于是艰难的完成了课设。每一份课设都不容易,必须要花时间好好做,才能有成果。七、 参考文献1,徐春辉单片微机原理及应用2,百度文库十进制加法计算 附录1 程序RESULT EQU 60H RESULT1 EQU 61H FUNCTIONKEY EQU 62H ORG 00H START: MOV

18、R3,#0 MOV FUNCTIONKEY,#0 MOV 32H,#00H MOV 33H,#00H MOV 34H,#00HMLOOP: CALL DISP ;调显示子程序 WAIT: CALL TESTKEY ;判断有无按键 JZ WAIT CALL GETKEY ;读键 INC R3 ;按键个数 CJNE A,#0,NEXT1 ;判断是否数字键 LJMP E1 ;转数字键处理 NEXT1: CJNE A,#1,NEXT2 LJMP E1 NEXT2: CJNE A,#2,NEXT3 LJMP E1 NEXT3: CJNE A,#3,NEXT4 LJMP E1 NEXT4: CJNE A,

19、#4,NEXT5 LJMP E1 NEXT5: CJNE A,#5,NEXT6 LJMP E1 NEXT6: CJNE A,#6,NEXT7 LJMP E1 NEXT7: CJNE A,#7,NEXT8 LJMP E1 NEXT8: CJNE A,#8,NEXT9 LJMP E1 NEXT9: CJNE A,#9,NEXT10 LJMP E1 NEXT10: CJNE A,#10,NEXT11 ;判断是否功能键 LJMP E2 ;转功能键处理 NEXT11: CJNE A,#11,NEXT12 LJMP E2 NEXT12: CJNE A,#12, NEXT13 LJMP E2 NEXT13:

20、 CJNE A,#13,NEXT14 LJMP E2 NEXT14: CJNE A,#14,NEXT15 LJMP E2 NEXT15: LJMP E3 ;判断是否清除键 E1: CJNE R3,#1,N1 ;判断第几次按键 LJMP E11 ;为第一个数字 N1: CJNE R3,#2,N2 LJMP E12 ;为第二个数字 N2: CJNE R3,#3,N3 LJMP E13 ;为第三个数字 N3: LJMP E3 ;第四个数字转溢出 E11: MOV R4,A ;输入值暂存R4 MOV 34H,A ;输入值送显示缓存 MOV 33H,#00H MOV 32H,#00H LJMP MLOO

21、P ;等待再次输入 E12: MOV R7,A ;个位数暂存R7 MOV B,#10 MOV A,R4 MUL AB ;十位数 ADD A,R7 MOV R4,A ;输入值存R4 MOV 32H,#00H ;输入值送显示缓存 MOV 33H,34H MOV 34H,R7 LJMP MLOOP E13: MOV R7,A MOV B,#10 MOV A,R4 MUL AB JB OV,E3 ;输入溢出 ADD A,R7 JB CY,E3 ;输入溢出 MOV R4,A MOV 32H,33H ;输入值送显示缓存 MOV 33H,34H MOV 34H,R7 LJMP MLOOP E3: MOV R

22、3,#0 ;按键次数清零 MOV R4,#0 ;输入值清零 MOV RESULT,#0 ;计算结果清零 MOV FUNCTIONKEY,#0 ;功能键设为零 MOV 32H,#00H ;显示清空 MOV 33H,#00H MOV 34H,#00H LJMP MLOOP E2: MOV 34H,#00H MOV 33H,#00H MOV 32H,#00H MOV R0,FUNCTIONKEY ;与上次功能键交换 MOV FUNCTIONKEY,A MOV A,R0 CJNE A,#10,N21 ;判断功能键 LJMP JIA ; N21: CJNE A,#11,N22 LJMP JIAN ; N

23、22: CJNE A,#12,N23 LJMP CHENG N23: CJNE A,#13,N24 LJMP CHU ;/ N24: CJNE A,#0,N25 LJMP FIRST ;首次按功能键 N25: LJMP DEN ;= N4: LJMP E3 FIRST: MOV RESULT,R4 ;输入值送结果 MOV R3,#0 ;按键次数清零 LJMP DISP1 ;结果处理 JIA: MOV A,RESULT ;上次结果送累加器 ADD A,R4 ;上次结果加输入值 JB CY,N4 ;溢出 MOV RESULT,A ;存本次结果 MOV R3,#0 ;按键次数清零 LJMP DISP

24、1 JIAN: MOV A,RESULT SUBB A,R4 ;上次结果减输入值 JB CY,N4 ;负数溢出 MOV RESULT,A MOV R3,#0 LJMP DISP1 CHENG: MOV A,RESULT MOV B,A MOV A,R4 MUL AB ;上次结果乘输入值 JB OV,N4 ;溢出 MOV RESULT,A LJMP DISP1 CHU: MOV A,R4 MOV B,A MOV A,RESULT DIV AB ;上次结果除输入值 MOV RESULT,A MOV R3,#0 LJMP DISP1 DEN: MOV R3,#0 LJMP DISP1 DISP1:

25、MOV B,#10 MOV A,RESULT ;结果送累加器 DIV AB ;结果除10 MOV RESULT1,A ;暂存商 MOV A,B ;取个位数 MOV 34H,A ;个位数送显示缓存 MOV A,RESULT1 JZ DISP11 ;结果是否为一位数 MOV B,#10 MOV A,RESULT1 DIV AB MOV RESULT1,A MOV A,B MOV 33H,A ;十位送显示缓存 MOV A,RESULT1 JZ DISP11 ;结果是否为二位数 MOV 32H,A ;百位数送显示缓存 DISP11: LJMP MLOOP DISP: MOV R0,#34H DIR1:

26、 MOV DPTR,#SEGTAB MOV A,R0 MOVC A,A+DPTR MOV P0,A CJNE R0,#34H,DIR2 SETB P2.0 CALL D1MS CLR P2.0 DEC R0 SJMP DIR1 DIR2: CJNE R0,#33H,DIR3 SETB P2.1 CALL D1MS CLR P2.1 DEC R0 SJMP DIR1 DIR3: SETB P2.2 CALL D1MS CLR P2.2 RET D1MS: MOV R7,#02H DMS: MOV R6,#0F0H DJNZ R6,$ DJNZ R7,DMS RET SEGTAB: DB 0C0H

27、, 0F9H, 0A4H, 0B0H DB 99H, 92H, 82H, 0F8H DB 80H, 90H, 88H, 83H DB 0C6H, 0A1H, 86H, 8EH TESTKEY:ACALL DISP MOV P1,#0FH ;读入键状态 MOV A,P1 CPL A ANL A,#0FH ;高四位不用 RET KEYTABLE: DB 0EEH,0EDH,0DDH,0BDH ;键码定义 DB 0EBH,0DBH,0BBH,0E7H DB 0D7H,0B7H,0DEH,0BEH DB 07EH,07DH,07BH,077H GETKEY: MOV R6,#10 ;读键子程序 ACA

28、LL DELAY MOV P1,#0FH MOV A,P1 CJNE A,0FH,K12 LJMP MLOOP K12: MOV B,A MOV P1,#0EFH MOV A,P1 CJNE A,#0EFH,K13 MOV P1,#0DFH MOV A,P1 CJNE A,#0DFH,K13 MOV P1,#0BFH MOV A,P1 CJNE A,#0BFH,K13 MOV P1,#07FH MOV A,P1 CJNE A,#07FH,K13 LJMP MLOOP K13: ANL A,#0F0H ORL A,B MOV B,A MOV R1,#16 MOV R2,#0 MOV DPTR,#KEYTABLE K14: MOV A,R2 MOVC A,A+DPTR CJNE A,B,K16 MOV P1,#0FH K15: MOV A,P1 CJNE A,#0FH,K15 MOV R6,#10 ACALL DELAY MOV A,R2 RET K16: INC R2 DJNZ R1,K14 AJMP MLOOP ;10ms延时子程序 DELAY: MOV R7,#10 TS1: MOV R6,#0FFH TS2: NOP NOP DJNZ R6,TS2 DJNZ R7,TS1 RET END 附录2 系统硬件电路图图9 总电路原理图

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!