標(biāo)題:
單片機(jī)無線遙控LED亮度
[打印本頁]
作者:
hongniu
時間:
2015-6-24 22:11
標(biāo)題:
單片機(jī)無線遙控LED亮度
最近買了個無線遙控器,四路控制,編碼用的是PT2264,解碼用的是PT2272,閑著無聊,打算做個LED亮度的控制器。一般PT2264配套的解碼用的是PT2294。沒想到PT2272也能跟PT2264配套使用,匹配電阻為824(PT2272)跟475(PT2264)。
主控器用的是AT89C2051,用PWM來控制LED的亮度,為保證LED燈不會感到閃爍,PWM的頻率必須不小于60Hz。用定時器0工作方式0定時1ms產(chǎn)生一個中斷,10ms一個周期,PWM頻率為100Hz。 通過計算得出計數(shù)器的預(yù)存值為1C18,結(jié)果我直接就TH0=0x1C,TL0=0x18,結(jié)果程序運(yùn)行時發(fā)現(xiàn)LED閃爍得很嚴(yán)重。原來工作方式0的計數(shù)器為13位而不是16位,用的是TH0的高8位和TL0的低5位,所以TH0=0xE0,TL0=0x18才對,而TH0=0x1C,TL0=0x18并不是1ms產(chǎn)生一個中斷,而是7.27ms產(chǎn)生一個中斷,10次中斷一個周期的話,PWM的頻率變成了13.7Hz當(dāng)然會閃爍了。
源程序:
#include <reg51.h>
#define uchar unsigned char
sbit l1=P1^7;//led
sbit l2=P1^6;
sbit l3=P3^5;
sbit l4=P3^7;
sbit P1_2=P1^2;//遙控
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
uchar ti;
bit on,off,add,dec;//四個遙控鍵狀態(tài)位
bit p0=1;//用來標(biāo)記PWM的狀態(tài)
void led_on(void);
void led_off(void);
uchar z=5;//亮度1-9
main()
{
IE = 0x83; //開外中斷0,定時中斷0
IT0 = 1;//中斷觸發(fā)方式,后沿負(fù)跳有效
TMOD=0x00;//定時0工作方式0
TH0=0xE0;TL0=0x18;//初始定時時間
TR0=0;//關(guān)定時器
IP=0x01;//中斷優(yōu)先級設(shè)置,外部中斷高于定時中斷
l1=0;l2=0;l3=0;l4=0;//關(guān)燈
while(1)
{
if (on==1) {on=0;TR0=0;led_on();} //關(guān)閉定時器,LED開,使LED達(dá)到最亮
if (off==1) {off=0;TR0=0;led_off();}//關(guān)閉定時器,LED關(guān)
if (add==1) {add=0;if (z<9) z++;TR0=1;}
if (dec==1) {dec=0;if (z>0) z--;TR0=1;}
}
}
void extern0() interrupt 0
{
EX0=0;
if (P1_2==1) on=1;//查詢哪個鍵按下
if (P1_3==1) off=1;
if (P1_4==1) add=1;
if (P1_5==1) dec=1;
EX0=1;
}
void time0() interrupt 1//1ms觸發(fā)一次
{
TR0=0;
TH0=0xE0;TL0=0x18;//重載計數(shù)值
ti++;
if (ti>=10) ti=0;//10ms時計數(shù)清零
if (ti<z) led_on(); else led_off();//根據(jù)z值控制PWM的占空比
TR0=1;
}
void led_on()//LED燈亮
{
l1=1;
l2=1;
l3=1;
l4=1;
}
void led_off()//LED燈滅
{
l1=0;
l2=0;
l3=0;
l4=0;
}
作者:
chuanping87
時間:
2015-6-29 16:15
有電路圖嗎?
、
作者:
bhjyqjs
時間:
2015-7-1 09:37
簡單實用的DIY,頂一個!
作者:
99998
時間:
2017-9-26 09:37
初學(xué)者啥都不懂。棒棒的
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1