简易计算器设计.docx
- 文档编号:18262867
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:31
- 大小:668.87KB
简易计算器设计.docx
《简易计算器设计.docx》由会员分享,可在线阅读,更多相关《简易计算器设计.docx(31页珍藏版)》请在冰点文库上搜索。
简易计算器设计
课程设计报告
课程名称:
单片机原理及应用课程设计
设计题目:
简易计算器
系别:
通信与控制工程系
专业:
电子信息工程
班级:
2班学生姓名:
学号:
起止日期:
指导教师:
教研室主任:
指导教师评语:
指导教师签名:
年月日
成绩评定
项目
权重
成绩
1、设计过程中出勤、学习态度等方面
0.2
2、课程设计质量与答辩
0.5
3、设计报告书写及图纸规范程度
0.3
总成绩
教研室审核意见:
教研室主任签字:
年月日
教学系审核意见:
主任签字:
年月日
摘要
该简易计算器以STC89C52单片机为核心,8255芯片,数码管,利用汇编语言编写相应程序进行有效四则运算。
该计算器计算精度不高,只能实现简单的加减乘除,且有效数字位数有限。
该装置由STC89C52模块,4x4键盘(包括1~9,+,-,*,/等十六个字符),数码管显示屏组成。
STC89C52为主模块,其控制键盘及8255模块。
键盘可以实现数字及运算符号的输入,8255控制的数码管可以进行人机交互,显示按下键盘所对应的字符以及显示运算结果。
显示部分:
采用数码管显示。
按键部分:
采用4*4键盘;通过扩展必要的外围接口电路,用汇编对单片机进行编程,实现对计算器的设计。
关键字:
STC89C5;28255;LED数码管
1设计要求1
1.1要求1
2硬件设计部分2
2.1主控芯片STC89C522...
2.28255芯片3...
2.3键盘4
2.4LED数码显示管4...
3软件设计部分6
3.1LED显示程序设计6...
3.2读键输入程序设计6...
3.3数值送显示缓冲程序设计7..
3.4运算主程序设计8...
4系统测试9
4.1软件调试步骤9...
4.2程序调试步骤1..0.
4.3矩阵4*4键盘的调试1..0.
4.4数码管程序调试1..0.
4.5测试结果1..0.
5总结与思考1..1..
参考文献1..2..
致谢1..3..
附录一1..4..
附录二2..6..
简易计算器
1设计要求
1.1要求
设计一个简易计算器,要求能够进行简单的加减乘除运算,具体要求如下:
1.4X4键盘输入,数码管显示。
2.完成整数的加减乘除,加法和减法要求可以实现连加、连减。
3.可进行错误判断,溢出、除零等错误将显示一个字符E。
4.由于键盘只有16个按键,安排如下:
|7|8|9|+|
|4|5|6|-|
|1|2|3|*|
|0|.|=|/|
2硬件设计部分
2.1主控芯片STC89C52
STC89C52是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用STC公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构。
STC89C52具有如下特点:
40个引脚(引脚图如图1所示),4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WD)T电路,片内时钟振荡器。
此外,STC89C52R设C计和配置了振荡频率可为0Hz并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP
和PLCC等三种封装形式,以适应不同产品的需求。
图1STC89C51
VCC(40):
+5V;
GND(20):
接地;
P0口(39-32):
P0口为8位漏极开路双向I/O口,每引脚可吸收8个TTL门电流。
P1口(1-8):
P1口是从内部提供上拉电阻器的8位双向I/O口,P1口缓冲器能接收和输出4个TTL门电流。
P2口(21-28):
P2口为内部上拉电阻器的8位双向I/O口,P2口缓冲器可接收和输出4个TTL门电流;P3口(10-17):
P3口是8个带内部上拉电阻器的双向I/O口,可接收和输出4个TTL门电流。
P3口也可作为AT89C51的特殊功能口。
RST(9):
复位输入。
当振荡器复位时,要保持RST引脚2个机器周期的高电平时间。
ALE/PROG(30):
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节,在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6,它可用作对外部输
出的脉冲或用于定时目的,要注意的是,每当访问外部数据存储器时,将跳过图21个ALE脉冲。
PSEN(29):
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期2次PSEN有效,但在访问外部数据存储器时,这2次有效的PSEN信号将不出现。
EA/VPP(31):
当EA保持低电平时,外部程序存储器地址为(0000H-FFFFH)不管是否有内部程序存储器。
FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1(19):
反向振荡器放大器的输入及内部时钟工作电路的输入;XTAL2(18):
来自反向振荡器的输出。
2.28255芯片
利用8255可编程并行口芯片,实现输入/输出实验,实验中用8255PA和PB口
做输出,实现在数码管上从0到F循环显示的效果
2.3键盘
键盘输入采用4*4的矩阵键盘。
4*4键盘分别与P3.0~P3.7相连。
P3.0~P3.3作为输入口(回送线),P3.4~P3.7作为输出口(扫描线)。
16个按键分别用于控制数字“0~9”以及数学运算符号“+、-、*、/”。
键盘模块电路如下图所示:
图4
2.4LED数码显示管
LED显
LED显示器由七段发光二极管组成,排列成8字形状,因此也成为七段示管,排列形状如图5所示:
图5
与8255的PA,PB,PC口的连接如下图所示:
图6LED显示接口
3软件设计部分
3.1LED显示程序设计
为了显示数字或符号,要为LED显示器提供代码,即字形代码。
七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。
简易计算器用到的数字0~9的共阳极字形代码如下表:
表格1
3.2读键输入程序设计
为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码——键码。
为了得到被按键的键码,现使用行扫描法识别按键。
10,余数送显最最低位,判断商是否为0,
值,则符号位显示“-”,然后将数值除以
简易计算器所显示的数值最大位两位。
要显示数值,先判断数值正负,如果是负
图7读键流程图
其程序框图如下:
3.3数值送显示缓冲程序设计
若为0则返回,若不为0,则将商除以10,将余数送显高位。
程序框图如下:
3.4运算主程序设计
首先初始化参数,送LED低位显示“0”,高位不显示。
然后扫描键盘看是否有键输入,若有,读取键码。
判断键码是数字键、清零键还是功能键(“+”“-”“*”“/
“=”),是数值键则送LED显示并保存数值,是清零键则做清零处理,是功能键则又判断是“=”还是运算键,若是“=”则计算最后结果并送LED显示,若是运算键则保存相对运算程序的首地址。
运算主程序框图如下所示:
图9运算流程图
4系统测试
4.1软件调试步骤
(1)打开软件后,在project菜单中选择NewProject命令,打开一个新项目,保存此项目,输入工程文件名后,并保存工程文件的目录。
(2)为项目文件选择一个目标器件,即选择8051的类型,在Database列表框中选择“ATML89C52”,确定。
(3)上述设置好后,创建源程序文件并输入程序代码。
输入好代码后点击“文件保存”。
(4)把源文件添加到项目中,用鼠标指在目标工作区的目标1,点击右键在弹出的
菜单中选择添加文件到源代码组,在弹出的添加文件框中,选择需要添加到项目中的文件。
(5)开始编辑,对项目文件进行编辑,若没有错误后进行硬件调试。
4.2程序调试步骤
程序调试应一个模块一个模块地进行,首先单独以调试各功能程序,检查程序是否能够实现预期的功能,接口电路的控制是否正常等;最后逐渐将各子程序连接起来进行总调试。
故调试步骤如下:
4.3矩阵4*4键盘的调试
键盘程序是整个程序的基础,我们必须保证其正确。
调试方法:
先把程序下载到单片机,让数码管显示,在有键按下时显示的是否为设定的值。
4.4数码管程序调试
正确的显示数值是整个储蓄的关键。
调试方法:
先把程序下载到单片机,让数码管显示数值。
4.5测试结果
实例测试:
将写入程序的单片机插入实验板插座内,程序正确的有0~9数值的显示和正常的四则运算以及判断错误、溢出、除0。
5总结与思考
电子设计正在当今社会发挥越来越重要的作用,其采用的软硬件结合技术也逐渐成熟,该模拟系统正是采用软硬相结合的方法实现的。
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程FLASH存储器,可以为众多嵌入式控制应用系统提供灵活、超有效的解决方案。
在键盘设计方面,主要是软件的设计,通过程序编码来完成硬件方面所无法工作的部分,例如关于在扫描键盘时,需要逐行拉低并进行判断、编码。
判断时,需要不断的屏蔽字节,来获取所需要的数据,而这一点硬件是无法做到的。
此次课程设计是做简易计算器,这个需要对51芯片有足够的理解,能够充分认识每个引脚的详细功能,对于汇编语言也必须掌握的比较好。
正是由于此次设计让我们明白了单片机在实践中的运用。
参考文献
[1]朱定华,戴汝平.单片微机原理与应用.北京:
清华大学出版社,2003
[2]康华光主编.电子技术基础:
模拟部分(第五版).北京:
高等教育出版社,2005
[3]康华光主编.电子技术基础:
数字部分(第五版).北京:
高等教育出版社,2005
[4]柳淳主编.电子制作技能与技巧.北京:
中国电力出版社,2008
[5]马全喜主编,李晓慧、何怀明副主编.电子元器件与电子实习.北京:
机械工业出版社,2007
[6]彭介华主编.电子技术课程设计指导.北京:
高等教育出版社,1997
[7]陈涛编著.单片机应用及C51程序设计.北京:
机械工业出版社,2008
[8]张义和陈敌北编著,刘丹等改编.例说8051.北京:
人民邮电出版社,2006
[9]戴佳,戴卫恒,刘博文编著.51单片机C语言应用程序设计实例精讲(第二版).北京:
电子工业出版社,2008
[10]张鑫主编,华臻,陈书谦副主编.单片机原理及应用.北京:
电子工业出版社,2005
致谢
这次课程设计通过我们小组的努力终于顺利完成了,在设计中遇到了很多问题,最后在指导老师的辛勤指导下,终于迎刃而解,让我们所学到的理论与实践相结合,在实践中领悟理论,让我们的综合能力得到了一定的提升。
让我们充分的了解到单片机的奥妙以及单片机在实践生活中的广泛应用。
至此,感谢各位领导和指导老师!
附录
PAPORTEQU0D1FFH
PBPORTEQU
0D2FFH
PCPORTEQU
0D5FFH
BIAOZHI1EQU
63H
BIAOZHI2EQU
62H
BIAOZHI3EQU
61H
DATA111EQU
66H
DATA222EQU
67H
DATA13
EQU
65H
DATA12
EQU
68H
DATA22
EQU
69H
DATA23
EQU
64H
DATA11
EQU
70H
DATA21
EQU
71H
;端控制口A口
;位控制口和键盘列线输出口B口
;键盘行码读入C口
DIZHI1EQU72H
;置显示缓冲单元首地址
DIZHI2EQU73H
LEDBUFEQU58H
ORG0000H
LJMPSTART
LEDMAP:
DB0A0H,0BBH,62H,2AH
;0,1,2,3
DB39H,2CH,24H,0BAH
;4,5,6,7
DB20H,28H,30H,25H
;8,9,A,B
DB0E4H,23H,64H,74H
;C,D,E,F
DB0FFH
;全暗
DISPLAYLED:
//MOV60H,#39H
;共两个八段管
;EFH=11110111B从边开始显示
;显示一位八段管
;段控口地址
;输出到段控口
;显示下一位
;是否有键按下
;屏蔽高位
;判断是否为干扰信号
//MOV61H,#2CHMOVR0,#LEDBUFMOVR1,#3MOVR2,#0F7H
LOOP:
MOVDPTR,#PAPORTMOVA,R2
MOVX@DPTR,AMOVA,@R0
MOVDPTR,#PBPORTMOVX@DPTR,ACALLDELAY1MSMOVA,R2
RLA
MOVR2,A
INCR0DJNZR1,LOOPRET
KEY1:
MOVDPTR,#0D5FFHMOVA,#0F0HMOVX@DPTR,AACALLDELAY1MSMOVXA,@DPTRANLA,#0FHRET
LKEY1:
ACALLDELAY10MSACALLDELAY10MSACALLKEY1
JNZLKEY2;非干扰则跳转至扫描行线
ACALLDELAY10MS
AJMPMLOOP
LKEY2:
MOVR2,#10H;扫描列线
MOVR1,#00H
LKEY4:
MOVDPTR,#0D5FFH
MOVA,R2
MOVX@DPTR,A
ACALLDELAY1MS
MOVXA,@DPTR
LZERO:
JNBACC.0,LONEMOVA,#0CHAJMPLKEYP
LONE:
JNBACC.1,LTWOMOVA,#08HAJMPLKEYP
LTWO:
JNBACC.2,LTHRMOVA,#04HAJMPLKEYP
LTHR:
JNBACC.3,NEXTMOVA,#00H
LKEYP:
ADDA,R1
PUSHACC
;扫描行线
;第四行
LKEY3:
ACALLDELAY10MSACALLKEY1JNZLKEY3POPACCMOVR3,A
NEXT:
INCR1
MOVA,R2
JBACC.7,KND
RLA
MOVR2,A
AJMPLKEY4KND:
AJMPMLOOPDELAY10MS:
MOVR7,#40
AJMPDLY1DELAY1MS:
;列线加1
;扫描完最后一根列线则返回
;延迟程序
MOVR7,#4
DLY1:
MOVR6,#123
DLY2:
DJNZR6,DLY2
NOP
DJNZR7,DLY1
RET
START:
MOVSP,#40H
MOVLEDBUF+0,#03FH
MOVLEDBUF+1,#03FH
MOVLEDBUF+2,#03FH
MOVDPTR,#0D7FFH;PCOM初始化
MOVA,#81H
MOVX@DPTR,A
MOVDPTR,#0D1FFH;初始化PA
MOVA,#0FFH
MOVX@DPTR,A
MOVDPTR,#0D2FFH;初始化PB
MOVA,#0FFH
MOVX@DPTR,A
MOVDPTR,#0D5FFH;初始化
MOVA,#0FFH
MOVX@DPTR,A
/*ALOOP:
MOVDPTR,#PAPORT
MOVA,#0EFH
MOVX@DPTR,A
MOVA,#30H
MOVDPTR,#PBPORT
MOVX@DPTR,A
LJMPALOOP
MLOOP:
LCALLDISPLAYLED
LCALLKEY1
JZMLOOP
ACALLDELAY10MS
LCALLLKEY1
JISUAN:
MOVR3,A
CJNER3,#0FH,QU
MOVR3,#00H
MOVR4,#00H
MOVR5,#00H
MOVBIAOZHI1,#00H
MOVBIAOZHI2,#00H
MOVBIAOZHI3,#00H
MOVDATA21,#00H
MOVDATA23,#00H
PC
;显示一位八段管
;段控口地址
;输出到段控
*/
;显示
;有键入?
;无键入,继续显示
;读入键码
;判断是否为清零键?
MOVDATA11,#00H
MOVDATA12,#00H
MOVDIZHI1,#00H
MOVDIZHI2,#00H
MOVDATA13,#00H
MOVDATA22,#00H
MOVDATA111,#00H
MOVDATA222,#00H
MOVLEDBUF+0,#03FH
MOVLEDBUF+1,#03FH
MOVLEDBUF+2,#03FH
LJMPMLOOP
QU:
CLRC
判断是数字键还是功能键?
;R3<10,说明是数字键
;判断是否有运算符输入,
;有就将数值存在DATA2
CJNER3,#0AH,FOLLOWFOLLOW:
JCSHUZI
LJMPGN
SHUZI:
MOVA,R4
JNZSHUZI1
MOVA,BIAOZHI1
CJNEA,#00H,DA11
INCBIAOZHI1
MOVA,R3
MOVDATA11,A
LJMPLJ11
DA11:
MOVA,BIAOZHI1
CJNEA,#01H,DA12
INCBIAOZHI1
MOVA,R3
MOVDATA12,A
LJMPLJ12
DA12:
MOVA,BIAOZHI1
CJNEA,#02H,D111
INCBIAOZHI1
MOV
MOV
LJMP
LJ11:
MOV
A,R3DATA13,ALJ13DATA111,A
LJMPD111
LJ12:
MOV
MOV
MUL
ADD
MOV
LJMP
LJ13:
MOV
MOV
MUL
MOV
MOV
MOV
MUL
ADD
ADD
MOV
D111:
MOV
A,DATA11
B,#10ABA,DATA12DATA111,AD111A,DATA11B,#100ABDATA111,AA,DATA12
B,#10ABA,DATA111A,DATA13
DATA111,AA,DATA111
LJMPXS
;显示第一次输入的数值
SHUZI1:
MOVA,BIAOZHI2
CJNEA,#00H,DA21
INCBIAOZHI2
MOV
DATA21,A
LJMP
LJ21
MOV
A,BIAOZHI2
CJNE
A,#01H,DA22
INCBIAOZHI2
MOV
A,R3
MOV
DATA22,A
LJMP
LJ22
MOV
A,BIAOZHI2
CJNE
A,#02H,D222
INCBIAOZHI2
MOV
A,R3
MOV
DATA23,A
LJMP
LJ23
MOVDATA222,A
LJMPD222
MOV
A,DATA21
MOV
B,#10
MUL
AB
ADD
A,DATA22
MOV
DATA222,A
LJMP
D222
MOV
A,DATA21
MOV
B,#100
MUL
AB
MOV
DATA222,A
MOV
A,DATA22
MOV
B,#10
MOVA,R3
DA21:
DA22:
LJ21:
LJ22:
LJ23:
MULAB
ADDA,DATA222
ADDA,DATA23
MOVDATA222,A
D222:
MOVA,DATA222
LJMPXS
GN:
MOVR4,#01HCJNER3,#0EH,JAMOVR4,#00hMOVA,DIZHI1MOVDPH,A
MOVA,DIZHI2MOVDPL,A
MOVA,#00HJMP@A+DPTR
JA:
CJNER3,#0AH,JN
MOVDPTR,#JIA
MOVA,DPH
MOVDIZHI1,A
MOVA,DPL
MOVDIZHI2,A
MOVLEDBUF+0,#03FH
MOVLEDBUF+1,#03FH
MOVLEDBUF+2,#03FH
LJMPMLOOP
JN:
CJNER3,#0BH,CE
MOVDPTR,#JIAN
;显示第二次输入的数值
;将01H给R4,说明已有运算符输入;判断键值是否为"="?
;将R4清零
;执行"="
;转到本次输入的算法程序
;若键值为"+"则将"+"的程序首地址
;存在DIZHI1和DIZHI2中
;若键值为"-"则将"-"的程序首地址存
;DIZHI1和DIZHI2中
MOVA,DPH
MOVDIZHI1,A
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 计算器 设计