51单片机 实现计算器功能

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机多为计算器汇编程序

此程序并不仅仅局限于255以内操作

FIR0 EQU 30H

FIR1 EQU 31H

FIR2 EQU 32H

FIR3 EQU 33H ;第一个操作数

SEC0 EQU 34H

SEC1 EQU 35H

SEC2 EQU 36H

SEC3 EQU 37H ; 第二个操作数

LIN0 EQU 38H

LIN1 EQU 39H

LIN2 EQU 40H

LIN3 EQU 41H ; 数据暂存

RES0 EQU 42H

RES1 EQU 43H

RES2 EQU 44H

RES3 EQU 45H ;结果暂存区

XLINE EQU 46H

YLINE EQU 47H ;记录按键按键位置

SYMBLE EQU 48H ;操作符存储

DDE0 EQU 49H

DDE1 EQU 50H

DDE2 EQU 51H ;用于延时

FLEL4 EQU 52H

FLEL5 EQU 53H

FLEL6 EQU 54H

BEFOR EQU 55H

HH BIT 01H ;比较大

EE BIT 02H ;比较相等

FIL BIT 03H ;溢出标记

FLAG BIT 04H ;有无按键标记

ERR BIT 05H ;错误标记

YESY BIT 06H ; 有无操作符按键标记

NUM BIT 07H ;按键个数标记

YESN BIT 08H ;有无数字按键标记

ORG 0000H

LJMP MAIN

ORG 0003H

LJMP INTERUPT

MAIN:

MOV IE,#01H ;初始化

MOV SP,#6FH

LCALL CLRI

SETB IT0

SETB EA

DISPLAY: ;数码管显示函数

CJNE R3,#00H,TT1

MOV R3,#0AH

TT1: CJNE R3,#0AH,STARTD

CJNE R2,#00H,TT2

MOV R2,#0AH

TT2: CJNE R2,#0AH,STARTD

CJNE R1,#00H,STARTD

MOV R1,#0AH

STARTD: MOV A,R0

LCALL TRANS ;将所要显示的值转化为数码管对应的数据

MOV P2,A

MOV P1,#10H

LCALL DELAY10ms

MOV A,R1

LCALL TRANS

MOV P2,A

MOV P1,#20H

LCALL DELAY10ms

MOV A,R2

LCALL TRANS

MOV P2,A

MOV P1,#40H

LCALL DELAY10ms

MOV A,R3

LCALL TRANS

MOV P2,A

MOV P1,#80H

LCALL DELAY10ms

MOV A,P0

ANL A,#0F0H

CJNE A,#0F0H,YESYES

LJMP LOOP8

YESYES: LCALL INTERUPT

JNB FLAG,LOOP8

CLR FLAG

LCALL LOCATION

LCALL KEY

LOOP8: LJMP DISPLAY

/////////////////////////////////////////////// INTERUPT: ;确定有无按键

CLR FLAG

MOV XLINE,#00H

MOV YLINE,#00H ;初始化

LCALL DELAY100ms

MOV A,P0 ;判断是否有按键按下

ANL A,#0F0H

CJNE A,#0F0H,YES

LJMP LOOP7

YES: SETB FLAG ;是按键,置位标记位,及行列线

MOV XLINE, P0

MOV YLINE, P1

LOOP7: RETI

LOCATION: ;确定按键位置

CLR FLAG

MOV R6,#00H ;初始化

MOV A,XLINE ;取出行线的高四位,存入R7中

ANL A,#0F0H

MOV R6,A

MOV R7,#05H ;循环比较次数

MOV P1,#01H ;P1口重新初始化

COMPARE: ;循环比较,查找按键位置

MOV A,P0

ANL A,#0F0H

CJNE A,#0F0H,TIME

MOV A,P1

ANL A,#0FH

ADD A,R6

MOV R6,A ;确定按键位置

LJMP LOOP9;

TIME: ;比较次数以及为下次循环做准备

MOV A,P1

RL A

MOV P1,A

DJNZ R7,COMPARE

LOOP9: RET;

////////////////////乘法程序///////////////////////////////////////////////////// MULI: ;将第二个操作数的第一位一次与第一个操作数相乘CLR ERR

MOV RES0,#00H

MOV RES1,#00H

MOV RES2,#00H

MOV RES3,#00H

MOV FLEL4,#00H

MOV FLEL5,#00H

MOV FLEL6,#00H ;初始化处理

MOV A,SEC0 ;判断第一位是否为0

JZ SECOND ;为0,进行下一位操作

MOV A,FIR0

MOV B,SEC0

MUL AB

MOV RES0,A ;将乘积放入对应的结果存储区中

MOV A,FIR1

MOV B,SEC0

MUL AB

MOV RES1,A

MOV A,FIR2

MOV B,SEC0

相关文档
最新文档