计算器.docx
《计算器.docx》由会员分享,可在线阅读,更多相关《计算器.docx(25页珍藏版)》请在冰豆网上搜索。
![计算器.docx](https://file1.bdocx.com/fileroot1/2023-4/17/6f6f7f2c-85a1-4852-8e40-522c925a6370/6f6f7f2c-85a1-4852-8e40-522c925a63701.gif)
计算器
题目:
简易计算器
目录
第1节引言………………………………………………………………………1
1.1计算器概述……………………………………………………………1
1.2本设计任务……………………………………………………………1
1.3系统主要功能……………………………………………………………2
第2节计算器硬件设计……………………………………………………………3
2.1键盘识别技术…………………………………………………………3
2.2 LED“0-9”数字显示技术………………………………………………5
第3节系统软件设计………………………………………………………………11
3.1系统主程序设计…………………………………………………11
3.24×4矩阵式键盘设计…………………………………………………11
3.3“0-9”数字显示设计…………………………………………………17
第4节结束语………………………………………………………………………20
参考文献………………………………………………………………………21
单片机实现的简易计算器
第1节引言
目前,51系列单片机在我国的各行各业得到了广泛应用,各大专院校、职业培训学校,均开设了单片机原理与应用方面的课程,这是一门技术性和实践性很强的学科,必须通过一系列的软硬件实验、理论联系实际,才能学好、学懂,取得较好的学习效果。
1.1计算器概述
1、加数和被加数的输入位数固定为4位;
2、相加结果显示要考虑进位的输出显示(即5位输出);
3、注意对“0”——“9”、“+”、“=”以外按键输入的处理;
4、注意对相加结果进行十进制处理;
5、输入加数和被加数时,显示器上显示的数字要像平时用的计算器输入一样,即:
每输入一个数字,原来显示的数字要往左移。
6、可以完成累加功能,即可以完成如下内容:
3265+3885+1254+2358+7779+。
。
。
1.2本设计任务
如图4.14.2所示,用AT89S51的并行口P1接4×4矩阵键盘,以P1.0-P1.3作输入线,以P1.4-P1.7作输出线;在数码管上显示每个按键的“0-F”序号。
对应的按键的序号排列如图4.14.1所示
图4.14.1
(1. 开机时,显示“0”
(2. 第一次按下时,显示“D1”;第二次按下时,显示“D1D2”;第三按下时,显示“D1D2D3”,8个全显示完毕,再按下按键下时,给出“嘀”提示音。
(3.数字0-9点阵显示代码的形成
1.3系统主要功能
用4*4键盘做一个模拟计算器,实现最高四位的加,减,乘,除功能,按键识别和显示部分我都会,就是按键后怎样将运算符前后的数据区分开
1.输入一位就显示一位,在输入一个运算符之前最多只能输入四位。
2.将运算符前,后的数据区分开来,同时将运算符前后输入的数据转换为一个10进制数。
3.对输入的数据进行处理,即进行算术运算,最重要的是对于除法时,如果有小数位时,显示部分应该做处理。
第2节
计算器硬件设计
硬件系统是指构成微机系统的实体和装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。
单片机实质上是一个硬件的芯片,在实际应用中,通常很难直接和被控对象进行电气连接,必须外加各种扩展接口电路、外部设备、被控对象等硬件和软件,才能构成一个单片机应用系统。
2.14×4矩阵式键盘识别技术系统的硬件构成及功能
1.硬件电路原理图
2.系统板上硬件连线
(1. 把“单片机系统“区域中的P3.0-P3.7端口用8芯排线连接到“4X4行列式键盘”区域中的C1-C4 R1-R4端口上;
(2. 把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:
P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。
3. 程序设计内容
(1. 4×4矩阵键盘识别处理
(2. 每个按键有它的行值和列值 ,行值和列值的组合就是识别这个按键的编码。
矩阵的行线和列线分别通过两并行接口和CPU通信。
每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。
键盘处理程序的任务是:
确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。
两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。
4.程序框图
P3=FFH,P3.0=0
有键按下吗?
延时10ms
真得有键按下吗?
根据当前状态识别按键
P3=FFH,P3.1=0
有键按下吗?
延时10ms
真得有键按下吗?
根据当前状态识别按键
P3=FFH,P3.2=0
有键按下吗?
延时10ms
真得有键按下吗?
根据当前状态识别按键
P3=FFH,P3.3=0
有键按下吗?
延时10ms
真得有键按下吗?
根据当前状态识别按键
图4.14.3
2.2点阵式LED“0-9”数字显示技术
1.电路原理图
图4.25.1
2.硬件系统连线
(1). 把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“DR1-DR8”端口上;
(2). 把“单片机系统”区域中的P3端口用8芯排芯连接到“点阵模块”区域中的“DC1-DC8”端口上;
4.程序设计内容
(1). 数字0-9点阵显示代码的形成
如下图所示,假设显示数字“0”
1 2 34 5 678
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
00003E4141413E00
因此,形成的列代码为 00H,00H,3EH,41H,41H,3EH,00H,00H;只要把这些代码分别送到相应的列线上面,即可实现“0”的数字显示。
送显示代码过程如下所示
送第一列线代码到P3端口,同时置第一行线为“0”,其它行线为“1”,延时2ms左右,送第二列线代码到P3端口,同时置第二行线为“0”,其它行线为“1”,延时2ms左右,如此下去,直到送完最后一列代码,又从头开始送。
数字“1”代码建立如下图所示1 2 34 5 678
●
●
●
●
●
●
●
●
●
●
其显示代码为 00H,00H,00H,00H,21H,7FH,01H,00H
数字“2”代码建立如下图所示
1 2 34 5 678
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
00H,00H,27H,45H,45H,45H,39H,00H
数字“3”代码建立如下图所示
1 2 34 5 678
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
00H,00H,22H,49H,49H,49H,36H,00H
数字“4”代码建立如下图所示
1 2 34 5 678
●
●
●
●
●
●
●
●
●
●
●
●
●
●
00H,00H,0CH,14H,24H,7FH,04H,00H
数字“5”代码建立如下图所示
1 2 34 5 678
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
00H,00H,72H,51H,51H,51H,4EH,00H
数字“6”代码建立如下图所示
1 2 34 5 678
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
00H,00H,3EH,49H,49H,49H,26H,00H
数字“7”代码建立如下图所示
1 2 34 5 678
●
●
●
●
●
●
●
●
●
●
●
00H,00H,40H,40H,40H,4FH,70H,00H
数字“8”代码建立如下图所示
1 2 34 5 678
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
00H,00H,36H,49H,49H,49H,36H,00H
数字“9”代码建立如下图所示
1 2 34 5 678
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
00H,00H,32H,49H,49H,49H,3EH,00H
第3节系统的软件设计
本系统的软件系统主要可分为主程序、4×4矩阵式键盘识别程序、点阵式LED“0-9”数字显示程序三大模块。
在程序设计过程中,加强了部分软件抗干扰措施,下面对部分模块作介绍。
3.1系统主程序设计
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
; 全局初始化
MOVSP,#60H ;堆栈
MOVIE,#00H ;禁止所有中断
;寄存器组00
CLRRS1
CLRRS0
;工作区IRAM(20H-5FH)默认全为0
INIT20TO5F:
MOVR0,#20H ;STARTAT20H
MOVR7,#40H ;64BYTESTOZERO
LOOP20TO5F:
MOV@R0,#00H
INCR0
DJNZR7,LOOP20TO5F
;---------------------------------
SETBSTAT.0 ;初始状态为等号状态
MOVR7,#00H
MOVSCON,#00H;串行工作方式0
;-------------------------------------
;;DISPLAYINIT
;-------------------------------------
LCALL LCDINIT
MOV COM,#06H
LCALL PR1
MOV COM,#0C0H
LCALL PR1
MAIN_LOOP:
3.24×4矩阵式键盘汇编源程序
KEYBUFEQU30H
ORG00H
START:
MOVKEYBUF,#2
WAIT:
MOVP3,#0FFH
CLRP3.4
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY1
LCALLDELY10MS
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY1
MOVA,P3
ANLA,#0FH
CJNEA,#0EH,NK1
MOVKEYBUF,#0
LJMPDK1
NK1:
CJNEA,#0DH,NK2
MOVKEYBUF,#1
LJMPDK1
NK2:
CJNEA,#0BH,NK3
MOVKEYBUF,#2
LJMPDK1
NK3:
CJNEA,#07H,NK4
MOVKEYBUF,#3
LJMPDK1
NK4:
NOP
DK1:
MOVA,KEYBUF
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
DK1A:
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JNZDK1A
NOKEY1:
MOVP3,#0FFH
CLRP3.5
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY2
LCALLDELY10MS
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY2
MOVA,P3
ANLA,#0FH
CJNEA,#0EH,NK5
MOVKEYBUF,#4
LJMPDK2
NK5:
CJNEA,#0DH,NK6
MOVKEYBUF,#5
LJMPDK2
NK6:
CJNEA,#0BH,NK7
MOVKEYBUF,#6
LJMPDK2
NK7:
CJNEA,#07H,NK8
MOVKEYBUF,#7
LJMPDK2
NK8:
NOP
DK2:
MOVA,KEYBUF
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
DK2A:
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JNZDK2A
NOKEY2:
MOVP3,#0FFH
CLRP3.6
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY3
LCALLDELY10MS
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY3
MOVA,P3
ANLA,#0FH
CJNEA,#0EH,NK9
MOVKEYBUF,#8
LJMPDK3
NK9:
CJNEA,#0DH,NK10
MOVKEYBUF,#9
LJMPDK3
NK10:
CJNEA,#0BH,NK11
MOVKEYBUF,#10
LJMPDK3
NK11:
CJNEA,#07H,NK12
MOVKEYBUF,#11
LJMPDK3
NK12:
NOP
DK3:
MOVA,KEYBUF
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
DK3A:
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JNZDK3A
NOKEY3:
MOVP3,#0FFH
CLRP3.7
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY4
LCALLDELY10MS
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JZNOKEY4
MOVA,P3
ANLA,#0FH
CJNEA,#0EH,NK13
MOVKEYBUF,#12
LJMPDK4
NK13:
CJNEA,#0DH,NK14
MOVKEYBUF,#13
LJMPDK4
NK14:
CJNEA,#0BH,NK15
MOVKEYBUF,#14
LJMPDK4
NK15:
CJNEA,#07H,NK16
MOVKEYBUF,#15
LJMPDK4
NK16:
NOP
DK4:
MOVA,KEYBUF
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP0,A
DK4A:
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JNZDK4A
NOKEY4:
LJMPWAIT
DELY10MS:
MOVR6,#10
D1:
MOVR7,#248
DJNZR7,$
DJNZR6,D1
RET
TABLE:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
END
3.3点阵式LED“0-9”数字显示汇编源程序
TIMEQU30H
CNTAEQU31H
CNTBEQU32H
ORG00H
LJMPSTART
ORG0BH
LJMPT0X
ORG30H
START:
MOVTIM,#00H
MOVCNTA,#00H
MOVCNTB,#00H
MOVTMOD,#01H
MOVTH0,#(65536-4000)/256
MOVTL0,#(65536-4000)MOD256
SETBTR0
SETBET0
SETBEA
SJMP$
T0X:
MOVTH0,#(65536-4000)/256
MOVTL0,#(65536-4000)MOD256
MOVDPTR,#TAB
MOVA,CNTA
MOVCA,@A+DPTR
MOVP3,A
MOVDPTR,#DIGIT
MOVA,CNTB
MOVB,#8
MULAB
ADDA,CNTA
MOVCA,@A+DPTR
MOVP1,A
INCCNTA
MOVA,CNTA
CJNEA,#8,NEXT
MOVCNTA,#00H
NEXT:
INCTIM
MOVA,TIM
CJNEA,#250,NEX
MOVTIM,#00H
INCCNTB
MOVA,CNTB
CJNEA,#10,NEX
MOVCNTB,#00H
NEX:
RETI
TAB:
DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
DIGIT:
DB00H,00H,3EH,41H,41H,41H,3EH,00H
DB00H,00H,00H,00H,2