
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV R6,#0FEH
MOV R7,#0
LOOP:
JB P10,LOOP1
JNB P10,$
INC R7
CJNE R7,#2,LOOP1
MOV R7,#0
LOOP1: ;奇数次按键左向流水灯
MOV A,R7
JNZ LOOP2
MOV A,R6
MOV P0,A
RL A
MOV R6,A
LCALL DELAY
SJMP LOOP
LOOP2: ;偶数次按键右向流水灯
MOV A,R6
MOV P0,A
RR A
MOV R6,A
LCALL DELAY
LJMP LOOP
DELAY:
MOV R2,#200
DL1:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DL1
RET
END先定义4个按键,
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
再定义一个变量计数,分别计1,2,3,4,对应4个按键。
在主循环程序中判断4个按键是否按下,每一个开关按下,变量赋值对应的数。
再根据变量值,执行对应的第1,2,3,4种花样就行了。K1 EQU P10
K2 EQU P11
K3 EQU P12
LED1 EQU 30H
LED2 EQU 31H
LED3 EQU 32H
MODE EQU 33H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB ET0
SETB EA
MOV MODE,#0
MOV LED1,#0FEH
MOV LED2,#7FH
MOV LED3,#0
LOOP:
JB K1,LOOP1
JNB K1,$
CPL TR0
SJMP LOOP
LOOP1:
JB K2,LOOP2
JNB K2,$
MOV A,MODE
ANL A,#01H
CPL ACC0
MOV MODE,A
SJMP LOOP
LOOP2:
JB K3,LOOP3
MOV A,MODE
SETB ACC1
MOV MODE,A
MOV LED3,#0
LJMP LOOP
LOOP3:
MOV A,MODE
ANL A,#01H
MOV MODE,A
LJMP LOOP
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
MOV A,MODE
JNZ T001
MOV A,LED1
MOV P0,A
RL A
MOV LED1,A
RETI
T001:
DEC A
JNZ T002
MOV A,LED2
MOV P0,A
RR A
MOV LED2,A
RETI
T002:
MOV DPTR,#TAB
MOV A,LED3
MOVC A,@A+DPTR
MOV P0,A
INC LED3
MOV A,LED3
CJNE A,#15,T0E
MOV LED3,#0
T0E:
RETI
TAB:
DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH
DB 0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH
END用汇编编程如下:
ORG 0000H
LJMP MAIN
MAIN:
ORG 0100H
MOV A ,#80H ; 高电平亮灯。如低电平亮灯,改成#7FH
;
;正向循环
ZXH :
MOV P0 , A
RR A
LCALL S50MS ; 延时50MS
JB P10 , FXH
LJMP ZXH
;
;反向循环
FXH :
MOV P0 , A
RL A
LCALL S50MS ; 延时50MS
JNB P10 , ZXH
LJMP FXH
;
;延时50MS 子程序,自己编编
S50MS:
RET
END
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)