<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 最牛的LED遙控控制器---調整無(wú)閃爍

最牛的LED遙控控制器---調整無(wú)閃爍

作者: 時(shí)間:2016-11-29 來(lái)源:網(wǎng)絡(luò ) 收藏

/****************************************/
/***********遙控解碼低電平檢測***********/
/****************************************/
uint Low()
{
TL0=0;
TH0=0;
TR0=1;
while(!IR&&(TH0&0x80)==0);
TR0=0;
return TH0*256+TL0;
}
/****************************************/
/***********遙控解碼高電平檢測***********/
/****************************************/
uint High()
{
TL0=0;
TH0=0;
TR0=1;
while(IR&&(TH0&0x80)==0);
TR0=0;
return TH0*256+TL0;
}
/****************************************/
/************AD轉換處理子函數************/
/****************************************/
void ADzhuan()
{
if(!power)//如果此標志位為1,則執行AD轉換
dat = adzhang1();
}
/****************************************/
/**************LED閃爍子函數*************/
/****************************************/
void LEDflash()
{
if(flash==1)//如果此標志位為1,則執行閃爍程序
{
if(flashnum>=(shudu*800))//定時(shí)器時(shí)間到了嗎?
{
bit kl;//定義一個(gè)標志位
flashnum=0;//到了就清0
kl=~kl;//將它取反,以便形成亮滅變化
if(kl==0)//如果為1,就讓LED亮
dat=100;//等級為100,就最亮
else//否則滅
dat=0;//等級為0就為熄滅
}
}
}
/****************************************/
/**************LED漸變子函數*************/
/****************************************/
void LEDjian()
{
if(jian==1)//如果此標志位為1,則執行漸變程序
{
bit a;//定義一個(gè)標志位
if(flashnum>=(shudu*100))//定時(shí)器時(shí)間到了嗎?
{
flashnum=0;//到了就清0
if(a==0)//如果為0就執行漸亮子函數
{
dat++;//時(shí)間到了就自動(dòng)加1
if(dat>100)//如果加到大于100
{
a=1;//將標志位變?yōu)?
dat=100;//將變量變?yōu)樽盍翣顟B(tài)
}
}
else//如果a為1就執行漸暗子函數
{
dat--;//時(shí)間到了就自動(dòng)減1
if(dat<(0-1))//如果減到小于0了,就將它變?yōu)?
{
a=0;//標志位變?yōu)?,以便執行漸亮子函數
dat=0;
}
}
}
}
}

本文引用地址:http://dyxdggzs.com/article/201611/323378.htm

/**********************************************/
/**************LED綜合子函數*************/
/**********************************************/
void zonghe()
{
uchar ci,ii;
bit a,fla;//定義一個(gè)標志位
bit kl;//定義一個(gè)標志位
if(zeng==1)
{
if(flashnum>=(shudu*100))//定時(shí)器時(shí)間到了嗎?
{
flashnum=0;
ii++;
if(ii>7)
{
ii=0;
if(fla==1)
{

kl=~kl;//將它取反,以便形成亮滅變化
if(kl==0)//如果為1,就讓LED亮
dat=100;//等級為100,就最亮
else//否則滅
dat=0;//等級為0就為熄滅
ci++;
if(ci>=30)
{
ci=0;
fla=0;
}
}
}
if(fla==0)
{
if(a==0)//如果為0就執行漸亮子函數
{
dat++;//時(shí)間到了就自動(dòng)加1
if(dat>100)//如果加到大于100
{
a=1;//將標志位變?yōu)?
dat=100;//將變量變?yōu)樽盍翣顟B(tài)
}
}
else//如果a為1就執行漸暗子函數
{
dat--;//時(shí)間到了就自動(dòng)減1
if(dat<(0-1))//如果減到小于0了,就將它變?yōu)?
{
a=0;//標志位變?yōu)?,以便執行漸亮子函數
dat=0;
ci++;
if(ci>=4)
{
fla=1;
ci=0;
}
}
}
}
}
}
}
/****************************************/
/************遙控解碼核心部分************/
/****************************************/
void decode()
{
while(1)
{
restart:
while(IR)/******空閑時(shí)處理其它的事情,即當遙控沒(méi)有按下時(shí),處理其它事情******/
{
ADzhuan();
LEDflash();
LEDjian();
zonghe();
}/******空閑時(shí)處理其它的事情,即當遙控沒(méi)有按下時(shí),處理其它事情******/
temp=Low();
if(tempc(9500)) continue;//引導脈沖低電平9000
temp=High();
if(tempc(5000)) continue;//引導脈沖高電平4500
for(i=0;i<4;i++) //4個(gè)字節
{
for(j=0;j<8;j++) //每個(gè)字節8位
{
temp=Low();
if(tempc(800)) goto restart;
temp=High();
if(tempc(2000)) goto restart;
IRBUF[i]>>=1;
if(temp>c(1120))
{
IRBUF[i]|=0x80;

}
}
}
return;
}

}
/****************************************/
/*********遙控解碼鍵值處理子函數********/
/****************************************/
void numzhi()
{
switch(IRBUF[2])//判斷數組2鍵值注:因為只有第2組才是按鍵碼,所以判斷數組2

{
/****************如果此鍵按下了,則遙控開(kāi)關(guān)機****************11111**/
case 0x58:
flag=~flag;
if(flag==0)
dat=100;//dat為100時(shí)最亮
else
dat=0;//為0時(shí)熄滅
jian=0;//將漸變變量置0,以防止漸變子程序動(dòng)作
flash=0;//將閃爍變量置0,以防止跳變子程序動(dòng)作
zeng=0;//將綜合程序變量置0,以防止綜合子程序動(dòng)作
break;

/***如果此鍵按下了,每按一次亮度會(huì )增加1個(gè)等級 共為100等級**22222**/
case 0x1b:if(flag==0)
{

dat+=dengji;
if(dat>=100)
dat=100;
jian=0;//將漸變變量置0,以防止漸變子程序動(dòng)作
flash=0;//將閃爍變量置0,以防止跳變子程序動(dòng)作
zeng=0;//將綜合程序變量置0,以防止綜合子程序動(dòng)作
}
break;

/***如果此鍵按下了,每按一次亮度會(huì )減小1個(gè)等級 共為100等級**33333**/
case 0x1f:if(flag==0)
{
dat-=dengji;
if(dat<=(0-1))
dat=0;
jian=0;//將漸變變量置0,以防止漸變子程序動(dòng)作
flash=0;//將閃爍變量置0,以防止跳變子程序動(dòng)作
zeng=0;//將綜合程序變量置0,以防止綜合子程序動(dòng)作

}
break;

/***每按一次跳變和漸變速度會(huì )減小1個(gè)等級 共為60等級,并寫(xiě)入改變的數值,以便開(kāi)機記憶**44444**/
case 0x0f:if(flag==0)
{
shudu-=1;
if(shudu<=1)
shudu=1;
sector(0x0200);//擦除EEPROM,擦除地址為0X200
write(0x0200,shudu);//寫(xiě)入EEPROM,寫(xiě)入地址為0X200
}
break;

/***每按一次跳變和漸變速度會(huì )增加1個(gè)等級 共為60等級,并寫(xiě)入改變的數值,以便開(kāi)機記憶**55555**/
case 0x1a:if(flag==0)
{
shudu+=1;
if(shudu>=30)
shudu=30;
sector(0x0200);//擦除EEPROM,擦除地址為0X200
write(0x0200,shudu);//寫(xiě)入EEPROM,寫(xiě)入地址為0X200
}
break;

/*********如果此鍵按下了,則執行手動(dòng)調光與遙控切換,兩者不能同時(shí)工作***********66666**/
case 0x1e:if(flag==0)
{
flash=1;//進(jìn)入遙控后,讓它先進(jìn)入關(guān)機狀態(tài)
dat=0;
power=~power;//手動(dòng)調光與遙控切換標志位
jian=0;//將漸變變量置0,以防止漸變子程序動(dòng)作
flash=0;//將閃爍變量置0,以防止跳變子程序動(dòng)作
zeng=0;//將綜合程序變量置0,以防止綜合子程序動(dòng)作
}
break;

/***********************如果此鍵按下了,則執行漸變子函數*******************77777**/
case 0x0e:if(flag==0)
{
jian=~jian;
dat=0;
flash=0;//將閃爍變量置0,以防止跳變子程序動(dòng)作
zeng=0;//將綜合程序變量置0,以防止綜合子程序動(dòng)作
}
break;
/***********************如果此鍵按下了,則執行跳變子函數*******************88888**/
case 0x19:if(flag==0)
{
flash=~flash;
dat=0;
jian=0;//將漸變變量置0,以防止漸變子程序動(dòng)作
zeng=0;//將綜合程序變量置0,以防止綜合子程序動(dòng)作
}
break;
case 0x1d:if(flag==0)
{
zeng=~zeng;
dat=0;
}
break;

}
}
/****************************************/
/***************主程序部分***************/
/****************************************/
main()
{
TMOD=0x11;//設置定時(shí)器0定時(shí)器1工作方式為1的狀態(tài)下工作
EA=1;

TR0=1;//設置定時(shí)器0
ET0=1;
TL0=0;
TH0=0;

TR1=1;//設置定時(shí)器1
ET1=1;
TH1=(65536-20)/256; //定時(shí)器初值
TL1=(65536-20)%256;
shudu=read(0x0200);//開(kāi)機讀取EEPROM里面的速度變量shudu,從而形成斷電記憶功能
while(1)
{
decode();//調用解碼子函數
numzhi();//調用遙控鍵值子函數
}
}
/****************************************/
/***************定時(shí)器1部分**************/
/****************************************/
void zhong3() interrupt 3 //利用PWM來(lái)改變亮度
{

TH1=(65536-20)/256; //定時(shí)器0設定約1000us中斷一次
TL1=(65536-20)%256;
num++;//PWM定時(shí)器
flashnum++;//閃爍漸變變量
if(num>=100)//此PWM等級為100,它由變量num與dat完成
num=0;
if(numLED=0;//如果計數器變量小于PWM時(shí),LED亮
else
LED=1;

}
/****************************************/
/***************定時(shí)器0部分**************/
/****************************************/
void zhong1() interrupt 1//用來(lái)產(chǎn)生遙控解碼計時(shí)
{
TL0=0;
TH0=0;
}


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: LED遙控控制器無(wú)閃

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>