
此電路軟/硬件的功能是51單片機(jī)輸出PWM信號(hào)驅(qū)動(dòng)三源色LED的,用紅外遙控或
或按鍵(電路圖按鍵未畫(huà)出)控制三源色LED的運(yùn)行狀態(tài).但此電路在按遙控單片機(jī)解碼時(shí)LED有輕微閃爍,特別是在LED漸滅時(shí),請(qǐng)各位針對(duì)此現(xiàn)象給予改良或講改軟件的思路!!!!多謝了!!!
;紅外接P1.3(INT1)/P1.4(T0); P1.5(T1)接按鍵
;P1.7(綠);P1.6(紅);P1.5(藍(lán)) P1.4/P1.3/P1.2接LED
RRR BIT P1.5;藍(lán)
BBB BIT P1.6;紅
GGG BIT P1.7;綠
;計(jì)數(shù)器
COUNTER EQU 23H
COUNTER1 EQU 24H
LDBS EQU 27H;亮燈標(biāo)志寄存器
T28 EQU 28H
ORG 0000H
AJMP START
ORG 0BH
AJMP TOO
RETI
ORG 013H
AJMP INT0123
RETI
NOP
NOP
AJMP START
;初始化
CUSU:MOV P1,#00
MOV P3,#0FFH
MOV TMOD,#10B
MOV TH0,#20;236
SETB PT0
SETB EA
SETB EX1
SETB IT1
SETB ET0;調(diào)用初始化
MOV 38H,#1;37H與38H是設(shè)置輸出PWM可變周期及比例.
MOV 39H,#250
MOV 40H,#250;39H給最大時(shí)返回值.
RET
;主程序開(kāi)始++++++++++++++++++++++++++++++++
START:ACALL CUSU
ACALL BBBH; 調(diào)用紅漸亮
SETB BBB ; 紅亮
ACALL DELAY2
ACALL GGGH ; 調(diào)用綠漸亮
SETB BBB; 紅亮
SETB GGG; 綠亮
ACALL DELAY2
START1:ACALL RRRHBBBGGGL; 調(diào)用藍(lán)漸亮/紅綠漸滅
SETB RRR; 藍(lán)亮
CLR BBB; 紅滅
CLR GGG; 綠滅
ACALL DELAY2
ACALL BBBGGGH; 調(diào)用紅綠漸亮
SETB BBB; 紅亮
SETB GGG; 綠亮
ACALL DELAY2
ACALL BBBRRRL; 調(diào)用紅藍(lán)漸滅
CLR BBB; 紅滅
CLR RRR; 藍(lán)滅
ACALL DELAY2
ACALL BBBHGGGL; 調(diào)用紅漸亮/綠漸滅 55555
SETB BBB; 紅亮
CLR GGG; 綠滅
ACALL DELAY2
ACALL GGGH; 調(diào)用綠漸亮
SETB GGG; 綠亮
ACALL DELAY2
ACALL RRRHBBBGGGL; 調(diào)用藍(lán)漸亮/紅綠漸滅
SETB RRR; 藍(lán)亮
CLR BBB; 紅滅
CLR GGG; 綠滅
ACALL DELAY2
ACALL BBBGGGH; 調(diào)用紅綠漸亮
SETB BBB; 紅亮
SETB GGG; 綠亮
ACALL DELAY2
ACALL BBBRRRL; 調(diào)用紅藍(lán)漸滅
CLR BBB; 紅滅
CLR RRR; 藍(lán)滅
ACALL DELAY2
ACALL BBBHGGGL; 調(diào)用紅漸亮/綠漸滅*
SETB BBB; 紅亮
CLR GGG; 綠滅
ACALL DELAY2
ACALL GGGH; 調(diào)用綠漸亮
SETB GGG; 綠亮
ACALL DELAY2
AJMP START1;轉(zhuǎn)移循環(huán)
;主程序到此結(jié)束+++++++++++++++++++++++++++++++++++++++
;以下被調(diào)用程序++++++++++++++++++++++++++++++++++++
; 紅漸亮
BBBH: MOV LDBS,#0;作標(biāo)志,為了在按鍵或中斷解碼時(shí)繼續(xù)調(diào)用順序運(yùn)行程序
MOV COUNTER,38H
MOV COUNTER1,39H
BBBH1: mov 10h,#1
j1: MOV 26H,#40
BBBH2:ACALL BBBH4
ACALL INTI;調(diào)用掃描按鍵*****************
JB 01H,BBBH2;查標(biāo)志01h為0順序進(jìn)行,為1則不變循環(huán)
DJNZ 26H,BBBH2
djnz 10h,j1
INC COUNTER
DEC COUNTER1
MOV A,COUNTER
CJNE A,40H,BBBH3
BBBH3:JC BBBH1
MOV LDBS,#7
RET
;綠漸亮
GGGH: MOV LDBS,#1;作標(biāo)志,為了在按鍵或中斷解碼時(shí)繼續(xù)調(diào)用順序運(yùn)行程序
MOV COUNTER,38H
MOV COUNTER1,39H
GGGH1:mov 10h,#1
j2: MOV 26H,#40
GGGH2:ACALL GGGH4
ACALL INTI;*****************
JB 01H,GGGH2
DJNZ 26H,GGGH2
djnz 10h,j2
INC COUNTER
DEC COUNTER1
MOV A,COUNTER
CJNE A,40H,GGGH3
GGGH3:JC GGGH1
MOV LDBS,#7
RET
; 藍(lán)漸亮/紅綠漸滅
RRRHBBBGGGL: MOV LDBS,#2;作標(biāo)志,為了在按鍵或中斷解碼時(shí)繼續(xù)調(diào)用順序運(yùn)行程序
MOV COUNTER,38H
MOV COUNTER1,39H
RRRHBBBGGGL1:mov 10h,#1
j3: MOV 26H,#40
RRRHBBBGGGL2: ACALL RRRHBBBGGGL4
ACALL INTI;*****************
JB 01H,RRRHBBBGGGL2
DJNZ 26H,RRRHBBBGGGL2
djnz 10h,j3
INC COUNTER
DEC COUNTER1
MOV A,COUNTER
CJNE A,40H,RRRHBBBGGGL3
RRRHBBBGGGL3:JC RRRHBBBGGGL1
MOV LDBS,#7
RET
;紅綠漸亮
BBBGGGH: MOV LDBS,#3;作標(biāo)志,為了在按鍵或中斷解碼時(shí)繼續(xù)調(diào)用順序運(yùn)行程序
MOV COUNTER,38H
MOV COUNTER1,39H
BBBGGGH1:mov 10h,#1
j4: MOV 26H,#40
BBBGGGH2: ACALL BBBGGGH4
ACALL INTI;*****************
JB 01H,BBBGGGH2
DJNZ 26H,BBBGGGH2
djnz 10h,j4
INC COUNTER
DEC COUNTER1
MOV A,COUNTER
CJNE A,40H,BBBGGGH3
BBBGGGH3: JC BBBGGGH1
MOV LDBS,#7
RET
; 紅藍(lán)漸滅
BBBRRRL: MOV LDBS,#4;作標(biāo)志,為了在按鍵或中斷解碼時(shí)繼續(xù)調(diào)用順序運(yùn)行程序
MOV COUNTER,38H
MOV COUNTER1,39H
BBBRRRL1:mov 10h,#1
j5: MOV 26H,#40
BBBRRRL2: ACALL BBBRRRL4
ACALL INTI;*****************
JB 01H,BBBRRRL2
DJNZ 26H,BBBRRRL2
djnz 10h,j5
INC COUNTER
DEC COUNTER1
MOV A,COUNTER
CJNE A,40H,BBBRRRL3
BBBRRRL3: JC BBBRRRL1
MOV LDBS,#7
RET
; 紅漸亮/藍(lán)漸滅
BBBHRRRL: MOV LDBS,#5;作標(biāo)志,為了在按鍵或中斷解碼時(shí)繼續(xù)調(diào)用順序運(yùn)行程序
MOV COUNTER,38H
MOV COUNTER1,39H
BBBHRRRL1:mov 10h,#1
j6: MOV 26H,#40
BBBHRRRL2: ACALL BBBHRRRL4
ACALL INTI;*****************
JB 01H,BBBRRRL2
DJNZ 26H,BBBHRRRL2
djnz 10h,j6
INC COUNTER
DEC COUNTER1
MOV A,COUNTER
CJNE A,40H,BBBHGGGL3
BBBHRRRL3: JC BBBHRRRL1
MOV LDBS,#7
RET
; 紅漸亮/綠漸滅
BBBHGGGL: MOV LDBS,#6;作標(biāo)志,為了在按鍵或中斷解碼時(shí)繼續(xù)調(diào)用順序運(yùn)行程序
MOV COUNTER,38H
MOV COUNTER1,39H
BBBHGGGL1: mov 10h,#1
j7: MOV 26H,#40
BBBHGGGL2: ACALL BBBHGGGL4
JB 01H,BBBHGGGL2
DJNZ 26H,BBBHGGGL2
djnz 10h,j7
INC COUNTER
DEC COUNTER1
MOV A,COUNTER
CJNE A,40H,BBBHGGGL3
BBBHGGGL3: JC BBBHGGGL1
MOV LDBS,#7
RET
;***************************************************************
BBBHGGGL4: SETB BBB ;紅漸亮/綠漸滅
CLR GGG
ACALL DELAY
CLR BBB
SETB GGG
ACALL DELAY1
RET
BBBHRRRL4:SETB BBB ;紅漸亮/藍(lán)漸滅
CLR RRR
ACALL DELAY
CLR BBB
SETB RRR
ACALL DELAY1
RET
BBBRRRL4:CLR BBB ;紅藍(lán)漸滅
CLR RRR
ACALL DELAY
SETB BBB
SETB RRR
ACALL DELAY1
RET
BBBGGGH4:SETB BBB ;紅綠漸亮
SETB GGG
ACALL DELAY
CLR BBB
CLR GGG
ACALL DELAY1
RET
RRRHBBBGGGL4: SETB RRR ;藍(lán)漸亮/紅綠漸滅
CLR BBB
CLR GGG
ACALL DELAY
CLR RRR
SETB BBB
SETB GGG
ACALL DELAY1
RET
GGGH4:SETB GGG ; 綠漸亮
ACALL DELAY
CLR GGG
ACALL DELAY1
RET
BBBH4:SETB BBB ; 紅漸亮
ACALL DELAY
CLR BBB
ACALL DELAY1
RET
;可動(dòng)態(tài)延時(shí)
DELAY:MOV 25H,COUNTER
DJNZ 25H,$
RET
DELAY1:MOV 25H,COUNTER1
DJNZ 25H,$
RET
;LED切換變化時(shí)的延時(shí)++++++++++++++++++++++++++++++++++++++++++
DELAY2:MOV LDBS,#7;作標(biāo)志,為了在按鍵或中斷解碼時(shí)繼續(xù)調(diào)用順序運(yùn)行程序
MOV 36H,#10
DDD1: MOV R5,#255
DDD: ACALL DELAY3
DELAY5: ACALL INTI;調(diào)用按鍵檢測(cè)處理程序
JB 01H,DELAY5 ;01H為標(biāo)志位,為1則暫停/0順序運(yùn)行,
;此行是在暫停時(shí)不停檢測(cè)按鍵.
DJNZ R5,DDD
DJNZ 36H,DDD1
RET
DELAY3:NOP
NOP
NOP
ACALL DELAY
NOP
NOP
NOP
ACALL DELAY1
RET
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;被調(diào)用按鍵檢測(cè)處理程序++++++++++++++++++++++++++++++++++++++++++++++
INTI:JNB P3.5,INTII
KLL: RET
INTII:MOV 37H,P1;為了進(jìn)入關(guān)閉后退出恢復(fù)原先狀態(tài).
ACALL DY
JB P3.5,KLL
MOV 35H,#255
INTIII: ACALL DY
ACALL DY
ACALL DY
DJNZ 35H,INTIII
JB P3.5,PPP
MOV P1,#00
INTIP:;長(zhǎng)按按鍵關(guān)閉輸出++++
SETB P1.3
ACALL DELAY3
JNB P3.5,INTIP
ACALL DELAY3
JNB P3.5,INTIP
INTIP1:ACALL DELAY3
JB P3.5,INTIP1
ACALL DELAY3
JB P3.5,INTIP1
INTIP2:ACALL DELAY3
JNB P3.5,INTIP2
ACALL DELAY3
JNB P3.5,INTIP2
INTIP3:CLR P1.3
MOV P1,37H
RET
;+++++++++++++++++++++++++
PPP:CPL 01H
JNB 01H,JHJ
SETB P1.4
RET
JHJ:CLR P1.4
RET
;按鍵處理程序至此結(jié)束+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;為了讓PWM信號(hào)持續(xù)輸出保持LED同樣的亮度(不閃爍)給調(diào)用之用
DY: MOV A,LDBS;13us+524us=537us
RL A
MOV DPTR,#KEYFUNTB
JMP @A+DPTR
KEYFUNTB: AJMP ABBBH
AJMP AGGGH
AJMP ARRRHBBBGGGL
AJMP ABBBGGGH
AJMP ABBBRRRL
AJMP ABBBHRRRL
AJMP ABBBHGGGL
AJMP ADELAY3
ABBBH: ACALL BBBH4;每節(jié)524us
NOP
NOP
RET;++++++++++++++++++
AGGGH: ACALL GGGH4
NOP
NOP
RET
ARRRHBBBGGGL:ACALL RRRHBBBGGGL4
RET
ABBBGGGH: ACALL BBBGGGH4
NOP
RET
ABBBRRRL: ACALL BBBRRRL4
NOP
RET
ABBBHRRRL: ACALL BBBHRRRL4
NOP
RET
ABBBHGGGL: ACALL BBBHGGGL4
NOP
RET
ADELAY3: ACALL DELAY3
RET
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;以下是中斷解碼程序
INT0123:PUSH ACC
CLR EX1
MOV T28,#16
INT0124:JB P3.3,INTRET
ACALL DY;調(diào)用LED請(qǐng)燈持續(xù)點(diǎn)亮總時(shí)間約525us
DJNZ T28,INT0124
JNB P3.3,$
;9ms判斷結(jié)束-------------------------------
MOV T28,#9
INT01235: ACALL DY
DJNZ T28,INT01235
MOV R1,#41H
MOV R2,#4
INT01238: MOV R3,#8
INT01236:
KL: JNB P3.3,$ ;4.5ms判斷結(jié)束-------------------------------
ACALL DY
ACALL DY
MOV C,P3.3
JNC INT01237
ACALL DY
JB P3.3,$
INT01237:MOV A,@R1
RRC A
MOV @R1,A
DJNZ R3,INT01236
INC R1
DJNZ R2,INT01238
;讀碼裝入41H/42H(用戶(hù)碼)43H/44H(數(shù)據(jù)識(shí)別碼)完成.+++++++++++++++++++
MOV A,41H;比較高8位地址碼
XRL A,#2H ;判斷1AH的值是否等于00000000,相等的話(huà)A為0
JNZ INTRET;如果不相等說(shuō)明解碼失敗退出解碼程序
MOV A,42H;比較低8位地址
XRL A,#0BDH ;再判斷高8位地址是否正確
JNZ INTRET;如果不相等說(shuō)明解碼失敗退出解碼程序
MOV A,43H;比較數(shù)據(jù)碼和數(shù)據(jù)反碼是否正確?
CPL A
XRL A,44H ;將1CH的值取反后和1DH比較 不同則無(wú)效丟棄,核對(duì)數(shù)據(jù)是否準(zhǔn)確
JNZ INTRET;如果不相等說(shuō)明解碼失敗退出解碼程序
;判讀入碼是否成功----------完成---------------------------------------
MOV A,44H;按鍵數(shù)值判斷執(zhí)行
CJNE A,#0E7H,INTRET
CPL P1.4;解碼成功發(fā)光二極管點(diǎn)亮指示!
CPL 01H
INTRET:MOV T28,#120
INTRET1:ACALL DY
CPL P1.2
JNB P3.3,INTRET
DJNZ T28,INTRET1
SETB EX1
POP ACC
CLR P1.2
RETI
TOO: INC 28H
RETI
END 1139201115.asm