经典计算器程序机电设计用.docx
- 文档编号:10671558
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:10
- 大小:15.97KB
经典计算器程序机电设计用.docx
《经典计算器程序机电设计用.docx》由会员分享,可在线阅读,更多相关《经典计算器程序机电设计用.docx(10页珍藏版)》请在冰豆网上搜索。
经典计算器程序机电设计用
OUTBITEQU8002H;端口地址初始化
OUTSEGEQU8004H
HINEQU8001H
LEDBUFEQU30H
ORG0000H
LJMPSTART
ORG0100H
LEDMAP:
;短码表
DB3FH,06H,5BH,4FH
DB66H,6DH,7DH,07H
DB7FH,6FH,77H,7CH
DB39H,5EH,79H,71H
DELAY:
MOV19H,#10
DEY1:
MOV18H,#50;延蔇EY2:
DJNZ18H,DEY2
DJNZ19H,DEY1
RET
DISPLAY:
;显示子程序
MOVDPTR,#OUTBIT
MOVA,#0
MOVX@DPTR,A
MOVA,R5;R4--段码
MOVDPTR,#OUTSEG
MOVX@DPTR,A
MOVDPTR,#OUTBIT
MOVA,R2;R2--位码
MOVX@DPTR,A
ACALLDELAY
MOVDPTR,#OUTBIT
MOVA,#0
MOVX@DPTR,A
RET
TESTKEY:
MOVDPTR,#OUTBIT;检测键盘
MOVA,#00H
MOVX@DPTR,A;输出列置0
MOVDPTR,#HIN
MOVXA,@DPTR;读入键盘状态
CPLA
ANLA,#0FH
RET
KEYTABLE:
DB16H,15H,14H,0FFH;键码定义
DB13H,12H,11H,10H
DB0DH,0CH,0BH,0AH
DB0EH,03H,06H,09H
DB0FH,02H,05H,08H
DB00H,01H,04H,07H
GETKEY:
MOVDPTR,#OUTBIT;计算键编号
MOVP2,DPH
MOVR1,#HIN;R1行地址
MOVR3,#20H;R2列码
MOVR7,#6
KLOOP:
MOVA,R3
CPLA
MOVX@DPTR,A;第一列置0
CPLA
RRA
MOVR3,A;下一列
MOVXA,@R1;读该列状态
CPLA
ANLA,#0FH;屏蔽高四位
JNZGOON1
DJNZR7,KLOOP
MOVR7,#0FFH;无键按下返回0FFH
SJMPEXIT
GOON1:
MOVR3,A;编号=列*4+行
MOVA,R7
DECA
RLA
RLA
MOVR7,A;R0=(R7-1)*4
MOVA,R3;R2为读入列值
MOVR2,#4
LOOPC:
RRCA;右移计算行值
JCEXIT;R0=R0+行值
INCR7
DJNZR3,LOOPC
EXIT:
MOVA,R7;取键编号
MOVDPTR,#KEYTABLE
MOVCA,@A+DPTR
MOV@R0,A;存键值R0中
WAITRELEASE:
;等待键释放
MOVDPTR,#OUTBIT
CLRA
MOVX@DPTR,A
ACALLDELAY
ACALLTESTKEY
JNZWAITRELEASE
MOVA,@R0;键值存入A
RET
ADDY:
MOV12H,R0
CLRC;加法
MOVR7,#4
ADDY1:
MOVA,@R0
ADDCA,@R1
MOV@R0,A;结果存入R0
INCR0
INCR1
DJNZR7,ADDY1
MOVR7,#5
ACALLCHANG
RET
SUBBY:
MOV12H,R0
CLRC;减法
MOVR7,#2
SUB1:
MOVA,@R1
SUBBA,@R0
JNCN1
ADDA,#10
SETBC
N1:
MOV@R0,A
INCR0
INCR1
DJNZR7,SUB1
MOVR0,12H
RET
MULY:
MOV12H,R0
MOVR3,#0;乘法
MOV15H,@R0;另存乘数
INCR0
MOV16H,@R0
DECR0
MOVR2,#2
MUL1:
MOVA,@R1
MOVB,@R0
MULAB
MOV@R0,A
INCR0
DJNZR2,MUL1
DECR0
INCR1
MOVB,15H
MOVR2,#2
MUL2:
MOVA,@R1
MULAB
ADDA,@R0
MOV@R0,A
INCR0
MOVA,#0
ADDCA,#0
MOV@R0,A
MOVB,16H
DJNZR2,MUL2
MOVR7,#4
ACALLCHANG
RET
CHANG:
MOVR0,12H;转化为十进制
MOVR3,#0
C1:
MOVA,@R0
ADDA,R3
MOVB,#10
DIVAB
XCHA,B
MOV@R0,A
INCR0
MOVR3,B
DJNZR7,C1
MOVR0,12H
RET
LEDBUFY:
JCNEXT1;数据缓冲子程序
SJMPNEXT2
NEXT1:
MOVR5,#40H;负数
MOVR2,#20H
ACALLDISPLAY
MOVR2,17H
NEXT2:
MOVA,@R0
MOVDPTR,#LEDMAP
MOVCA,@A+DPTR
MOVR5,A
ACALLDISPLAY
MOVA,R2
RRA
MOVR2,A
DECR0
DJNZR6,NEXT2
RET
START:
CLRC;开始
MOVR0,#LEDBUF;R0--数据缓冲地址
MOVR6,#0
MOVR3,#30;初始化参数
K1:
MOV@R0,#00H
INCR0
DJNZR3,K1
MOVR0,#LEDBUF+20;缓冲区清零
DISPL:
MOV10H,R0;保护R0,R6
MOV11H,R6
MOVR2,#1
CJNER6,#0,Y1
SJMPY3;无任何键按下
Y1:
MOVA,R0
ADDA,R6
MOVR0,A;数据高位地址送R0
MOVA,R2
RRCA
Y2:
RLCA
DJNZR6,Y2
MOVR2,A;位码移到高位
MOVR6,11H
SJMPY4
Y3:
MOVR6,#01H
Y4:
MOV17H,R2
ACALLLEDBUFY;数据送缓冲区显示
MOVR6,11H
MOVR0,10H
TESTY:
ACALLTESTKEY
ACALLDELAY;测试键盘
JZDISPL;无键按下,动态显示缓冲区内容
ACALLGETKEY;有键输入
DECR0
K2:
CJNEA,#0AH,K3;确认键值
SJMPNEXT;功能键“+”
K3:
JNCK4
INCR6
SJMPDISPL
K4:
CJNEA,#0FH,K5
SJMPSTART;清零键
K5:
CJNEA,#0BH,K6;功能键“-”
SJMPNEXT
K6:
CJNEA,#0CH,K7;功能键“*”
NEXT:
MOVR4,A;功能键“+,-,*”,并保存入R4
MOVA,R0
INCA
INCA
MOV1FH,A
MOVR0,#LEDBUF+10;赋下一个操作数缓冲地址
MOVR6,#0;计数清零
SJMPTESTY;等待数据输入
K7:
CJNEA,#0EH,K8;功能键“=”
EQUY:
INCR0
INCR0
MOVR1,1FH
CJNER4,#0AH,LOOP1;测试上一次功能键
ACALLADDY
DECR0;加法
MOVR6,#5;五个缓冲单元
SJMPDISPL
LOOP1:
CJNER4,#0BH,LOOP2
ACALLSUBBY
DECR0;减法
MOVR6,#2;两个缓冲单元
SJMPDISPL
LOOP2:
ACALLMULY;乘法
DECR0
MOVR6,#4;四个缓冲单元
SJMPDISPL;送数入显示缓冲区
K8:
INCR0
MOV@R0,#0
SJMPTESTY;继续测试键盘
END
参考资料:
不太好
5
回答者:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 经典 计算器 程序 机电 设计