本程序用于控制RGB三基色 LED ,使其按红,绿,蓝,紫,黄,青,白顺序渐变
每种颜色的渐变时间为9.3ms.
ORG 0000H
LJMP MAIN
ORG 000BH ; 定时器0入口地址
LJMP TIM0
ORG 001BH ; 定时器1入口地址
LJMP TIM1
ORG 0100H
;---------------------------------------------------
;--- 设置定时初值,T1定时时间长度为9.3毫秒,T0定时时间长度为0.15-9.15毫秒,占空比为1.6%-98.3%
MAIN: MOV SP , #09H
MOV R0, #0 ;灯颜色状态计数器
MOV R1, #0FAH ;对T1产生的中断计数
MOV R2, #06H ;T0定时器定时长度增加值
MOV R3, #0 ;和R1配合对T1产生的中断进行计数
MOV R4, #2CH ;存放TL0的值
MOV R5, #0E8H ;存放TH0的值
MOV TMOD , #11H ;T0定时模式,方式1,T1定时模式,方式1
MOV TH0 , R5 ;T0定时初值, 占空比
MOV TL0, R4
MOV TL1, #0C8H ;T1定时初值, 定时时间9.45ms
MOV TH1, #0E7H
SETB PT0
SETB ET0
SETB ET1
SETB EA
SETB TR0
SETB TR1
SJMP $ ;等待中断
;--------------------------------定时器T0中断
TIM0: CLR TF0
MOV TH0 , R5 ;重新设定定时初值
MOV TL0, R4
CJNE R0, #0, L1 ;逐渐变红
CLR P1.4
SETB P1.3
SETB P1.2
SJMP AAA
L1: CJNE R0, #1, L2 ;逐渐变绿
SETB P1.4
CLR P1.3
SETB P1.2
SJMP AAA
L2: CJNE R0, #2, L3 SETB P1.4
SETB P1.3
CLR P1.2
SJMP AAA
L3: CJNE R0, #3, L4 CLR P1.4 SETB P1.3
;逐渐变蓝
;逐渐变紫
CLR P1.2
SJMP AAA
L4: CJNE R0, #4, L5 ;逐渐变黄
CLR P1.4
CLR P1.3
SETB P1.2
SJMP AAA
L5: CJNE R0, #5, L6 SETB P1.4
CLR P1.3
CLR P1.2
SJMP AAA
L6: CJNE R0, #6, L7 ; 逐渐变青
;逐渐变白
CLR P1.4
CLR P1.2
CLR P1.3
SJMP AAA
L7: CJNE R0, #7, L1 ; 逐渐变红
CLR P1.4
SETB P1.3
SETB P1.2
AAA: RETI
;--------------------------------定时器T1中断
TIM1: CLR TF1
MOV TH1, #0E7H ;对T1重新置定时初值
MOV TL1, #0C8H
CJNE R0, #0, L11
LCALL DE1 ;增加TL0值,延长定时时间
JBC 00H, D00 ;00H位为一,9.45S到
JNC D0 ;如果TL0产生进位
LCALL DE2 ;将TH0值加1
D0: SETB P1.4
D00: LJMP BBB
L11: CJNE R0, #1, L12
LCALL DE1
JBC 00H, D11
JNC D1
LCALL DE2
D1: CLR P1.4
SETB P1.3
D11: LJMP BBB
L12: CJNE R0, #2, L13
LCALL DE1
JBC 00H, D22
JNC D2
LCALL DE2
D2: CLR P1.3
SETB P1.2
D22: LJMP BBB
L13: CJNE R0, #3, L14
LCALL DE1
JBC 00H, D33
JNC D3
LCALL DE2
D3: SETB P1.4
D33: LJMP BBB
L14: CJNE R0, #4, L15
LCALL DE1
JBC 00H, D44
JNC D4
LCALL DE2
D4: SETB P1.3
CLR P1.2
D44: LJMP BBB
L15: CJNE R0, #5, L16
LCALL DE1
JBC 00H, D55
JNC D5
LCALL DE2
D5: CLR P1.4
SETB P1.2
D55: LJMP BBB
L16: CJNE R0, #6, L17
LCALL DE1
JBC 00H, D66
JNC D6
LCALL DE2
D6: SETB P1.4
D66: LJMP BBB
L17: CJNE R0, #7, L11
LCALL DE1
JBC 00H, BBB
JNC D7
LCALL DE2
D7: CLR P1.3
CLR P1.2
BBB: RETI
;------------------------改变定时器初值
DE1: DJNZ R1, S0
MOV R1, #0FAH
INC R3
CJNE R3, #4, S0
MOV R3, #0 ;R3为4时9.45s时间到,重新置初值, 否则增加原有初值时间
INC R0
CJNE R0, #8, S1 MOV R0, #1
S1: CLR C
SETB 00H
MOV R5, #0E8H
MOV R4, #02CH
MOV TH0,R5
MOV TL0, R4
SJMP CCC
S0: CLR C
;R0为8时,重新循环
MOV TH0, R5
MOV A, R4
ADD A, R2
MOV TL0, A
MOV R4, A
CCC: RET
DE2: INC R5 ;当TL0低位产生进位时,将TH0的值加1
;CJNE R5, #00H, ZZ
;MOV R5, #0FFH
;MOV R4, #0F6H
MOV TH0, R5
CLR C
RET
END
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuoyibo.net 版权所有 湘ICP备2023021910号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务