一键多功能控制LED闪烁的汇编语言程序
LED EQU 30H; 给30H储存单元起个名叫LED;
SP1 BIT P3.7; 给P3.7位起个名叫SP1;
ORG 0; 程序起始地址;
START: MOV LED,#0FEH;程序初始化;
NEXT: MOV A,LED;将初始化好的值送入ACC累加器中,设定P1.0灯闪烁;
KEY: ;;;;;;;;;;;;;;;;;;;;;;;;;;;按键判断程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
JB SP1,MIAN; 判断按键SP1是否按下,否就去MIAN标号处执行;
LCALL DELAY10MS; 按键消抖动;
JB SP1,MIAN ;真的按下了,
RL A; A中的数据左移一位;
JNB SP1,$; 判断按键是否松开,没松开就在此等待,松开了就顺序执行;
CJNE A,#0EFH,MIAN; 判断A是否等于立即数#0EFH;即是否到达P1.3位置了。不是返回MIAN标号处执行。
JMP START; 是,跳回程序开头,循环。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;p1口闪烁主程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MIAN:
MOV P1,A; ;;;;;p1口的那个灯闪烁由A中的值决定。
LCALL DELAY1S; 延时1秒
MOV P1,#0FFH; 关闭P1口所有的灯。
LCALL DELAY1S; 延时1秒
JMP KEY; 跳到KEY标号处执行。
DELAY1S:
MOV R3,#100 ; 延时子程序(1000ms) 修改R的值可以改变闪烁灯延时时间。取值范围:0-255。
D1: MOV R4,#20
D2: MOV R5,#248
DJNZ R5,$
DJNZ R4,D2
DJNZ R3,D1
RET ; 返回主程序
DELAY10MS: ;延时子程序(10ms)
D3: MOV R4,#20
D4: MOV R5,#248
DJNZ R5,$
DJNZ R4,D4
DJNZ R3,D3
RET ;
END
; 汇编程序结束编程序结束 |