标题:
单片机怎么用按位与、或、异来控制流水灯从两端流向中间?
[打印本页]
作者:
超好学超好学
时间:
2018-9-28 10:51
标题:
单片机怎么用按位与、或、异来控制流水灯从两端流向中间?
如题
作者:
KinMa
时间:
2018-9-28 17:50
TLOW EQU 0F0H
THIGH EQU 0D8H
FLAG_DIR BIT 20H.0;FANGXIANG
COUNT_INT DATA 30H
COUNT_K DATA 31H
LEDVALUE DATA 32H
COUNT_KEY DATA 33H
KEY0 EQU P2.0
KEY1 EQU P2.1
KEY2 EQU P2.2
KEY3 EQU P2.3
;--------------------------------------------------
ORG 0000H
JMP MAIN
ORG 0BH
JMP T0_INT
;--------------------------------------------------
MAIN:
MOV SP,#60H
CALL INIT_TIMER
SETB TR0
CLR FLAG_DIR
MOV LEDVALUE,#01H
MOV COUNT_KEY,#50
MOV COUNT_K,#50
MAIN_LOOP:
READKEY0:
JB KEY0,READKEY1
JNB KEY0,$
SETB FLAG_DIR
AJMP READKEYEND
READKEY1:
JB KEY1,READKEY2
JNB KEY1,$
CLR FLAG_DIR
AJMP READKEYEND
READKEY2:
JB KEY3,READKEY3
JNB KEY3,$
CLR C
MOV A,COUNT_KEY
ADDC A,#5
JNC COUNT_KEY_NOT_OV
MOV A,#250
COUNT_KEY_NOT_OV:
MOV COUNT_KEY,A
MOV COUNT_K,A
AJMP READKEYEND
READKEY3:
JB KEY2,READKEYEND
JNB KEY2,$
MOV A,COUNT_KEY
SUBB A,#5
JNC COUNT_KEY_NOT_OV2
MOV A,#5
COUNT_KEY_NOT_OV2:
MOV COUNT_KEY,A
MOV COUNT_K,A
AJMP READKEYEND
READKEYEND:
; MOV A,COUNT_KEY
; MOV COUNT_K,A
JMP MAIN_LOOP
;;-------------------------
;;-------------------------
INIT_TIMER: ;初始化定时器
MOV TMOD,#01H ;设置定时器0 工作模式为模式1
MOV IE, #82H ;启用定时器0 中断产生
MOV TL0,#TLOW ;10MS
MOV TH0,#THIGH
RET
;;-------------------------
T0_INT:
PUSH ACC
PUSH PSW
MOV TL0,#TLOW
MOV TH0,#THIGH
INC COUNT_INT
MOV A,COUNT_INT
CJNE A,#1,RUNOUT
MOV COUNT_INT,#0
DJNZ COUNT_K,RUNOUT
MOV A,COUNT_KEY
MOV COUNT_K,A
RUN:
JB FLAG_DIR,RUN_R;
RUN_L:
MOV A,LEDVALUE
RL A
MOV LEDVALUE,A
AJMP RUNOUT
RUN_R:
MOV A,LEDVALUE
RR A
MOV LEDVALUE,A
AJMP RUNOUT
RUNOUT:
; MOV A,LEDVALUE
MOV P0,LEDVALUE
T0_T:
POP PSW
POP ACC
RETI
;;-------------------------
END
作者:
zl2168
时间:
2018-9-30 06:50
用逻辑运算实现花样亮灯操作,不是好方法,且复杂单调,应采用数组调用方法,可做到随心所欲。
作者:
phang
时间:
2018-9-30 09:07
嗯嗯,赞成 “zl2168” 的说话
“用逻辑运算实现花样亮灯操作,不是好方法,且复杂单调,应采用数组调用方法,可做到随心所欲。”
省心。
作者:
2651401966
时间:
2018-9-30 09:38
TLOW EQU 0F0H THIGH EQU 0D8H FLAG_DIR BIT 20H.0;FANGXIANG COUNT_INT DATA 30H COUNT_K DATA 31H LEDVALUE DATA 32H COUNT_KEY DATA 33H KEY0 EQU P2.0 KEY1 EQU P2.1 KEY2 EQU P2.2 KEY3 EQU P2.3 ;-------------------------------------------------- ORG 0000H JMP MAIN ORG 0BH JMP T0_INT ;-------------------------------------------------- MAIN: MOV SP,#60H CALL INIT_TIMER SETB TR0 CLR FLAG_DIR MOV LEDVALUE,#01H MOV COUNT_KEY,#50 MOV COUNT_K,#50 MAIN_LOOP: READKEY0: JB KEY0,READKEY1 JNB KEY0,$ SETB FLAG_DIR AJMP READKEYEND READKEY1: JB KEY1,READKEY2 JNB KEY1,$ CLR FLAG_DIR AJMP READKEYEND READKEY2: JB KEY3,READKEY3 JNB KEY3,$ CLR C MOV A,COUNT_KEY ADDC A,#5 JNC COUNT_KEY_NOT_OV MOV A,#250 COUNT_KEY_NOT_OV: MOV COUNT_KEY,A MOV COUNT_K,A AJMP READKEYEND READKEY3: JB KEY2,READKEYEND JNB KEY2,$ MOV A,COUNT_KEY SUBB A,#5 JNC COUNT_KEY_NOT_OV2 MOV A,#5 COUNT_KEY_NOT_OV2: MOV COUNT_KEY,A MOV COUNT_K,A AJMP READKEYEND READKEYEND: ; MOV A,COUNT_KEY ; MOV COUNT_K,A JMP MAIN_LOOP ;;------------------------- ;;------------------------- INIT_TIMER: ;初始化定时器 MOV TMOD,#01H ;设置定时器0 工作模式为模式1 MOV IE, #82H ;启用定时器0 中断产生 MOV TL0,#TLOW ;10MS MOV TH0,#THIGH RET ;;------------------------- T0_INT: PUSH ACC PUSH PSW MOV TL0,#TLOW MOV TH0,#THIGH INC COUNT_INT MOV A,COUNT_INT CJNE A,#1,RUNOUT MOV COUNT_INT,#0 DJNZ COUNT_K,RUNOUT MOV A,COUNT_KEY MOV COUNT_K,A RUN: JB FLAG_DIR,RUN_R; RUN_L: MOV A,LEDVALUE RL A MOV LEDVALUE,A AJMP RUNOUT RUN_R: MOV A,LEDVALUE RR A MOV LEDVALUE,A AJMP RUNOUT RUNOUT: ; MOV A,LEDVALUE MOV P0,LEDVALUE T0_T: POP PSW POP ACC RETI ;;------------------------- END
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1