高手帮忙改一下单片机汇编程序,谢谢

2025-02-24 06:06:30
推荐回答(3个)
回答1:

ORG 0050H
R549: CLR P1.4
MOV R0,#8
LCALL RDATA
MOV R2,A
SETB P1.4
CLR P1.2
RET
RDATA:CLR P1.2
MOV C,P1.3
RLC A
SETB P1.2
DJNZ R0,RDATA
RET
;键盘扫描程序:
KEY: MOV P2,#0FFH
MOV A, P2
CPL A
ANL A,#0FH
JZ KEY
LCALL D_10ms
MOV A,P2
CPL A
ANL A,#0FH
JZ KEY
MOV B,A
MOV A,P2
CPL A
ANL A,#0FH
KEY1: JNZ KEY1
LCALL D_10ms
MOV A,B
JB ACC.0,PKEY1
JB ACC.1,PKEY2
JB ACC.2,PKEY3
JB ACC.3,PKEY4
JB ACC.4,PKEY5
EKEY: RET
PKEY1:LCALL K1
RET
PKEY2: LCALL K2
RET
PKEY3: LCALL K3
RET
PKEY4: LCALL K4
RET
PKEY5: LCALL K5
RET
D_10ms:MOV R7,#10H
DS1: MOV R6,#0FFH
DS2: DJNZ R6,DS2
DJNZ R7,DS1
RET
;MAX7219驱动程序:
ORG 00H
START: MOV SP,#60H
ACALL WREN ;写使能
LCALL DELAY ;延时
ACALL WRSR ;调写状态子程序
MOV R7,#08H ;显示缓冲区置8
MOV R0,#40H
MOV 25H,#00H
CZ: MOV @R0,25H
INC R0
INC 25H
DJNZ R7,CZ
MOV 70H,#0FFH ;译码方式控制字
MOV 71H,#0F5H ;亮度控制字(可调)
MOV 72H,#0F7H ;扫描个数控制字
MOV 73H,#0F1H ;关闭REG控制字
MOV 74H,#0F0H ;显示测试控制字
MOV R1,#05H ;7219初始化
MOV R2,#09H
MOV R0,#70H
LCALL DIP
MOV R1,#08H ; 7219送数
MOV R2,#01H
MOV R0,#40H
LCALL DIP
BB: SJMP BB
; (显示驱动子程序)
DIP:NOP
PL1:MOV 21H,R2 ;7219REG地址指针送21H
MOV 20H,@R0 ;BCD码缓冲区指针送20H
INC R2
INC R0
LCALL DIP2
PL2:SETB P1.1 ;LOAD上升沿锁存最后移入的16位数
DJNZ R1,PL1 ;如未完,接着送下一组16位数
RET

; (16位数据移位子程序)
DIP2:CLR P1.1
CLR P1.4
MOV R7,#10H
PL4:CLR C ;16位数的最高位送7219的DIN
MOV A,0FH
RLC A
MOV P1.5,C
SETB P1.4 ;7219CLK的上升沿锁存该位数
MOV A,21H ;移位操作
RL A
MOV 21H,A
MOV A,20H
RLC A
MOV 20H,A
CLR A
RRC A
MOV 08H,A
CLR P1.4 ;下降沿把数据移出DOUT端口
DJNZ R7,PL4
RET
; 写使能子程序
WREN:CLR P1.0
MOV A,#06H
LCALL SED
CLR P1.3
SETB P1.0
RET
; 写状态子程序
WRSR:CLR P1.0
MOV A,#01H
LCALL SED
MOV A,30H
LCALL SED
CLR P1.3
NOP
SETB P1.0
RET
; 写入8位子程序
SED:MOV R6,#08H
SED1:CLR P1.3
NOP
RLC A
MOV P1.2,C
NOP
SETB P1.3
NOP
DJNZ R6,SED1
RET
; 读出8位子程序
RED:MOV R6,#07H
RED1:CLR P1.3
NOP
MOV C,P1.1
RLC A
SETB P1.3
NOP
DJNZ R6,RED1
CLR P1.3
NOP
MOV C,P1.1
RLC A
RET
;
DELAY:MOV R7,#0FFH
D1: MOV R6,#0FFH
D2: NOP
NOP
NOP
DJNZ R6,D2
DJNZ R7,D1
RET

K1:
K2:
K3:
K4:
K5:
RET
END
有几个子程序没有

回答2:

mark

回答3:

额,你是要改进还是不能运行还是其他问题