义隆单片机153的LED七彩渐变。七彩跳变程序
tcc == 0x01 ; TCC计数器
psw == 0x03 ; 状态寄存器
port5 == 0x05 ; PORT5端口
ioc5 == 0x05 ; port5控制端口
port6 == 0x06 ; port6端口
ioc6 == 0x06 ; port6控制端口
iocb == 0x0b ; 设置下拉控制器
IOCE == 0x0E ; WDT控制寄存器
IOCF == 0x0F ; 中断控制寄存器
ISR == 0x0F ; 中断状态寄存器
;---------------------------------------------------------------------
;定义变量
;---------------------------------------------------------------------
a_buf == 0x10 ; 保存中断前A的值
count_gu == 0x11 ; 固定计数器
count_bian == 0x12 ; 可变计数器
temp3_75 == 0x13 ; 最暗比较器
temp2_50 == 0x14 ; 较暗比较器
temp1_25 == 0x15 ; 次暗比较器
temp0_0 == 0x16 ; 最亮比较器
count == 0x19 ; 分配计数器
year == 0x1a ; 年龄,用在按键扫描中
flag == 0x1b ; 0位为连击标志位,1位为响应标志位
time == 0x1c ; 时间变换1
time1 == 0x1d ; 时间变换2
time0 == 0x1e ; 时间中间量
c == 0 ; 进位标志位
Z == 2 ; 为0标志位
;----------------------------程序入口地址------------------------------;
org 0x00
jmp start ; 开始程序入口
org 0x08 ; 中断入口地址
;----------------------------------------------------------------------;
tcc_int:
mov a_buf, a ; 保存A的值
mov a,@0xea ; TCC计数初值
mov tcc,a
mov a, @0xfe
and isr, a ; 清中断标志位
;-----------------------------------------------------------------------
call gu_loop ; 调用固定计数子程序
djz time1
jmp tcc_out
mov a,time0
mov time1,a
call bian_loop ; 调用可变计数子程序
djz time
jmp tcc_out
mov a,@40
mov time,a
call key_scan ; 调用按键扫描
;----------------------------------------------------------------------
tcc_out:
mov a, a_buf ; 恢复A的值
reti ; 中断返回
;---------------------主程序-----------------------------------------------;
start:
mov a, @0x80
iow ioce ; 关闭看门狗
;---------------------设置IO口--------------------------------------------
clra
iow ioc5 ; Port5为输出口
mov a,@0x0a ; p61为输入口
iow ioc6 ; 其余为输出口
mov a,@0xdf ; p61设置下拉电阻
iow iocb
;------------------赋初值-------------------------------------------------;
mov a,@75
add a,count_bian
mov temp3_75,a ;最暗计数器
mov a,@50
add a,count_bian
mov temp2_50,a ;较暗计数器
mov a,@25
add a,count_bian
mov temp1_25,a ;次暗计数器
mov a,@0
add a,count_bian
mov temp0_0,a ;最亮计数器
;--------------------------------------------------------------------------
mov a,@40
mov time,a
mov a,time0
mov time1,a
;-------------------------------------------------------------------------
clr year ;年龄,决定进入连击时的等待时间和连击的速度;
clr flag
clr count
clr count_gu
clr count_bian
mov a,@0x0f
or port5,a ;p5和p6的LED灭
mov a,@0xf0
or port6,a
mov a,@255
mov time0,a
;----------------------------------------------------------------
mov a, @0b11010000 ; 保留不需要设置的状态位
or a, @0b00000000 ; 预除数2
contw
mov a, @0x01 ; 允许计数器中断
iow iocf
eni ; 开中断
;----------------------等待中断----------------------------------------------;
main:
nop
nop
jmp main
;------------------------------------------------------------------------------
;固定计数子程序
;可以在此改变IO口的状态,50us-5ms,100等份
;-----------------------------------------------------------------------------
;=========================第一部分===========================================
gu_loop:
inc count_gu
mov a,@0xaf
xor a,count_gu ; 是否等于100
jbs psw,z
jmp gu_next ; 否,返回
clr count_gu
mov a,@0x0f ; P5置1,灯灭
or port5,a
mov a,@0xf0 ; P6口置1,灯灭
or port6,a
ret
gu_next: ; 第一灯最暗
mov a,temp3_75
sub a,count_gu
jbs psw,c
jmp gu_next1
clra
xor a,count
jbs psw,z
jmp disp_next
bc port5,0