标题: STC15F104W驱动24位WS2812汇编程序 [打印本页]

作者: 新乡家电维修    时间: 2017-4-23 08:37
标题: STC15F104W驱动24位WS2812汇编程序
本帖最后由 新乡家电维修 于 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单片机难以实现。希望起到借鉴作用,大家可以编译下试试,交流下



作者: admin    时间: 2017-4-28 00:06
好资料,51黑有你更精彩
作者: 新乡家电维修    时间: 2017-4-30 11:11
这样发表方便读者阅读,他们又不用回复。总觉得心冷冷的。非要加上回复后才能阅读权限
作者: kuailedenba    时间: 2017-4-30 19:39
谢谢楼主
作者: dragon20100708    时间: 2018-1-15 15:53
不错的资料,学习一下,顶
作者: ping02188    时间: 2019-3-1 10:23
怎么用Keil uVision3编译不过
作者: mslong    时间: 2019-3-20 21:34
好看
作者: 李明辉    时间: 2019-7-4 05:12
看看,不够清楚
作者: 山水2000    时间: 2021-4-16 16:32
支持你,我就需要汇编的,谢谢了

作者: DoneDone    时间: 2022-3-19 16:31
你牛,现在能用汇编做程序的少了!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1