本帖最后由 新乡家电维修 于 2017-4-27 09:30 编辑
;WS2812驱动环形24灯15F104W,12m写入
;写程序用12M
OUT BIT P3.3
ORG 0H
ORG 30H
;==========主程序=================
MAIN:
ACALL REST
START:
ATART_0:
ACALL OOO
ACALL EEE
ACALL OOO
DJNZ R0,ATART_0
ACALL REST
ACALL ATART_00 ;全灭灯
;==============
ATART_1:
ACALL EEE2
ACALL EEE2
ACALL OOO
DJNZ R0,ATART_1
ACALL REST
ACALL ATART_00 ;全灭灯
;=============
ATART_2:
ACALL EEE
ACALL OOO
ACALL OOO
DJNZ R0,ATART_2
ACALL REST
ACALL ATART_00 ;全灭灯
;=============
ATART_3:
ACALL EEE2
ACALL OOO
ACALL EEE2
DJNZ R0,ATART_3
ACALL REST
ACALL ATART_00 ;全灭灯
;=============
ATART_4:
ACALL OOO
ACALL OOO
ACALL EEE
DJNZ R0,ATART_4
ACALL REST
ACALL ATART_00 ;全灭灯
;=============
ATART_5:
ACALL OOO
ACALL EEE2
ACALL EEE2
DJNZ R0,ATART_5
ACALL REST
ACALL ATART_00 ;全灭灯
ATART_6:
ACALL EEE2
ACALL EEE2
ACALL EEE2
DJNZ R0,ATART_6
ACALL REST
ACALL ATART_00 ;全灭灯
;=============
MOV R2,#250
ATART_7: ;双彩色循环GGRRBBGGRRBB
DEC R2
MOV A,R2
JZ MAIN
ACALL EEE2 ;G
ACALL OOO
ACALL OOO
ACALL EEE2
ACALL OOO
ACALL OOO
ACALL OOO ;R
ACALL EEE2
ACALL OOO
ACALL OOO
ACALL EEE2
ACALL OOO
ACALL OOO ;B
ACALL OOO
ACALL EEE2
ACALL OOO
ACALL OOO
ACALL EEE2
DJNZ R0,ATART_7
ACALL REST
ATART_8:
ACALL OOO ;B
ACALL OOO
ACALL EEE2
ACALL EEE2 ;G
ACALL OOO
ACALL OOO
ACALL EEE2
ACALL OOO
ACALL OOO
ACALL OOO
ACALL EEE2
ACALL OOO
ACALL OOO
ACALL EEE2
ACALL OOO
ACALL OOO
ACALL OOO
ACALL EEE2
DJNZ R0,ATART_8
ACALL REST
ATART_9:
ACALL OOO ;B
ACALL OOO
ACALL EEE2
ACALL OOO
ACALL OOO
ACALL EEE2
ACALL EEE2
ACALL OOO
ACALL OOO
ACALL EEE2
ACALL OOO
ACALL OOO
ACALL OOO
ACALL EEE2
ACALL OOO
ACALL OOO
ACALL EEE2
ACALL OOO
DJNZ R0,ATART_9
ACALL REST
ATART_10:
ACALL OOO
ACALL EEE2
ACALL OOO
ACALL OOO ;B
ACALL OOO
ACALL EEE2
ACALL OOO
ACALL OOO
ACALL EEE2
ACALL EEE2 ;G
ACALL OOO
ACALL OOO
ACALL EEE2
ACALL OOO
ACALL OOO
ACALL OOO ;R
ACALL EEE2
ACALL OOO
DJNZ R0,ATART_10
ACALL REST
ATART_11:
ACALL OOO ;R
ACALL EEE2
ACALL OOO
ACALL OOO
ACALL EEE2
ACALL OOO
ACALL OOO ;B
ACALL OOO
ACALL EEE2
ACALL OOO
ACALL OOO
ACALL EEE2
ACALL EEE2 ;G
ACALL OOO
ACALL OOO
ACALL EEE2
ACALL OOO
ACALL OOO
DJNZ R0,ATART_11
ACALL REST
ATART_12:
ACALL EEE2
ACALL OOO
ACALL OOO
ACALL OOO ;R
ACALL EEE2
ACALL OOO
ACALL OOO
ACALL EEE2
ACALL OOO
ACALL OOO ;B
ACALL OOO
ACALL EEE2
ACALL OOO
ACALL OOO
ACALL EEE2
ACALL EEE2 ;G
ACALL OOO
ACALL OOO
DJNZ R0,ATART_12
ACALL REST
;=============
JMP ATART_7
ATART_00: ;全关闭程序
ACALL OOO
ACALL OOO
ACALL OOO
DJNZ R0,ATART_00
ACALL REST
RET
REST:
CLR OUT
ACALL DELAY1000MS
SETB OUT
mov r0,#24
RET
OOO: ;关闭
ACALL SHI_0
ACALL SHI_0
ACALL SHI_0
ACALL SHI_0
ACALL SHI_0
ACALL SHI_0
ACALL SHI_0
ACALL SHI_0
ret
EEE: ;单色显示亮度不足,用这个高的
ACALL SHI_0
ACALL SHI_1
ACALL SHI_1
ACALL SHI_1
ACALL SHI_1
ACALL SHI_1
ACALL SHI_1
ACALL SHI_1
RET
EEE2: ;双色显示用这个低值的
ACALL SHI_0
ACALL SHI_0
ACALL SHI_0
ACALL SHI_1
ACALL SHI_1
ACALL SHI_1
ACALL SHI_1
ACALL SHI_1
RET
;===========01识别============
SHI_0:
SETB OUT
CLR OUT
CLR OUT
RET
SHI_1:
SETB OUT
SETB OUT
CLR OUT
RET
;-------------延时子程序-----------------
DELAY60US: ;@12.000MHz
NOP
NOP
NOP
NOP
PUSH 30H
MOV 30H,#140
NEXT:
DJNZ 30H,NEXT
POP 30H
RET
DELAY1000MS: ;@12.000MHz
NOP
NOP
NOP
PUSH 30H
PUSH 31H
PUSH 32H
MOV 30H,#37
MOV 31H,#123
MOV 32H,#89
NEXT1:
DJNZ 32H,NEXT1
DJNZ 31H,NEXT1
DJNZ 30H,NEXT1
POP 32H
POP 31H
POP 30H
RET
END
对时序要求比较高,普通51单片机难以实现。希望起到借鉴作用,大家可以编译下试试,交流下
|