;;;;自己一時興起,寫的一鍵多功能匯編語言程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19:25 2014-10-14
LED EQU 30H; 給30H儲存單元起個名叫LED;
SP1 BIT P3.7; 給P3.7位起個名叫SP1;
ORG 0; 程序起始地址;
START: MOV LED,#0FEH;程序初始化;
NEXT: MOV A,LED;將初始化好的值送入ACC累加器中,設(shè)定P1.0燈閃爍;
KEY: ;;;;;;;;;;;;;;;;;;;;;;;;;;;按鍵判斷程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
JB SP1,MIAN; 判斷按鍵SP1是否按下,否就去MIAN標(biāo)號處執(zhí)行;
LCALL DELAY10MS; 按鍵消抖動;
JB SP1,MIAN ;真的按下了,
RL A; A中的數(shù)據(jù)左移一位;
JNB SP1,$; 判斷按鍵是否松開,沒松開就在此等待,松開了就順序執(zhí)行;
CJNE A,#0EFH,MIAN; 判斷A是否等于立即數(shù)#0EFH;即是否到達P1.3位置了。不是返回MIAN標(biāo)號處執(zhí)行。
JMP START; 是,跳回程序開頭,循環(huán)。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;p1口閃爍主程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MIAN:
MOV P1,A; ;;;;;p1口的那個燈閃爍由A中的值決定。
LCALL DELAY1S; 延時1秒
MOV P1,#0FFH; 關(guān)閉P1口所有的燈。
LCALL DELAY1S; 延時1秒
JMP KEY; 跳到KEY標(biāo)號處執(zhí)行。
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
; 匯編程序結(jié)束編程序結(jié)束