找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

一款用汇编写的计算器

查看数: 4893 | 评论数: 6 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-12-21 22:31

正文摘要:

回复

ID:946968 发表于 2021-7-4 16:20
1950773588 发表于 2021-7-4 16:18
你好,您分享的一种用汇编写的计算器,我花了两天时间把别的地方都看懂了,感觉您太厉害了,就是除法那部分 ...

是除法那部分,谢谢
ID:946968 发表于 2021-7-4 16:19
zhxiufan 发表于 2020-12-17 09:40
;加了一些注释,希望对大家有些帮助。
        ORG 0000H
        LJMP START

你好,您分享的一种用汇编写的计算器,我花了两天时间把别的地方都看懂了,感觉您太厉害了,就是除法那部分没看懂您的思路,可以分享一下吗,或者标注一下除法那部分吗?我随时期待您的回复,不胜感激!!
ID:946968 发表于 2021-7-4 16:19
你好,您分享的一种用汇编写的计算器,我花了两天时间把别的地方都看懂了,感觉您太厉害了,就是除法那部分没看懂您的思路,可以分享一下吗,或者标注一下除法那部分吗?我随时期待您的解答,不胜感谢!!!
ID:946968 发表于 2021-7-4 16:18
你好,您分享的一种用汇编写的计算器,我花了两天时间把别的地方都看懂了,感觉您太厉害了,就是除法那部分没看懂您的思路,可以分享一下吗,或者标注一下乘法那部分吗?
ID:121859 发表于 2020-12-17 09:40
;加了一些注释,希望对大家有些帮助。
        ORG 0000H
        LJMP START
        ORG 0030H
START:
        MOV SP,#60H
        LCALL INT              ;调用初始化子程序
START1:
        LCALL CLEAR            ;调用清屏子程序
;*********************************固定字符显示
        mov column3,#0
        mov pagef3,#0
        mov codes,#0                ;'数'
        lcall writeleft2
        mov column3,#0
        mov pagef3,#4
        mov codes,#2                ;'结'
        lcall writeleft2
        mov column3,#16
        mov pagef3,#4
        mov codes,#3                ;'果'
        lcall writeleft2
        mov column3,#16
        mov pagef3,#0
        mov codes,#1                ;'字'
        lcall writeleft2
        mov column,#32
        mov pagef,#0
        mov codes,#1                ;'1'
        lcall writeleft
        mov column3,#0
        mov pagef3,#2
        mov codes,#0                ;‘数’
        lcall writeleft2
        mov column,#40
        mov pagef,#2
        mov codes,#15                ;':'
        lcall writeleft
        mov column,#40
        mov pagef,#0
        mov codes,#15                ;':'
        lcall writeleft
        mov column3,#16
        mov pagef3,#2
        mov codes,#1                ;‘字’
        lcall writeleft2
        mov column,#32
        mov pagef,#2
        mov codes,#2                ;'2'
        lcall writeleft
        MOV R0,#0
        MOV R1,#255
QQQ:
        MOV @R0,#0
        INC R0
        DJNZ R1,QQQ
;************************************固定字符显示结束,键盘扫描开始
dd:
        mov r0,#0f7h        ;扫描码送R0
        mov r1,#0                ;键值初始为0
cc:
        mov a,r0
        mov p1,a                ;扫描码送P1
        mov a,p1                ;读结果码
        mov r2,a                ;结果码送R2
        setb c
        mov r3,#4                ;一次共4个扫描码
bb:
        rlc a                        ;带进位循环左移,最高位移入C
        jnc aa                        ;如果键位在此转aa
ee:
        inc r1                        ;键值加1
        djnz r3,bb                ;一行(列)有4个列(行)
        mov a,r0               
        setb c
        rrc a                        ;修改扫描码
        mov r0,a
        jc cc                        ;如果未完成4行(列)扫描转cc
        ljmp dd                        ;否则转dd(无键按下)
aa:
        lcall mm                ;延时约4毫秒
        mov a,p1
        xrl a,r2
        jnz ee                        ;如果是抖动造成转ee
ff:
        mov a,p1
        xrl a,r2
        jz ff                        ;等待按键抬起
        sjmp cal_start
;----------------------------------------
KAOO:
        LJMP KAO
BBB2:
        LJMP BB2                        ;接收数字2
;----------------------------------------
cal_start:
        MOV A,51H                        ;51H:1=加,2=减,3=乘,4=除
        CJNE A,#1,BBB2      ;加法
        MOV A,R1                        ;键值
        CJNE A,#14,KAOO                ;14为‘=’
;加法运算开始,数字组成:49H48H46H45H44H42H41H40H,结果相同,最高位在CEH
        MOV 47H,R1
        LCALL A31                        ;显示运算符
        MOV A,40H
        ADD A,60H
        MOV B,#10
        DIV AB
        MOV 40H,B
        ADD A,41H
        ADD A,71H
        MOV B,#10
        DIV AB
        MOV 41H,B
        ADD A,42H
        ADD A,72H
        MOV B,#10
        DIV AB
        MOV 42H,B
        ADD A,44H
        ADD A,74H
        MOV B,#10
        DIV AB
        MOV 44H,B
        ADD A,45H
        ADD A,75H
        MOV B,#10
        DIV AB
        MOV 45H,B
        ADD A,46H
        ADD A,76H
        MOV B,#10
        DIV AB
        MOV 46H,B
        ADD A,48H
        ADD A,78H
        MOV B,#10
        DIV AB
        MOV 48H,B
        ADD A,49H
        ADD A,79H
        MOV B,#10
        DIV AB
        MOV 49H,B
        MOV 0CEH,A                ;最高位
        CJNE A,#0,CC0
        MOV A,49H
        CJNE A,#0,CC1
        MOV A,48H
        CJNE A,#0,CC2
        MOV A,46H
        CJNE A,#0,CC3
        MOV A,45H
        CJNE A,#0,CC4
        MOV A,44H
        CJNE A,#0,CC5
        MOV A,42H
        CJNE A,#0,CC6
        MOV A,41H
        CJNE A,#0,CC7
        MOV A,40H
        CJNE A,#0,CC8
;显示结果
CC0:LCALL A08
CC1:LCALL A07
CC2:LCALL A06
CC3:LCALL A05
CC4:LCALL A04
CC5:LCALL A03
CC6:LCALL A02
CC7:LCALL A01
CC8:LCALL A00
        LJMP DD
KAO:
        CJNE A,#15,KAO1                ;15为ESC键
        LJMP START1
KAO1:
        MOV A,50H
        CJNE A,#0,A1A1
        MOV 60H,R1
        LCALL A8
        INC 50H
        ljmp dd
A1A1:
        CJNE A,#1,A1A2
        MOV 71H,60H
        MOV  60H,R1
        LCALL A8
        LCALL A9
        INC 50H
        LJMP DD
A1A2:
        CJNE A,#2,A1A3
        MOV 72H,71H
        MOV 71H,60H
        MOV  60H,R1
        LCALL A8
        LCALL A9
        LCALL A10
        INC 50H
        LJMP DD
A1A3:
        CJNE A,#3,A1A5
        MOV 74H,72H
        MOV 72H,71H
        MOV 71H,60H
        MOV  60H,R1
        LCALL A8
        LCALL A9
        LCALL A10
        LCALL A11
        INC 50H
        LJMP DD
A1A5:
        CJNE A,#4,A1A6
        MOV 75H,74H
        MOV 74H,72H
        MOV 72H,71H
        MOV 71H,60H
        MOV  60H,R1
        LCALL A8
        LCALL A9
        LCALL A10
        LCALL A11
        LCALL A12
        INC 50H
        LJMP DD
A1A6:
        CJNE A,#5,A1A7
        MOV 76H,75H
        MOV 75H,74H
        MOV 74H,72H
        MOV 72H,71H
        MOV 71H,60H
        MOV  60H,R1
        LCALL A8
        LCALL A9
        LCALL A10
        LCALL A11
        LCALL A12
        LCALL A13
        INC 50H
        LJMP DD
A1A7:
        CJNE A,#6,A1A9
        MOV 78H,76H
        MOV 76H,75H
        MOV 75H,74H
        MOV 74H,72H
        MOV 72H,71H
        MOV 71H,60H
        MOV  60H,R1
        LCALL A8
        LCALL A9
        LCALL A10
        LCALL A11
        LCALL A12
        LCALL A13
        LCALL A14
        INC 50H
        LJMP DD
A1A9:
        CJNE A,#7,A1A10
        MOV 79H,78H
        MOV 78H,76H
        MOV 76H,75H
        MOV 75H,74H
        MOV 74H,72H
        MOV 72H,71H
        MOV 71H,60H
        MOV  60H,R1
        LCALL A8
        LCALL A9
        LCALL A10
        LCALL A11
        LCALL A12
        LCALL A13
        LCALL A14
        LCALL A15
        INC 50H
A1A10:
        LJMP DD
BBB3:
        LJMP BB33
KAOO2:
        LJMP KAO2
BB2:
        CJNE A,#2,BBB3    ;减法运算
..........
ID:121859 发表于 2020-12-16 08:16
代码可用,但注释太少,函数名称也没有相应的含义,无法弄懂呀。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表