; 2010-09-12 芯片型号:lpd6803s 深圳产 由于发帖字节限制延时略
电平检测 EQU P3.7
计数 EQU 2AH
缓冲 EQU 2BH
时钟 EQU P3.0
数据口 equ P3.1
红值 equ 30h
绿值 equ 31h
蓝值 equ 32h
红色 EQU 20h
绿色 EQU 21H
蓝色 EQU 22H
计数qa equ 4ah
基准数据 EQU 28H
org 0000h
ljmp 0060h
org 0060h
nop
nop
mov sp,#60h
初始化1: nop
mov p1,#0ffh
mov p3,#0ffh
mov sp,#60h
lcall 延时100ms
清除返回: nop
MOV 绿色,#00H
MOV 蓝色,#00H
MOV 红色,#00H
;=======================
lcall 清除 ;60米
主返回入口: nop
主循环入口: nop
nop
lcall 七彩渐变
ljmp 主循环入口
七彩渐变: nop
七彩渐变入口: nop
MOV 红色,#31
MOV 绿色,#31
MOV 蓝色,#31
nop
lcall 起始祯
lcall 全段数据发
lcall 时钟延时100ms
mov 红值,#31
mov 绿值,#31
mov 蓝值,#31
mov 计数qa,#7 ;颜色系数
渐变返回入口: nop
mov r6,#32 ;渐变级数
小渐变循环: nop
MOV 红色,红值
MOV 绿色,绿值
MOV 蓝色,蓝值
nop
lcall 起始祯
lcall 全段数据发
lcall 时钟延时10ms
nop
djnz r6,渐变检查
ljmp 渐变全亮入口
渐变检查: nop
nop
;==================
; 渐变 红 7
;-----------------------
mov a,计数qa
cjne a,#7,渐变无效q7
dec 绿值
dec 蓝值
ljmp 小渐变退出
渐变无效q7: nop
;==================
; 红渐变黄 6
;-------------------
mov a,计数qa
cjne a,#6,渐变无效q6
inc 绿值
ljmp 小渐变退出
渐变无效q6: nop
;==================
; 黄渐变绿
;-------------------
mov a,计数qa
cjne a,#5,渐变无效q5
dec 红值
ljmp 小渐变退出
渐变无效q5: nop
;==================
; 绿渐变青
;-------------------
mov a,计数qa
cjne a,#4,渐变无效q4
inc 蓝值
ljmp 小渐变退出
渐变无效q4: nop
;==================
; 青渐变蓝
;-------------------
mov a,计数qa
cjne a,#3,渐变无效q3
dec 绿值
ljmp 小渐变退出
渐变无效q3: nop
;==================
; 蓝渐变紫
;-------------------
mov a,计数qa
cjne a,#2,渐变无效q2
inc 红值
ljmp 小渐变退出
渐变无效q2: nop
;==================
; 紫渐变白
;-------------------
mov a,计数qa
cjne a,#1,渐变无效q1
inc 绿值
ljmp 小渐变退出
渐变无效q1: nop
;=============================
ljmp 七彩渐变入口 ;错误返
;====================
小渐变退出: nop
ljmp 小渐变循环 ;渐变过程返回
;============================
; 实验全亮保持
;===============================
渐变全亮入口: nop
lcall 时钟延时1s
lcall 时钟延时1s
djnz 计数qa,渐变继续
ret
;=========================
; 以下是数据分支程序
;=======================
渐变继续: nop
;=====================
; 红渐变黄
;=====================
mov a,计数qa
cjne a,#6,渐变分支q1无效
MOV 红值,#31
MOV 绿值,#0
MOV 蓝值,#0
ljmp 渐变有效返回
渐变分支q1无效: nop
;=====================
; 黄渐变绿
;=====================
mov a,计数qa
cjne a,#5,渐变分支q2无效
MOV 红值,#31
MOV 绿值,#31
MOV 蓝值,#0
ljmp 渐变有效返回
渐变分支q2无效: nop
;=====================
; 绿渐变青
;=====================
mov a,计数qa
cjne a,#4,渐变分支q3无效
MOV 红值,#0
MOV 绿值,#31
MOV 蓝值,#0
ljmp 渐变有效返回
渐变分支q3无效: nop
;=====================
; 青渐变蓝
;=====================
mov a,计数qa
cjne a,#3,渐变分支q4无效
MOV 红值,#0
MOV 绿值,#31
MOV 蓝值,#31
ljmp 渐变有效返回
渐变分支q4无效: nop
;=====================
; 蓝渐变紫
;=====================
mov a,计数qa
cjne a,#2,渐变分支q5无效
MOV 红值,#0
MOV 绿值,#0
MOV 蓝值,#31
ljmp 渐变有效返回
渐变分支q5无效: nop
;=====================
; 紫渐变白
;=====================
mov a,计数qa
cjne a,#1,渐变分支q6无效
MOV 红色,#31
MOV 绿色,#0
MOV 蓝色,#31
ljmp 渐变有效返回
渐变分支q6无效: nop
;=======================
渐变有效返回: nop
ljmp 渐变返回入口 ;错误返回
;=======================
; 6 紫
;==========================
实验分支q1: nop
MOV 绿色,#0
MOV 蓝色,#31
MOV 红色,#0
lcall 米段数据发
;=======================
; 5 蓝
;==========================
实验分支q2: nop
MOV 绿色,#0
MOV 蓝色,#31
MOV 红色,#31
lcall 米段数据发
;=======================
; 4 绿
;==========================
实验分支q3: nop
MOV 绿色,#31
MOV 蓝色,#0
MOV 红色,#0
lcall 米段数据发
;=======================
; 3 青
;==========================
实验分支q4: nop
MOV 绿色,#31
MOV 蓝色,#31
MOV 红色,#0
lcall 米段数据发
;=======================
; 2 黄
;==========================
实验分支q5: nop
MOV 绿色,#31
MOV 蓝色,#0
MOV 红色,#31
lcall 米段数据发
;=======================
; 1 红
;==========================
实验分支q6: nop
MOV 绿色,#0
MOV 蓝色,#0
MOV 红色,#31
lcall 米段数据发
;=============================
lcall 时钟延时100ms
lcall 时钟延时1s
ret
;***************************************************************************************
; 以下是子程序
;
;************************************************************************************
;===================================
全段数据发: nop
mov r2,#50 ;单色点个数
全段循环q2: nop
mov r1,#12 ;单色点个数
全段循环q1: nop
lcall 全数据发送 ;1个1+15 位数据
nop
djnz r1,全段循环q1
djnz r2,全段循环q2
ret
米段数据发: mov r1,#12 ;单色点个数
米段循环qr1: lcall 全数据发送 ;1个1+15 位数据 b
djnz r1,米段循环qr1
ret
全数据发送: nop
lcall 起始位
mov a,绿色
cpl a ;置反向
lcall 五位数据
mov a,蓝色
cpl a ;置反向
lcall 五位数据
mov a,红色
cpl a ;置反向
lcall 五位数据
ret
;========================
; 送32个0
;=========================
起始祯: NOP
setb 数据口
MOV R2,32
数据循环: ;nop
; NOP
LCALL 时钟脉冲
;NOP
; NOP
djnz r2,数据循环
RET
;=========================
; 起始位 1
;==========================
起始位: NOP
CLR 数据口
nop
LCALL 时钟脉冲
nop
SETB 数据口
nop
RET
;===========================
; 八位单元
;===========================
五位数据: clr c
rlc a
rlc a
rlc a
mov 3ah,#5
clr c
送数循环: rlc a
mov 数据口,c
clr 时钟
nop
setb 时钟
djnz 3ah,送数循环
ret
;============================================
清除: nop
LCALL 起始祯
mov r4,#60
清除长度循环: nop
mov r3,#12
清除循环: nop
MOV 绿色,#00h
MOV 蓝色,#00h
MOV 红色,#00h
nop
lcall 全数据发送
nop
djnz r3,清除循环
nop
djnz r4,清除长度循环
nop
ret
;================
点时钟: CLR 时钟
SETB 时钟
RET
;=================
时钟脉冲: NOP
CLR 时钟
NOP
NOP
SETB 时钟
RET
;===================
点数发送: nop
nop
setb 数据口
nop
nop
mov r4,#100
点数循环: nop
LCALL 时钟脉冲
nop
djnz r4,点数循环
ret
lcall 时钟延时10ms
lcall 时钟延时50ms
lcall 时钟延时100ms
nop
;=================================
时钟延时2ms: nop
mov 56h,#210
时钟延时2ms1: LCALL 时钟脉冲
LCALL 时钟脉冲
LCALL 时钟脉冲
LCALL 时钟脉冲
LCALL 时钟脉冲
djnz 56h,时钟延时2ms1
ret
时钟延时10ms: nop
mov 55h,#10
时钟延时10ms2: mov 56h,#102
时钟延时10ms1: LCALL 时钟脉冲
LCALL 时钟脉冲
LCALL 时钟脉冲
LCALL 时钟脉冲
LCALL 时钟脉冲
djnz 56h,时钟延时10ms1
djnz 55h,时钟延时10ms2
ret
时钟延时50ms: nop
mov 55h,#50
时钟延时50ms2: mov 56h,#102
时钟延时50ms1: LCALL 时钟脉冲
LCALL 时钟脉冲
LCALL 时钟脉冲
LCALL 时钟脉冲
LCALL 时钟脉冲
djnz 56h,时钟延时50ms1
djnz 55h,时钟延时50ms2
ret
时钟延时100ms: nop
mov 40h,#100
时钟延时2: mov 41h,#102
时钟延时1: LCALL 时钟脉冲
LCALL 时钟脉冲
LCALL 时钟脉冲
LCALL 时钟脉冲
LCALL 时钟脉冲
djnz 41h,时钟延时1
djnz 40h,时钟延时2
ret
;===================================
org 07fdh
ljmp 0000h
end |