大侠们教教我
谢谢了
51编写程序按键的问题
全部回复(29)
正序查看
倒序查看
现在还没有回复呢,说说你的想法
你可以按键用中断来实现,每一个功能模块里加几条条件转移指令
例如主程序起始(f0是51单片机里面的psw中用户可以用程序自己定义的标志位)
setb f0 ;软件标志位置1, 功能1里面在适当的位置加几条(jnb f0,功能2)判转移语句,f0为0则跳转至功能2,为1则顺序执行下一条,功能2里面在适当的位置加几条(jb f0,功能3)语句,功能3里的判转移语句和功能1里的相同,功能4里的和功能2里的判转移语句相同,依次类推,修改一下出口参数就可以了
例如按键定义为中断0 则按键按下后去执行中断0的程序
中断0的程序为:
wint0: cpl f0 ;(取反f0)
nop
reti
大概程序可以设计成这样:
org 0000h
ajmp:main
org 0003h ;外中断0入口地址
ljmp wint0
.
.
.
.
org 0030h
main:
定义中断0,开中断,开中断0
gongneng1:
这里是功能1程序区
适当的位置加几条条件判转移指令可以自己随意安排
jnb f0,gongneng2 ;自己愿意加几条就加几条
.
.
.
ajmp gongneng1
gongneng2:
这里是功能2程序区
适当的位置加几条条件判转移指令可以自己随意安排
.
.
jb f0,gongneng3
.
ajmp gongneng2
gongneng3:
这里是功能3程序区
适当的位置加几条条件判转移指令可以自己随意安排
.
.
jnb f0,gongneng4
.
ajmp gongneng3
gongneng4:
这里是功能4程序区
适当的位置加几条条件判转移指令可以自己随意安排
.
jb f0,gongneng5
.
ajmp gongneng4
wint0:
cpl f0
nop
reti
end
朋友这样应该可以了,不行的话加我qq:63892347
邮箱: chirituzi@126.com
例如主程序起始(f0是51单片机里面的psw中用户可以用程序自己定义的标志位)
setb f0 ;软件标志位置1, 功能1里面在适当的位置加几条(jnb f0,功能2)判转移语句,f0为0则跳转至功能2,为1则顺序执行下一条,功能2里面在适当的位置加几条(jb f0,功能3)语句,功能3里的判转移语句和功能1里的相同,功能4里的和功能2里的判转移语句相同,依次类推,修改一下出口参数就可以了
例如按键定义为中断0 则按键按下后去执行中断0的程序
中断0的程序为:
wint0: cpl f0 ;(取反f0)
nop
reti
大概程序可以设计成这样:
org 0000h
ajmp:main
org 0003h ;外中断0入口地址
ljmp wint0
.
.
.
.
org 0030h
main:
定义中断0,开中断,开中断0
gongneng1:
这里是功能1程序区
适当的位置加几条条件判转移指令可以自己随意安排
jnb f0,gongneng2 ;自己愿意加几条就加几条
.
.
.
ajmp gongneng1
gongneng2:
这里是功能2程序区
适当的位置加几条条件判转移指令可以自己随意安排
.
.
jb f0,gongneng3
.
ajmp gongneng2
gongneng3:
这里是功能3程序区
适当的位置加几条条件判转移指令可以自己随意安排
.
.
jnb f0,gongneng4
.
ajmp gongneng3
gongneng4:
这里是功能4程序区
适当的位置加几条条件判转移指令可以自己随意安排
.
jb f0,gongneng5
.
ajmp gongneng4
wint0:
cpl f0
nop
reti
end
朋友这样应该可以了,不行的话加我qq:63892347
邮箱: chirituzi@126.com
0
回复
提示
@chirituzi
你可以按键用中断来实现,每一个功能模块里加几条条件转移指令例如主程序起始(f0是51单片机里面的psw中用户可以用程序自己定义的标志位)setbf0;软件标志位置1,功能1里面在适当的位置加几条(jnbf0,功能2)判转移语句,f0为0则跳转至功能2,为1则顺序执行下一条,功能2里面在适当的位置加几条(jbf0,功能3)语句,功能3里的判转移语句和功能1里的相同,功能4里的和功能2里的判转移语句相同,依次类推,修改一下出口参数就可以了例如按键定义为中断0则按键按下后去执行中断0的程序中断0的程序为:wint0:cplf0 ;(取反f0) nop reti大概程序可以设计成这样:org0000hajmp:mainorg0003h ;外中断0入口地址ljmpwint0 . . . .org 0030hmain:定义中断0,开中断,开中断0gongneng1:这里是功能1程序区适当的位置加几条条件判转移指令可以自己随意安排 jnbf0,gongneng2 ;自己愿意加几条就加几条 . . .ajmpgongneng1gongneng2:这里是功能2程序区适当的位置加几条条件判转移指令可以自己随意安排 . .jbf0,gongneng3 .ajmpgongneng2gongneng3:这里是功能3程序区适当的位置加几条条件判转移指令可以自己随意安排 . .jnbf0,gongneng4 . ajmpgongneng3gongneng4:这里是功能4程序区适当的位置加几条条件判转移指令可以自己随意安排 .jbf0,gongneng5 .ajmpgongneng4wint0: cplf0 nop retiend朋友这样应该可以了,不行的话加我qq:63892347邮箱:chirituzi@126.com
首先 十分十分感谢 chirituzi 老兄不嫌麻烦而又很详细的解释!!!
谢谢你给的邮箱号和你的QQ号.现在暂时不好意思打扰你, 我先自己按照你的方法下苦功的去练练,如果我撑不住差不多要趴下了,那就再次打扰老兄你了!
我的一个认识的朋友他用义隆EM78PS53编灯跳 每个功能的程序跟我用51编的差不多,我看过他的成品灯,按键按下去立刻会切换 ,他说他用扫描方式,(由于商业机密,他说的是不是真的我不知道)我想,他能做,我想我是也能用扫描方式去做 由于我所有的IO口都要做输出口,留边上一个做按钮布线很方便,而用中断的话要在中间,PCB布板线条很绕弯,就想用扫描方式了. 如果扫描方式不能实时控制,那就我就改PCB 用中断了,只要功能会切换什么比什么都好.
写了多了点,让各位老兄看晕了
谢谢你给的邮箱号和你的QQ号.现在暂时不好意思打扰你, 我先自己按照你的方法下苦功的去练练,如果我撑不住差不多要趴下了,那就再次打扰老兄你了!
我的一个认识的朋友他用义隆EM78PS53编灯跳 每个功能的程序跟我用51编的差不多,我看过他的成品灯,按键按下去立刻会切换 ,他说他用扫描方式,(由于商业机密,他说的是不是真的我不知道)我想,他能做,我想我是也能用扫描方式去做 由于我所有的IO口都要做输出口,留边上一个做按钮布线很方便,而用中断的话要在中间,PCB布板线条很绕弯,就想用扫描方式了. 如果扫描方式不能实时控制,那就我就改PCB 用中断了,只要功能会切换什么比什么都好.
写了多了点,让各位老兄看晕了
0
回复
提示
@yxdz
首先 十分十分感谢 chirituzi 老兄不嫌麻烦而又很详细的解释!!! 谢谢你给的邮箱号和你的QQ号.现在暂时不好意思打扰你, 我先自己按照你的方法下苦功的去练练,如果我撑不住差不多要趴下了,那就再次打扰老兄你了! 我的一个认识的朋友他用义隆EM78PS53编灯跳 每个功能的程序跟我用51编的差不多,我看过他的成品灯,按键按下去立刻会切换 ,他说他用扫描方式,(由于商业机密,他说的是不是真的我不知道)我想,他能做,我想我是也能用扫描方式去做由于我所有的IO口都要做输出口,留边上一个做按钮布线很方便,而用中断的话要在中间,PCB布板线条很绕弯,就想用扫描方式了. 如果扫描方式不能实时控制,那就我就改PCB 用中断了,只要功能会切换什么比什么都好. 写了多了点,让各位老兄看晕了
这还能有什么商业机密啊.
不用外中断,那就用定时中断,每10MS扫描一次.这个速度对闪灯来讲已经足够了.
不用外中断,那就用定时中断,每10MS扫描一次.这个速度对闪灯来讲已经足够了.
0
回复
提示
@yxdz
首先 十分十分感谢 chirituzi 老兄不嫌麻烦而又很详细的解释!!! 谢谢你给的邮箱号和你的QQ号.现在暂时不好意思打扰你, 我先自己按照你的方法下苦功的去练练,如果我撑不住差不多要趴下了,那就再次打扰老兄你了! 我的一个认识的朋友他用义隆EM78PS53编灯跳 每个功能的程序跟我用51编的差不多,我看过他的成品灯,按键按下去立刻会切换 ,他说他用扫描方式,(由于商业机密,他说的是不是真的我不知道)我想,他能做,我想我是也能用扫描方式去做由于我所有的IO口都要做输出口,留边上一个做按钮布线很方便,而用中断的话要在中间,PCB布板线条很绕弯,就想用扫描方式了. 如果扫描方式不能实时控制,那就我就改PCB 用中断了,只要功能会切换什么比什么都好. 写了多了点,让各位老兄看晕了
希望你早日把程序做好!呵呵
0
回复
提示
@yxdz
谢谢老兄的指点,我去练习看看 谢谢
哦,又麻烦各位老兄帮我看看.程序是这样工作的,如果不要按下按钮每个功能都是重复几下就自动转到下一个功能去,但是按下按钮后就暂停了. 我的源程序是这样的如下 ,麻烦各位老兄帮我看我哪里不对了呢, 谢谢
ORG 0000H
AJMP AAQQ
ORG 0030H
AAQQ: MOV R1,#1
JMP MAINAA
ANA: MOV P3,#0FFH ;按键扫描子程序
MOV A,#0FFH
MOV P3,A
MOV A,P3
CJNE A,#0FFH,AWW
jmp A7
AWW: ACALL DEL10MS
CJNE A,#0FFH,AW
JMP A7
AW: POP ACC
POP ACC
INC R1
A1: CJNE R1,#2,A3
LJMP MAIN2 ;转功能2
A3: CJNE R2,#3,A4
LJMP MAIN3 ;转功能3
A4: CJNE R2,#4,A5
LJMP DISA ;转功能4
A5: CJNE R2,#5,A6
LJMP DIS11 ; 转功能5
A6: CJNE R2,#6,A7
MOV R1,#1
LJMP DIS1 ;转功能6
A7: RET
MAINAA: MOV R0,#0
MAINA: MOV P1,#7FH ;功能一(涨潮退潮)
ACALL DEL
call ana
MOV P1,#3FH
ACALL DEL
MOV P1,#1FH
ACALL DEL
call ana
MOV P1,#0FH
ACALL DEL
MOV P1,#7H
ACALL DEL
call ana
MOV P1,#3H
ACALL DEL
MOV P1,#1H
ACALL DEL
call ana
MOV P1,#00H
ACALL DEL
MOV P0,#0FEH
ACALL DEL
call ana
MOV P0,#0FCH
ACALL DEL
MOV P0,#0F8H
ACALL DEL
call ana
MOV P0,#0F0H
ACALL DEL
MOV P0,#0E0H
ACALL DEL
call ana
MOV P0,#0C0H
ACALL DEL
MOV P0,#80H
ACALL DEL
call ana
MOV P0,#00H
ACALL DEL
MOV P2,#7FH
ACALL DEL
call ana
MOV P2,#3FH
ACALL DEL
MOV P2,#1FH
ACALL DEL
call ana
MOV P2,#0FH
ACALL DEL
MOV P2,#7H
ACALL DEL
call ana
MOV P2,#3H
ACALL DEL
MOV P2,#1H
ACALL DEL
call ana
MOV P2,#00H
ACALL DEL;
ACALL DEL
call ana
MOV P2,#01H
ACALL DEL
MOV P2,#3H
ACALL DEL
call ana
MOV P2,#7H
ACALL DEL
MOV P2,#0FH
ACALL DEL
call ana
MOV P2,#1FH
ACALL DEL
MOV P2,#3FH
ACALL DEL
call ana
MOV P2,#7FH
ACALL DEL
MOV P2,#0FFH
ACALL DEL
call ana
ACALL DEL
MOV P0,#80H
ACALL DEL
call ana
MOV P0,#0C0H
ACALL DEL
MOV P0,#0E0H
ACALL DEL
call ana
MOV P0,#0F0H
ACALL DEL
MOV P0,#0F8H
ACALL DEL
call ana
MOV P0,#0FCH
ACALL DEL
MOV P0,#0FEH
ACALL DEL
call ana
MOV P0,#0FFH
ACALL DEL;
MOV P1,#00H
ACALL DEL
call ana
MOV P1,#1H
ACALL DEL
MOV P1,#3H
ACALL DEL
call ana
MOV P1,#7H
ACALL DEL
MOV P1,#0FH
ACALL DEL
call ana
MOV P1,#1FH
ACALL DEL
MOV P1,#3FH
ACALL DEL
call ana
MOV P1,#7FH
MOV P2,#0FFH
MOV P0,#0FFH
ACALL DEL
MOV P1,#0FFH
MOV P2,#0FFH
MOV P0,#0FFH
ACALL DELA
INC R0
call ANA
CJNE R1,#2,Q1
AJMP MAINA
Q1: CJNE R0,#6,QQ
JMP MAIN22
QQ: AJMP MAINA
MAIN22: MOV R0,#0 ;第二功能(同时亮灭)
MAIN2: MOV P1,#00H MOV P2,#00H
MOV P0,#00H
ACALL DELA
Lcall ana
MOV P1,#0FFH
MOV P2,#0FFH
MOV P0,#0FFH
ACALL DELA
Lcall ana
INC R0
CJNE R1,#3,Q2
JMP MAIN2
Q2: CJNE R0,#26,MAIN2
MOV R0,#0
MAIN3: MOV P1,#00H ;第三功能(交替亮灭)
MOV P2,#00H
MOV P0,#0FFH
ACALL DELAA
call ana
MOV P0,#00H
MOV P1,#0FFH
MOV P2,#0FFH
ACALL DELAA
CALL ANA
CJNE R1,#4,Q3
JMP MAIN3
Q3: CJNE R0,#16,MAIN3
MOV R0,#0
MOV P1,#0FFH
MOV P2,#0FFH
MOV P0,#0FFH
ACALL DELA
Lcall ana
DISA: MOV P1,#6DH ;第四功能(隔灯追逐)
MOV P2,#0DBH
MOV P0,#0B6H
ACALL DEL
Lcall ana
MOV P1,#0B6H
MOV P2,#06DH
MOV P0,#06DH
ACALL DEL
Lcall ana
MOV P1,#0DBH
MOV P2,#0B6H
MOV P0,#0DBH
ACALL DELA
Lcall ana
MOV P1,#0FFH
MOV P2,#0FFH
INC R0
call ana
CJNE R1,#5,Q4
LJMP DISA
Q4: CJNE R0,#15,DISA
NOP
MOV P1,#0FFH
MOV P2,#0FFH
MOV P0,#0FFH
MOV R0,#0
DIS11: MOV P1,#0FEH; 第五功能(单灯绕圈----慢)
ACALL DEL
MOV P1,#0FDH
ACALL DEL
Lcall ana
MOV P1,#0FBH
ACALL DEL
MOV P1,#0F7H
ACALL DEL
Lcall ana
MOV P1,#0EFH
ACALL DEL
MOV P1,#0DFH
ACALL DEL
Lcall ana
MOV P1,#0BFH
ACALL DEL
MOV P1,#7FH
ACALL DEL
Lcall ana
MOV P1,#0FFH
DIS21:
MOV P2,#0FEH
ACALL DEL
MOV P2,#0FDH
ACALL DEL
Lcall ana
MOV P2,#0FBH
ACALL DEL
MOV P2,#0F7H
ACALL DEL
Lcall ana
MOV P2,#0EFH
ACALL DEL
MOV P2,#0DFH
ACALL DEL
Lcall ana
MOV P2,#0BFH
ACALL DEL
MOV P2,#7FH
ACALL DEL
Lcall ana
DIS01: MOV P2,#0FFH
MOV P0,#7FH
ACALL DEL
MOV P0,#0BFH
ACALL DEL
Lcall ana
MOV P0,#0DFH
ACALL DEL
MOV P0,#0EFH
ACALL DEL
Lcall ana
MOV P0,#0F7H
ACALL DEL
MOV P0,#0FBH
ACALL DEL
Lcall ana
MOV P0,#0FDH
ACALL DEL
MOV P0,#0FEH
ACALL DEL
Lcall ana
MOV P0,#0FFH
ACALL DELA
INC R0
Lcall ana
CJNE R1,#6,QQQ
QA: AJMP DIS11
QQQ: CJNE R0,#12,QA
MOV R0,#0
DIS1: MOV P1,#0FEH; 第六功能(单灯绕圈----快)
ACALL DELQ
MOV P1,#0FDH
ACALL DELQ
call ana
MOV P1,#0FBH
ACALL DELQ
MOV P1,#0F7H
ACALL DELQ
call ana
MOV P1,#0EFH
ACALL DELQ
MOV P1,#0DFH
ACALL DELQ
call ana
MOV P1,#0BFH
ACALL DELQ
MOV P1,#7FH
ACALL DELQ
call ana
DIS2: MOV P1,#0FFH
MOV P2,#0FEH
ACALL DELQ
call ana
MOV P2,#0FDH
ACALL DELQ
MOV P2,#0FBH
ACALL DELQ
call ana
MOV P2,#0F7H
ACALL DELQ
MOV P2,#0EFH
ACALL DELQ
call ana
MOV P2,#0DFH
ACALL DELQ
MOV P2,#0BFH
ACALL DELQ
call ana
MOV P2,#7FH
ACALL DELQ
call ana
DIS0: MOV P2,#0FFH
MOV P0,#7FH
ACALL DELQ
MOV P0,#0BFH
ACALL DELQ
call ana
MOV P0,#0DFH
ACALL DELQ
MOV P0,#0EFH
ACALL DELQ
call ana
MOV P0,#0F7H
ACALL DELQ
MOV P0,#0FBH
ACALL DELQ
call ana
MOV P0,#0FDH
ACALL DELQ
MOV P0,#0FEH
ACALL DELQ
call ana
MOV P0,#0FFH
ACALL DELA
INC R0
call ana
CJNE R1,#7,QQQQQ
GD: JMP DIS1
QQQQQ: CJNE R0,#15,GD
AJMP MAINAA
DELA: MOV R7,#01H ;以下是延时子程序
DELA1: MOV R6,#0AFH
DELA2: MOV R5,#0FFH
DELA3: DJNZ R5,DELA3
DJNZ R6,DELA2
DJNZ R7,DELA1
RET
DEL: MOV R7,#01H
DEL1: MOV R6,#0AFH
DEL2: MOV R5,#0FFH
DEL3: DJNZ R5,DEL3
DJNZ R6,DEL2
DJNZ R7,DEL1
RET
DELAA: MOV R7,#02H
DELAA1: MOV R6,#0AFH
DELAA2: MOV R5,#0FFH
DELAA3: DJNZ R5,DELAA3
DJNZ R6,DELAA2
DJNZ R7,DELAA1
INC R0
RET
DELAAA: MOV R7,#2FH
DELAA1A: MOV R6,#0FFH
DELAA2A: MOV R5,#0FFH
DELAA3A: DJNZ R5,DELAA3A
DJNZ R6,DELAA2A
DJNZ R7,DELAA1A
INC R0
RET
DELQ: MOV R7,#01H
DEL1Q: MOV R6,#1FH
DEL2Q: MOV R5,#9FH
DEL3Q: DJNZ R5,DEL3Q
DJNZ R6,DEL2Q
DJNZ R7,DEL1Q
RET
DEL10MS: MOV R7,#0FFH
DEL11: MOV R6,#0FFH
DEL22: DJNZ R6,DEL22
DJNZ R7,DEL10MS
RET
END
ORG 0000H
AJMP AAQQ
ORG 0030H
AAQQ: MOV R1,#1
JMP MAINAA
ANA: MOV P3,#0FFH ;按键扫描子程序
MOV A,#0FFH
MOV P3,A
MOV A,P3
CJNE A,#0FFH,AWW
jmp A7
AWW: ACALL DEL10MS
CJNE A,#0FFH,AW
JMP A7
AW: POP ACC
POP ACC
INC R1
A1: CJNE R1,#2,A3
LJMP MAIN2 ;转功能2
A3: CJNE R2,#3,A4
LJMP MAIN3 ;转功能3
A4: CJNE R2,#4,A5
LJMP DISA ;转功能4
A5: CJNE R2,#5,A6
LJMP DIS11 ; 转功能5
A6: CJNE R2,#6,A7
MOV R1,#1
LJMP DIS1 ;转功能6
A7: RET
MAINAA: MOV R0,#0
MAINA: MOV P1,#7FH ;功能一(涨潮退潮)
ACALL DEL
call ana
MOV P1,#3FH
ACALL DEL
MOV P1,#1FH
ACALL DEL
call ana
MOV P1,#0FH
ACALL DEL
MOV P1,#7H
ACALL DEL
call ana
MOV P1,#3H
ACALL DEL
MOV P1,#1H
ACALL DEL
call ana
MOV P1,#00H
ACALL DEL
MOV P0,#0FEH
ACALL DEL
call ana
MOV P0,#0FCH
ACALL DEL
MOV P0,#0F8H
ACALL DEL
call ana
MOV P0,#0F0H
ACALL DEL
MOV P0,#0E0H
ACALL DEL
call ana
MOV P0,#0C0H
ACALL DEL
MOV P0,#80H
ACALL DEL
call ana
MOV P0,#00H
ACALL DEL
MOV P2,#7FH
ACALL DEL
call ana
MOV P2,#3FH
ACALL DEL
MOV P2,#1FH
ACALL DEL
call ana
MOV P2,#0FH
ACALL DEL
MOV P2,#7H
ACALL DEL
call ana
MOV P2,#3H
ACALL DEL
MOV P2,#1H
ACALL DEL
call ana
MOV P2,#00H
ACALL DEL;
ACALL DEL
call ana
MOV P2,#01H
ACALL DEL
MOV P2,#3H
ACALL DEL
call ana
MOV P2,#7H
ACALL DEL
MOV P2,#0FH
ACALL DEL
call ana
MOV P2,#1FH
ACALL DEL
MOV P2,#3FH
ACALL DEL
call ana
MOV P2,#7FH
ACALL DEL
MOV P2,#0FFH
ACALL DEL
call ana
ACALL DEL
MOV P0,#80H
ACALL DEL
call ana
MOV P0,#0C0H
ACALL DEL
MOV P0,#0E0H
ACALL DEL
call ana
MOV P0,#0F0H
ACALL DEL
MOV P0,#0F8H
ACALL DEL
call ana
MOV P0,#0FCH
ACALL DEL
MOV P0,#0FEH
ACALL DEL
call ana
MOV P0,#0FFH
ACALL DEL;
MOV P1,#00H
ACALL DEL
call ana
MOV P1,#1H
ACALL DEL
MOV P1,#3H
ACALL DEL
call ana
MOV P1,#7H
ACALL DEL
MOV P1,#0FH
ACALL DEL
call ana
MOV P1,#1FH
ACALL DEL
MOV P1,#3FH
ACALL DEL
call ana
MOV P1,#7FH
MOV P2,#0FFH
MOV P0,#0FFH
ACALL DEL
MOV P1,#0FFH
MOV P2,#0FFH
MOV P0,#0FFH
ACALL DELA
INC R0
call ANA
CJNE R1,#2,Q1
AJMP MAINA
Q1: CJNE R0,#6,QQ
JMP MAIN22
QQ: AJMP MAINA
MAIN22: MOV R0,#0 ;第二功能(同时亮灭)
MAIN2: MOV P1,#00H MOV P2,#00H
MOV P0,#00H
ACALL DELA
Lcall ana
MOV P1,#0FFH
MOV P2,#0FFH
MOV P0,#0FFH
ACALL DELA
Lcall ana
INC R0
CJNE R1,#3,Q2
JMP MAIN2
Q2: CJNE R0,#26,MAIN2
MOV R0,#0
MAIN3: MOV P1,#00H ;第三功能(交替亮灭)
MOV P2,#00H
MOV P0,#0FFH
ACALL DELAA
call ana
MOV P0,#00H
MOV P1,#0FFH
MOV P2,#0FFH
ACALL DELAA
CALL ANA
CJNE R1,#4,Q3
JMP MAIN3
Q3: CJNE R0,#16,MAIN3
MOV R0,#0
MOV P1,#0FFH
MOV P2,#0FFH
MOV P0,#0FFH
ACALL DELA
Lcall ana
DISA: MOV P1,#6DH ;第四功能(隔灯追逐)
MOV P2,#0DBH
MOV P0,#0B6H
ACALL DEL
Lcall ana
MOV P1,#0B6H
MOV P2,#06DH
MOV P0,#06DH
ACALL DEL
Lcall ana
MOV P1,#0DBH
MOV P2,#0B6H
MOV P0,#0DBH
ACALL DELA
Lcall ana
MOV P1,#0FFH
MOV P2,#0FFH
INC R0
call ana
CJNE R1,#5,Q4
LJMP DISA
Q4: CJNE R0,#15,DISA
NOP
MOV P1,#0FFH
MOV P2,#0FFH
MOV P0,#0FFH
MOV R0,#0
DIS11: MOV P1,#0FEH; 第五功能(单灯绕圈----慢)
ACALL DEL
MOV P1,#0FDH
ACALL DEL
Lcall ana
MOV P1,#0FBH
ACALL DEL
MOV P1,#0F7H
ACALL DEL
Lcall ana
MOV P1,#0EFH
ACALL DEL
MOV P1,#0DFH
ACALL DEL
Lcall ana
MOV P1,#0BFH
ACALL DEL
MOV P1,#7FH
ACALL DEL
Lcall ana
MOV P1,#0FFH
DIS21:
MOV P2,#0FEH
ACALL DEL
MOV P2,#0FDH
ACALL DEL
Lcall ana
MOV P2,#0FBH
ACALL DEL
MOV P2,#0F7H
ACALL DEL
Lcall ana
MOV P2,#0EFH
ACALL DEL
MOV P2,#0DFH
ACALL DEL
Lcall ana
MOV P2,#0BFH
ACALL DEL
MOV P2,#7FH
ACALL DEL
Lcall ana
DIS01: MOV P2,#0FFH
MOV P0,#7FH
ACALL DEL
MOV P0,#0BFH
ACALL DEL
Lcall ana
MOV P0,#0DFH
ACALL DEL
MOV P0,#0EFH
ACALL DEL
Lcall ana
MOV P0,#0F7H
ACALL DEL
MOV P0,#0FBH
ACALL DEL
Lcall ana
MOV P0,#0FDH
ACALL DEL
MOV P0,#0FEH
ACALL DEL
Lcall ana
MOV P0,#0FFH
ACALL DELA
INC R0
Lcall ana
CJNE R1,#6,QQQ
QA: AJMP DIS11
QQQ: CJNE R0,#12,QA
MOV R0,#0
DIS1: MOV P1,#0FEH; 第六功能(单灯绕圈----快)
ACALL DELQ
MOV P1,#0FDH
ACALL DELQ
call ana
MOV P1,#0FBH
ACALL DELQ
MOV P1,#0F7H
ACALL DELQ
call ana
MOV P1,#0EFH
ACALL DELQ
MOV P1,#0DFH
ACALL DELQ
call ana
MOV P1,#0BFH
ACALL DELQ
MOV P1,#7FH
ACALL DELQ
call ana
DIS2: MOV P1,#0FFH
MOV P2,#0FEH
ACALL DELQ
call ana
MOV P2,#0FDH
ACALL DELQ
MOV P2,#0FBH
ACALL DELQ
call ana
MOV P2,#0F7H
ACALL DELQ
MOV P2,#0EFH
ACALL DELQ
call ana
MOV P2,#0DFH
ACALL DELQ
MOV P2,#0BFH
ACALL DELQ
call ana
MOV P2,#7FH
ACALL DELQ
call ana
DIS0: MOV P2,#0FFH
MOV P0,#7FH
ACALL DELQ
MOV P0,#0BFH
ACALL DELQ
call ana
MOV P0,#0DFH
ACALL DELQ
MOV P0,#0EFH
ACALL DELQ
call ana
MOV P0,#0F7H
ACALL DELQ
MOV P0,#0FBH
ACALL DELQ
call ana
MOV P0,#0FDH
ACALL DELQ
MOV P0,#0FEH
ACALL DELQ
call ana
MOV P0,#0FFH
ACALL DELA
INC R0
call ana
CJNE R1,#7,QQQQQ
GD: JMP DIS1
QQQQQ: CJNE R0,#15,GD
AJMP MAINAA
DELA: MOV R7,#01H ;以下是延时子程序
DELA1: MOV R6,#0AFH
DELA2: MOV R5,#0FFH
DELA3: DJNZ R5,DELA3
DJNZ R6,DELA2
DJNZ R7,DELA1
RET
DEL: MOV R7,#01H
DEL1: MOV R6,#0AFH
DEL2: MOV R5,#0FFH
DEL3: DJNZ R5,DEL3
DJNZ R6,DEL2
DJNZ R7,DEL1
RET
DELAA: MOV R7,#02H
DELAA1: MOV R6,#0AFH
DELAA2: MOV R5,#0FFH
DELAA3: DJNZ R5,DELAA3
DJNZ R6,DELAA2
DJNZ R7,DELAA1
INC R0
RET
DELAAA: MOV R7,#2FH
DELAA1A: MOV R6,#0FFH
DELAA2A: MOV R5,#0FFH
DELAA3A: DJNZ R5,DELAA3A
DJNZ R6,DELAA2A
DJNZ R7,DELAA1A
INC R0
RET
DELQ: MOV R7,#01H
DEL1Q: MOV R6,#1FH
DEL2Q: MOV R5,#9FH
DEL3Q: DJNZ R5,DEL3Q
DJNZ R6,DEL2Q
DJNZ R7,DEL1Q
RET
DEL10MS: MOV R7,#0FFH
DEL11: MOV R6,#0FFH
DEL22: DJNZ R6,DEL22
DJNZ R7,DEL10MS
RET
END
0
回复
提示
@yxdz
哦,又麻烦各位老兄帮我看看.程序是这样工作的,如果不要按下按钮每个功能都是重复几下就自动转到下一个功能去,但是按下按钮后就暂停了.我的源程序是这样的如下,麻烦各位老兄帮我看我哪里不对了呢,谢谢 ORG 0000H AJMP AAQQ ORG 0030H AAQQ: MOV R1,#1 JMP MAINAA ANA: MOV P3,#0FFH ;按键扫描子程序 MOV A,#0FFH MOV P3,A MOV A,P3CJNE A,#0FFH,AWW jmp A7AWW: ACALL DEL10MS CJNE A,#0FFH,AWJMP A7 AW: POP ACC POP ACC INC R1A1: CJNE R1,#2,A3 LJMP MAIN2 ;转功能2A3: CJNE R2,#3,A4 LJMP MAIN3 ;转功能3A4: CJNE R2,#4,A5 LJMP DISA ;转功能4A5: CJNE R2,#5,A6 LJMP DIS11 ;转功能5A6: CJNE R2,#6,A7 MOV R1,#1 LJMP DIS1 ;转功能6A7: RET MAINAA: MOV R0,#0 MAINA: MOV P1,#7FH ;功能一(涨潮退潮) ACALL DEL call ana MOV P1,#3FH ACALL DEL MOV P1,#1FH ACALL DEL call ana MOV P1,#0FH ACALL DEL MOV P1,#7H ACALL DEL call ana MOV P1,#3H ACALL DEL MOV P1,#1H ACALL DEL call ana MOV P1,#00H ACALL DEL MOV P0,#0FEH ACALL DEL call ana MOV P0,#0FCH ACALL DEL MOV P0,#0F8H ACALL DEL call ana MOV P0,#0F0H ACALL DEL MOV P0,#0E0H ACALL DEL call ana MOV P0,#0C0H ACALL DEL MOV P0,#80H ACALL DEL call ana MOV P0,#00H ACALL DEL MOV P2,#7FH ACALL DEL call ana MOV P2,#3FH ACALL DEL MOV P2,#1FH ACALL DEL call ana MOV P2,#0FH ACALL DEL MOV P2,#7H ACALL DEL call ana MOV P2,#3H ACALL DEL MOV P2,#1H ACALL DEL call ana MOV P2,#00H ACALL DEL; ACALL DEL call ana MOV P2,#01H ACALL DEL MOV P2,#3H ACALL DEL call ana MOV P2,#7H ACALL DEL MOV P2,#0FH ACALL DEL call ana MOV P2,#1FH ACALL DEL MOV P2,#3FH ACALL DEL call ana MOV P2,#7FH ACALL DEL MOV P2,#0FFH ACALL DEL call ana ACALL DEL MOV P0,#80H ACALL DEL call ana MOV P0,#0C0H ACALL DEL MOV P0,#0E0H ACALL DEL call ana MOV P0,#0F0H ACALL DEL MOV P0,#0F8H ACALL DEL call ana MOV P0,#0FCH ACALL DEL MOV P0,#0FEH ACALL DEL call ana MOV P0,#0FFH ACALL DEL; MOV P1,#00H ACALL DEL call ana MOV P1,#1H ACALL DEL MOV P1,#3H ACALL DEL call ana MOV P1,#7H ACALL DEL MOV P1,#0FH ACALL DEL call ana MOV P1,#1FH ACALL DEL MOV P1,#3FH ACALL DEL call ana MOV P1,#7FH MOV P2,#0FFH MOV P0,#0FFH ACALL DEL MOV P1,#0FFH MOV P2,#0FFH MOV P0,#0FFH ACALL DELAINC R0call ANACJNE R1,#2,Q1AJMP MAINAQ1: CJNE R0,#6,QQJMP MAIN22QQ: AJMP MAINA MAIN22: MOV R0,#0 ;第二功能(同时亮灭)MAIN2: MOV P1,#00H MOV P2,#00HMOV P0,#00HACALL DELA Lcall anaMOV P1,#0FFHMOV P2,#0FFHMOV P0,#0FFHACALL DELA Lcall ana INC R0 CJNE R1,#3,Q2 JMP MAIN2Q2: CJNE R0,#26,MAIN2 MOV R0,#0MAIN3:MOV P1,#00H ;第三功能(交替亮灭)MOV P2,#00HMOV P0,#0FFHACALL DELAA call ana MOV P0,#00H MOV P1,#0FFHMOV P2,#0FFHACALL DELAA CALL ANA CJNE R1,#4,Q3 JMP MAIN3Q3: CJNE R0,#16,MAIN3 MOV R0,#0 MOV P1,#0FFHMOV P2,#0FFHMOV P0,#0FFH ACALL DELA Lcall anaDISA: MOV P1,#6DH ;第四功能(隔灯追逐) MOV P2,#0DBH MOV P0,#0B6H ACALL DEL Lcall ana MOV P1,#0B6H MOV P2,#06DH MOV P0,#06DH ACALL DEL Lcall ana MOV P1,#0DBH MOV P2,#0B6H MOV P0,#0DBH ACALL DELA Lcall ana MOV P1,#0FFH MOV P2,#0FFH INC R0 call ana CJNE R1,#5,Q4 LJMP DISAQ4:CJNE R0,#15,DISANOPMOV P1,#0FFHMOV P2,#0FFHMOV P0,#0FFH MOV R0,#0DIS11: MOV P1,#0FEH; 第五功能(单灯绕圈----慢) ACALL DEL MOV P1,#0FDH ACALL DEL Lcall ana MOV P1,#0FBH ACALL DEL MOV P1,#0F7H ACALL DEL Lcall ana MOV P1,#0EFH ACALL DEL MOV P1,#0DFH ACALL DEL Lcall ana MOV P1,#0BFH ACALL DEL MOV P1,#7FH ACALL DEL Lcall ana MOV P1,#0FFHDIS21: MOV P2,#0FEH ACALL DEL MOV P2,#0FDH ACALL DEL Lcall ana MOV P2,#0FBH ACALL DEL MOV P2,#0F7H ACALL DELLcall ana MOV P2,#0EFH ACALL DEL MOV P2,#0DFH ACALL DELLcall ana MOV P2,#0BFH ACALL DEL MOV P2,#7FH ACALL DELLcall anaDIS01: MOV P2,#0FFH MOV P0,#7FH ACALL DEL MOV P0,#0BFH ACALL DELLcall ana MOV P0,#0DFH ACALL DEL MOV P0,#0EFH ACALL DELLcall ana MOV P0,#0F7H ACALL DEL MOV P0,#0FBH ACALL DELLcall ana MOV P0,#0FDH ACALL DEL MOV P0,#0FEH ACALL DELLcall ana MOV P0,#0FFHACALL DELAINC R0Lcall anaCJNE R1,#6,QQQQA:AJMP DIS11QQQ:CJNE R0,#12,QA MOV R0,#0DIS1: MOV P1,#0FEH; 第六功能(单灯绕圈----快) ACALL DELQ MOV P1,#0FDH ACALL DELQcall ana MOV P1,#0FBH ACALL DELQ MOV P1,#0F7H ACALL DELQcall ana MOV P1,#0EFH ACALL DELQ MOV P1,#0DFH ACALL DELQcall ana MOV P1,#0BFH ACALL DELQ MOV P1,#7FH ACALL DELQcall anaDIS2: MOV P1,#0FFH MOV P2,#0FEH ACALL DELQcall ana MOV P2,#0FDH ACALL DELQ MOV P2,#0FBH ACALL DELQcall ana MOV P2,#0F7H ACALL DELQ MOV P2,#0EFH ACALL DELQcall ana MOV P2,#0DFH ACALL DELQ MOV P2,#0BFH ACALL DELQcall ana MOV P2,#7FH ACALL DELQcall anaDIS0: MOV P2,#0FFH MOV P0,#7FH ACALL DELQ MOV P0,#0BFH ACALL DELQcall ana MOV P0,#0DFH ACALL DELQ MOV P0,#0EFH ACALL DELQcall ana MOV P0,#0F7H ACALL DELQ MOV P0,#0FBH ACALL DELQcall ana MOV P0,#0FDH ACALL DELQ MOV P0,#0FEH ACALL DELQcall ana MOV P0,#0FFHACALL DELAINC R0call anaCJNE R1,#7,QQQQQGD: JMP DIS1 QQQQQ: CJNE R0,#15,GD AJMP MAINAADELA: MOV R7,#01H ;以下是延时子程序DELA1: MOV R6,#0AFHDELA2: MOV R5,#0FFHDELA3: DJNZ R5,DELA3 DJNZ R6,DELA2 DJNZ R7,DELA1 RETDEL: MOV R7,#01HDEL1: MOV R6,#0AFHDEL2: MOV R5,#0FFHDEL3: DJNZ R5,DEL3 DJNZ R6,DEL2 DJNZ R7,DEL1 RET DELAA: MOV R7,#02HDELAA1: MOV R6,#0AFHDELAA2: MOV R5,#0FFHDELAA3: DJNZ R5,DELAA3 DJNZ R6,DELAA2 DJNZ R7,DELAA1 INC R0 RETDELAAA: MOV R7,#2FHDELAA1A: MOV R6,#0FFHDELAA2A: MOV R5,#0FFHDELAA3A: DJNZ R5,DELAA3A DJNZ R6,DELAA2A DJNZ R7,DELAA1A INC R0 RETDELQ: MOV R7,#01HDEL1Q: MOV R6,#1FHDEL2Q: MOV R5,#9FHDEL3Q: DJNZ R5,DEL3Q DJNZ R6,DEL2Q DJNZ R7,DEL1Q RETDEL10MS: MOV R7,#0FFHDEL11: MOV R6,#0FFHDEL22: DJNZ R6,DEL22 DJNZ R7,DEL10MS RET END
你的程序执行一次最少几十秒钟,这样写程序实在是太糟糕了,实时性太差.当然不能及时响应你的按键动作.写程序时要牢记不要有死循环,不要在主程序中用延时程序,你犯了这个错误.即使你用中断,也不会及时响应,因为中断过后主程序还要执行你的延时程序.键盘扫描本来就才20MS作为单位时间,你想到延时程序结束时,动作早结束了.所以好的程序,延时要用中断,中断中用标志位,当时间到了再作相应操作,而不在那里死等,浪费时间.最后提醒你一点,程序中多用标志位,变量名等要用易懂的具有实际意义的符号来代替,而不是AA,QQ等,养成良好习惯,你会事半功倍.希望我说的能给你帮助.
0
回复
提示
@yt2005
你的程序执行一次最少几十秒钟,这样写程序实在是太糟糕了,实时性太差.当然不能及时响应你的按键动作.写程序时要牢记不要有死循环,不要在主程序中用延时程序,你犯了这个错误.即使你用中断,也不会及时响应,因为中断过后主程序还要执行你的延时程序.键盘扫描本来就才20MS作为单位时间,你想到延时程序结束时,动作早结束了.所以好的程序,延时要用中断,中断中用标志位,当时间到了再作相应操作,而不在那里死等,浪费时间.最后提醒你一点,程序中多用标志位,变量名等要用易懂的具有实际意义的符号来代替,而不是AA,QQ等,养成良好习惯,你会事半功倍.希望我说的能给你帮助.
哦,谢谢老兄的指点,我今后重新规划程序. 我现在不明白的是,我16贴的源程序如果不按按键能工作正常,(每个功能重复工作规定的次数后自动转到下一个功能去) ,但是按下按键后 ,会转到下一功能但是立即暂停了.
0
回复
提示
@yxdz
哦,谢谢老兄的指点,我今后重新规划程序. 我现在不明白的是,我16贴的源程序如果不按按键能工作正常,(每个功能重复工作规定的次数后自动转到下一个功能去) ,但是按下按键后 ,会转到下一功能但是立即暂停了.
你的程序中调ANA这个子程序,如果按键,没有返回(没按键会返回),然后去执行主程序,主程序又调ANA这个子程序,堆栈中的指针没有恢复.你这样做就会等同于程序在程序中调自己本身,这样会造成堆栈中的程序指针错乱,当然会暂停了,因为程序不知道怎么执行了.
切记,一个程序,只有一个出口,不要跳来跳去的,养成良好习惯,不然你的程序学习之路会很漫长.
切记,一个程序,只有一个出口,不要跳来跳去的,养成良好习惯,不然你的程序学习之路会很漫长.
0
回复
提示
不用定时器的程序框架:
设置一个变量,根据这变量的数跳到“跳法n”
START:
根据变量的值跳转到"跳法1”--“跳法n”的分支程序.
跳法1
JMP START
;;;;;;;;;;;;;;;;;;;
跳法2
JMP START
;;;;;;;;;;;;;;;;;;;
跳法3
JMP START
;;;;;;;;;;;;;;;;;;;
跳法N
JMP START
;;;;;;;;;;;;;;;;;;;;;
因为你的各种跳法中肯定要用到延时程序,可以在延时循环程序的最里圈加一小段判别键和处理程序,这样在大部分情况下响应键很快.
假设你的键信号在p1.0, 低电平为有键;内部RAM 2FH为选择"跳法N”的变量(当然也可以选其他地址);另设一个位地址 00H作为有键跳出标志.设有N个跳法,在程序初始时要把内部RAM 2FH设为0,位地址 00H为CLR.
;延时循环
DELAY: MOV R5,#xxH ;最外圈循环数
DELP1: MOV R4,#YYH ;中圈循环数
DELP2: MOV R3,#ZZH ;最内圈循环数
DELP3: JB P1.0,DELP4 ;无键按下,继续循环
INC 2FH ;选择"跳法N”的变量加1,转回START时依此选择什么跳法.
...... ;如果2FH=N,则清为#00H
SETB 00H
JMP DELEND ;退出循环.
DELP4: DJNZ R3,DELP3
DJNZ R4,DELP2
DJNZ R5,DELP1
DELEND: RET
位地址 00H作为有键跳出标志的作用是,在每个调用延时循环程序后,加一段判别是否有键退出,如果是,则直接转START .
如果在2FH加1后直接跳到START ,多次后堆栈将会溢出,为什么自己想一想.
CALL DELAY
JNB 00H,AAAA
CLR 00H ;清标志,以免下次误转
LJMP START ;用此较法,可以转的较远,如果直接用JB 00H,START 多数情况下转不到那么远
AAAA: 无键时正常往下运行
设置一个变量,根据这变量的数跳到“跳法n”
START:
根据变量的值跳转到"跳法1”--“跳法n”的分支程序.
跳法1
JMP START
;;;;;;;;;;;;;;;;;;;
跳法2
JMP START
;;;;;;;;;;;;;;;;;;;
跳法3
JMP START
;;;;;;;;;;;;;;;;;;;
跳法N
JMP START
;;;;;;;;;;;;;;;;;;;;;
因为你的各种跳法中肯定要用到延时程序,可以在延时循环程序的最里圈加一小段判别键和处理程序,这样在大部分情况下响应键很快.
假设你的键信号在p1.0, 低电平为有键;内部RAM 2FH为选择"跳法N”的变量(当然也可以选其他地址);另设一个位地址 00H作为有键跳出标志.设有N个跳法,在程序初始时要把内部RAM 2FH设为0,位地址 00H为CLR.
;延时循环
DELAY: MOV R5,#xxH ;最外圈循环数
DELP1: MOV R4,#YYH ;中圈循环数
DELP2: MOV R3,#ZZH ;最内圈循环数
DELP3: JB P1.0,DELP4 ;无键按下,继续循环
INC 2FH ;选择"跳法N”的变量加1,转回START时依此选择什么跳法.
...... ;如果2FH=N,则清为#00H
SETB 00H
JMP DELEND ;退出循环.
DELP4: DJNZ R3,DELP3
DJNZ R4,DELP2
DJNZ R5,DELP1
DELEND: RET
位地址 00H作为有键跳出标志的作用是,在每个调用延时循环程序后,加一段判别是否有键退出,如果是,则直接转START .
如果在2FH加1后直接跳到START ,多次后堆栈将会溢出,为什么自己想一想.
CALL DELAY
JNB 00H,AAAA
CLR 00H ;清标志,以免下次误转
LJMP START ;用此较法,可以转的较远,如果直接用JB 00H,START 多数情况下转不到那么远
AAAA: 无键时正常往下运行
0
回复
提示
@njyd
不用定时器的程序框架:设置一个变量,根据这变量的数跳到“跳法n”START: 根据变量的值跳转到"跳法1”--“跳法n”的分支程序.跳法1JMPSTART;;;;;;;;;;;;;;;;;;;跳法2JMPSTART;;;;;;;;;;;;;;;;;;;跳法3JMPSTART;;;;;;;;;;;;;;;;;;;跳法NJMPSTART;;;;;;;;;;;;;;;;;;;;; 因为你的各种跳法中肯定要用到延时程序,可以在延时循环程序的最里圈加一小段判别键和处理程序,这样在大部分情况下响应键很快. 假设你的键信号在p1.0,低电平为有键;内部RAM2FH为选择"跳法N”的变量(当然也可以选其他地址);另设一个位地址00H作为有键跳出标志.设有N个跳法,在程序初始时要把内部RAM2FH设为0,位地址00H为CLR.;延时循环DELAY: MOVR5,#xxH ;最外圈循环数DELP1: MOVR4,#YYH ;中圈循环数DELP2: MOVR3,#ZZH ;最内圈循环数DELP3: JBP1.0,DELP4 ;无键按下,继续循环 INC2FH ;选择"跳法N”的变量加1,转回START时依此选择什么跳法. ...... ;如果2FH=N,则清为#00H SETB00H JMPDELEND ;退出循环. DELP4: DJNZR3,DELP3 DJNZR4,DELP2 DJNZR5,DELP1DELEND:RET 位地址00H作为有键跳出标志的作用是,在每个调用延时循环程序后,加一段判别是否有键退出,如果是,则直接转START . 如果在2FH加1后直接跳到START,多次后堆栈将会溢出,为什么自己想一想. CALL DELAY JNB 00H,AAAA CLR00H ;清标志,以免下次误转 LJMP START ;用此较法,可以转的较远,如果直接用JB00H,START多数情况下转不到那么远AAAA: 无键时正常往下运行
这个程序应该不难!你的这种写法不错,不过我觉的按键程序最好写在定时器的中断程序里比较好一些,这样效率高些,主程序里只对键值进行判断,然后进散转执相应的程序就可以了!按键的处理可以做成每按下一次键值加1,这样循环下去!
0
回复
提示
@njyd
不用定时器的程序框架:设置一个变量,根据这变量的数跳到“跳法n”START: 根据变量的值跳转到"跳法1”--“跳法n”的分支程序.跳法1JMPSTART;;;;;;;;;;;;;;;;;;;跳法2JMPSTART;;;;;;;;;;;;;;;;;;;跳法3JMPSTART;;;;;;;;;;;;;;;;;;;跳法NJMPSTART;;;;;;;;;;;;;;;;;;;;; 因为你的各种跳法中肯定要用到延时程序,可以在延时循环程序的最里圈加一小段判别键和处理程序,这样在大部分情况下响应键很快. 假设你的键信号在p1.0,低电平为有键;内部RAM2FH为选择"跳法N”的变量(当然也可以选其他地址);另设一个位地址00H作为有键跳出标志.设有N个跳法,在程序初始时要把内部RAM2FH设为0,位地址00H为CLR.;延时循环DELAY: MOVR5,#xxH ;最外圈循环数DELP1: MOVR4,#YYH ;中圈循环数DELP2: MOVR3,#ZZH ;最内圈循环数DELP3: JBP1.0,DELP4 ;无键按下,继续循环 INC2FH ;选择"跳法N”的变量加1,转回START时依此选择什么跳法. ...... ;如果2FH=N,则清为#00H SETB00H JMPDELEND ;退出循环. DELP4: DJNZR3,DELP3 DJNZR4,DELP2 DJNZR5,DELP1DELEND:RET 位地址00H作为有键跳出标志的作用是,在每个调用延时循环程序后,加一段判别是否有键退出,如果是,则直接转START . 如果在2FH加1后直接跳到START,多次后堆栈将会溢出,为什么自己想一想. CALL DELAY JNB 00H,AAAA CLR00H ;清标志,以免下次误转 LJMP START ;用此较法,可以转的较远,如果直接用JB00H,START多数情况下转不到那么远AAAA: 无键时正常往下运行
谢谢这位老兄详细的解释!!!!! 也许是我基础和理解能力太差,我还是很模糊,我再按照你的方法再去练习.
谢谢了!!!!
谢谢了!!!!
0
回复
提示