单片机 十进制计算器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
姓名学号
时间 2015.05.14 地点 B526
实验题目简易十进制计算器
一、实验目的
1. 掌握单片机编程和调试方法。
2. 掌握键盘、LED显示接口工作原理及编程方法。
二、实验内容
利用MCS-51单片机,设计一个简易十进制计算器,完成一位十进制有符号数的加、减、乘、除运算。
16个按键的安排:10个数字键(0-9),用于输入运算的数字;5个功能键:+、-、×、÷、=、清零(符号选择)。
本实验要求显示:输入的十进制数字及符号,正数不显示符号,负数在数的前面显示“-”;运算符显示(显示字形自定);运算结果显示,包括数字和符号。
三、实验电路连线
P0
P1
P2.0-P2.3
四、实验说明
本实验采用动态显示电路,即6个数码管分时循环工作,刷新频率≥25Hz 。键盘采用矩阵式电路,L1-L4作为输出,H1-H4作为输入。(详细工作原理请参考教材第10章)。
要求所有的程序预先在WA VE 仿真调试通过,达到设计要求后下载程序到单片机芯片在实验板上实际运行。
程序的下载由实验室提供编程器统一烧写,单片机芯片由实验室提供,调试完成后交回。
五、实验仪器和设备
PC 机、WA VE 软件、仿真器、实验板、编程器、电源等。
六、程序流程图及程序
P2.4-P2.7
YJ EQU 50H ;结果存放
YJ1 EQU 51H ;中间结果存放GONG EQU 52H ;功能键存放
ORG 00H
START: MOV R3,#0 ;初始化显示为空MOV GONG,#0
MOV 32H,#00H
MOV 33H,#00H
MOV 34H,#00H
MLOOP: 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,#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: 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 MLOOP ;等待再次输入
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 R3,#0 ;按键次数清零
MOV R4,#0 ;输入值清零
MOV YJ,#0 ;计算结果清零
MOV GONG,#0 ;功能键设为零
MOV 32H,#00H ;显示清空
MOV 33H,#00H
MOV 34H,#00H
LJMP MLOOP
E2: MOV 34H,#00H
MOV 33H,#00H
MOV 32H,#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,#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 YJ,R4 ;输入值送结果
MOV R3,#0 ;按键次数清零
LJMP DISP1 ;结果处理