单片机课程设计_简易计算器设计
发布时间:2024-11-12
发布时间:2024-11-12
季鹏 胡汪洋,设计单片机课程设计_简易计算器设计
课程设计论文
课题: 基于52单片机的简易计算器设计
姓名: 季鹏 胡汪洋
学号:080212161 080212167
指导老师: 王陈宁
设计时间:2014年6月10日
季鹏 胡汪洋,设计单片机课程设计_简易计算器设计
目录
一.前言...............................................................2 二.课程设计目的和要求
2.1 课程设计的目的...................................................2 2.1 课程设计的要求...................................................2 三.方案论证
3.1 对简易计算器电路的分析...........................................2 3.2 按键电路的设计...................................................4 四.电路设计
4.1 方案.............................................................4 4.2 硬件电路设计.....................................................4 4.3 软件电路设计.....................................................8 4.4 程序框图.........................................................9 五.测试结果..........................................................10 六.结论与思考........................................................10 附录一:主程序........................................................11
季鹏 胡汪洋,设计单片机课程设计_简易计算器设计
一.前言
随着社会的发展,科学的进步,人们的生活水平在逐步的提高,尤其是微电子技术的发展,犹如雨后春笋般的变化。单片机的应用已经越来越贴近生活,用单片机来实现一些电子设计也变得容易起来。计算器在人们的日常中是比较的常见的电子产品之一。可是它还在发展之中,以后必将出现功能更加强大的计算器,基于这样的理念,本次设计是用单片机来设计的计算器。该设计系统是以STC89C52为单片机, P0口作为输入端,外接4X4的键盘,通过键盘扫描来对输入数的控制,在P1口,P2口接了驱动电路,用来保证LED的工作正常。计算器将完成的功能有加,减运算功能。
关键词:计算器;电子设计;LED;单片机
二.课程设计的目的和要求 2.1 课程设计的目的
如今,单片机的应用十分广泛,许多产品都有单片机的身影。单片机的作用不言而喻。单片机设计是单片机学习的重要组成部分,通过设计电路并实现某种功能来加深单片机原理的理解。本课题设计是基于51系列单片机来进行的数字计算器系统设计,可以完成计算器的键盘输入,进行加、减运算并通过LED显示出来。设计电路采用STC89C52单片机为主要控制电路,利用4*4的矩阵键盘作为输入,LED来显示运算结果。
2.2 课程设计的要求
1.LED显示运算结果
2.键盘的设计:由于采用4*4的矩阵键盘而简易的计算器设计只需要进行加减运算,所以只要用到14个键。所以需要将不需要的两个键屏蔽。
3.实现两个数的加减运算。 三.方案论证
3.1 对简易计算器的分析
根据功能和指标要求,本系统选用STC89C52单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计考虑如下:
①由于要设计的是简单的计算器,可以进行加减运算,对数字的大小范围要求不高,故我们采用可以进行两位数的运算,选用8个LED数码管显示数据和结果。
②另外键盘包括数字键(0~9)、符号键(+、-)、清除键和等号键,故只需要
季鹏 胡汪洋,设计单片机课程设计_简易计算器设计
14个按键即可。
系统模块图:
3.2 按键电路的设计
计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O口资源,因此在很多情况下都不采用这种方式。为此,我们引入了矩阵键盘的应用,采用四条I/O线作为行线,四条I/O线作为列线组成键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4×4个。这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。
四.电路设计 4.1 方案
该设计系统是以STC89C52为单片机, P0口作为输入端,外接4X4的键盘,通过键盘扫描来对输入数的控制,在P1口,P2口接了驱动电路,用来保证LED的工作正常。计算器将完成的功能有加,减运算功能。
4.2 硬件电路的设计 4.2.1 矩阵键盘的设计
矩阵键盘的工作原理:
计算器的键盘布局如图所示:一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。
如图:
季鹏 胡汪洋,设计单片机课程设计_简易计算器设计
图二:
由图2矩阵键盘内部电路图可以知道(我们的键盘为p3口驱动),当无按键闭合时,P3.0~P3.3与P3.4~P3.7之间开路。当有键闭合时,与闭合键相连的两条I/O口线之间短路。判断有无按键按下的方法是:第一步,置列线P3.4~P3.7为输入状态,从行线P3.0~P3.3输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。第二步,行线轮流输出低电平,从列线P3.4~P3.7读入数据,若有某一列为低电平,则对应行线上有键按下。综合一二两步的结果,可确定按键编号。但是键闭合一次只能进行一次键功能操作,因此须等到按键释放后,再进行键功能操作,否则按一次键,有可能会连续多次进行同样的键操作。
4.2.2 运算模块
STC89C52单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。如果按功能划分,它由如下功能部件组
季鹏 胡汪洋,设计单片机课程设计_简易计算器设计
成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。
单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以进行很快地实现运算功能。如图为STC89C52的芯片的引脚图。
4.2.3 模块显示
发光二极管LED是单片机应用系统中的一宗简单而常用的输出设备,其在系统中的主要作用是显示单片机的输出数据、状态等。因而作为典型的外围器件,LED显示单元是反映系统输出和操作输入的有效器件。LED具备数字接口可以方便的和大年纪系统连接;它的优点是价格低,寿命长,对电压电流的要求低及容易实现多路等,
季鹏 胡汪洋,设计单片机课程设计_简易计算器设计
因而在单片机应用系统中获得了广泛的应用。
通常的数码显示器是由7段条形的LED组成(如图4所示),点亮适当的字段,就可显示出不同的数字。我们采用8段数码管,其中位于显示器右下角的LED作小数点用。
LED显示器有两种不同的形式:共阴极和共阳极。本次设计采用共阳极接法。如图为七段显示数码管。
图为共阳极和共阴极的原理图:
硬件电路图:
季鹏 胡汪洋,设计单片机课程设计_简易计算器设计
4.3 软件设计
4.3.1 键盘扫描子程序
第一步,置列线P3.4~P3.7为输入状态,从行线P3.0~P3.3输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。第二步,行线轮流输出低电平,从列线P3.4~P3.7读入数据,若有某一列为低电平,则对应行线上有键按下。综合一二两步的结果,可确定按键编号。
季鹏 胡汪洋,设计单片机课程设计_简易计算器设计
4.4 程序框图
季鹏 胡汪洋,设计单片机课程设计_简易计算器设计
五.测试结果 六.结论与思考
通过实际运行程序和进行仿真,我们的程序是没有问题的,可以实现两位数的加减法。
通过两个星期的课程设计,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互帮助。学会了合
季鹏 胡汪洋,设计单片机课程设计_简易计算器设计
作,学会了宽容,学会了理解,也学会了做人与处世。
我们这次的课程设计的主题是简易的计算器设计,通过设计简易的计算器使我加深了对单片机原理的理解。通过这次课程设计,使我的知识更加的系统和全面,使我了解了我的不足,感谢学校给我的这次机会。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。
在这次的课程设计中不仅磨练了我的动手能力,还加深了我对做人处事的理解。 回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。
在此次的课程设计中,我要感谢王陈宁老师在课程设计上给我的支持和鼓励。使我可以克服困难完成课程设计。通过王老师的帮助,解决了许多难题,加深了我对知识的理解,还让我学到了新的知识。再次万分感谢!
其次我还要感谢我的同学在我遇到困难时给我的帮助。 参考文献
[1]单片机原理实用教程:基于Proteus虚拟仿真/徐爱钧编著——北京:电子工业出版社,2009.1
[2]单片机原理及其应用(第2版)/陈立周,陈宇编——北京:机械工业出版社,2008.5
[3]51系列单片机系统设计与应用技巧/李刚等编著——北京:北京航空航天大学出版社,2004.1
[4]MCS-51单片机原理与应用/康维新主编——北京:中国轻工业出版社,2009.1 [5]单片机原理与应用系统设计/李云钢等编著——北京:中国水利水电出版社,2008.8
季鹏 胡汪洋,设计单片机课程设计_简易计算器设计
附录一:
JG EQU 50H ZJ EQU 51H
;结果放 ;中间结果存放
GONG EQU 52H ;功能键存放 ORG 0000H LJMP START ORG 0100H
START:MOV R3,#0 ;初始化显示为空 MOV GONG,#0
MOV 34H,#00H MOV 33H,#00H
LOOP1:LCALL DISP ;调显示子序 LOOP2:LCALL TKEY JZ LOOP2 LCALL KEY
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,#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:LJMP E3 ;判断是否为清除键 E1:CJNE R3,#1,N1 ;判断第几次按键 LJMP E11 ;为第一个数字 N1:CJNE R3,#2,N2 LJMP E12 N2:LJMP E3
;
;为第二个数字 ;第三个数字转溢出
E11:MOV R4,A ;输入值暂存R4 MOV 34H,A ;输入值送显示缓存 MOV 33H,#00H
LJMP LOOP1
;等待再次输入
E12:MOV R7,A ;个位数暂存R7 MOV B,#10
MOV A,R4
季鹏 胡汪洋,设计单片机课程设计_简易计算器设计
MUL AB ADD A,R7
;十位数
MOV R4,A ;输入值存R4 MOV 33H,34H MOV 34H,R7 LJMP LOOP1
;输入值送显示缓存
E3:MOV R3,#0 ; 按键次数清0 MOV R4,#0 ; 输入值清0 MOV JG,#0 ; 计算结果清0 MOV GONG,#0
; 功能键设为0
MOV 34H,#00H ; 显示清空 MOV 33H,#00H LJMP LOOP1
E2:MOV 34H,#00H MOV 33H,#00H
MOV R0,GONG ;与上次功能键交换
MOV GONG,A MOV A,R0
CJNE A,#10,N21 ;判断功能键 LJMP JIA ;“+”
N21:CJNE A,#11,N22 LJMP JIAN ;“-” N22:CJNE A,#0,N23
LJMP FIRST ;首次按功能键 N23:LJMP DENG ;“=” N4:LJMP E3 FIRST:MOV JG,R4 MOV R3,#0
;输入值送结果 ;按键次数清0
季鹏 胡汪洋,设计单片机课程设计_简易计算器设计
LJMP DISP1 ;结果处理
;上次结果送累加器 ;上次结果加输入值 ;溢出 ;存本次结果 ;按键次数清0
JIA:MOV A,JG ADD A,R4 JB CY,N4
MOV JG,A
MOV R3,#0
LJMP DISP1
JIAN:MOV A,JG SUBB A,R4
JB CY,N4 MOV JG,A MOV R3,#0
;上次结果减输入值 ;负数溢出
LJMP DISP1 DENG:MOV R3,#0 LJMP DISP1 DISP1:MOV B,#10 MOV A,JG
DIV AB
;结果送累加器 ;结果除10
MOV ZJ,A ;暂存商 MOV A,B ;取个位数
MOV 34H,A ;个位数送显示缓存
MOV A,ZJ JZ DISP11
MOV 33H,A ;十位数送显示缓存
DISP11:LJMP LOOP1 DISP:MOV R0,#34H DIR1:MOV DPTR,#LEDCA
MOV A,@R0
季鹏 胡汪洋,设计单片机课程设计_简易计算器设计
MOVC A,@A+DPTR MOV P0,A
CJNE R0,#34H,DIR2 SETB P2.0 LCALL DELAY10MS CLR P2.0 DEC R0
SJMP DIR1
DIR2:SETB P2.1 LCALL DELAY10MS CLR P2.1
RET
MOV P3,#0FH MOV A,P3 CPL A ANL A,#0FH RET KEY: MOV R6,#10 ACALL DELAY10MS MOV P3,#0FH MOV A,P3 CJNE A,#0FH,K2 LJMP LOOP1
K2:MOV B,A MOV P3,#0EFH MOV A,P3
TKEY:ACALL DISP