久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
紅外遙控RGB LED跳變漸變定色 單片機源碼與原理圖
[打印本頁]
作者:
51hei嗚嗚
時間:
2018-10-14 15:33
標題:
紅外遙控RGB LED跳變漸變定色 單片機源碼與原理圖
單片機源程序如下:
//============================================================================
//================翼芯科技 紅外遙控LED========================================
//============================================================================
// 此源碼版權屬 翼芯科技 全權享有,如欲引用,敬請署名并告知
// 嚴禁隨意用于商業目的,違者必究,后果自負
//程序說明:本程序用于實現紅外遙控LED,IC插到U9位置.
//文件名稱:main.C
//版本: 1.0
//C編譯器: keil 8.05
// FFH FEH FDH FCH
// FBH FAH F9H F8H
// F7H F6H F5H F4H
// F3H F2H F1H F0H
// EFH EEH EDH ECH
// EBH EAH E9H E8H
//=============================================================================
#include <STC12C5AXX.H>
#define uchar unsigned char
#define uint unsigned int
#define BIT_32 32
sbit RED1 = P0^0; //紅色IO口定義
sbit GREEN1 = P0^1; //綠色IO口定義
sbit BLUE1 = P0^2; //藍色IO口定義
sbit IRIN = P3^7;
bit SYNOK,ADDROK,FLAGERR,LOK;
bit FLAG_MODE;
bit FLAG_ON;
unsigned long int BYTE1;
uchar LCOUNT,HCOUNT,HLCOUNT,BITCOUNT;
uchar code TAB1[7]={1,2,4,3,6,5,7}; //跳變數據
uchar code TAB_RGB[3]={200,150,100}; //單色紅綠藍白數據
uchar code TAB_DAT1[3][4]={{184,154,124, 94},
{138,118, 98, 78},
{ 88, 74, 60, 46}};
uchar code TAB_DAT2[3][4]={{ 26, 50, 74, 98},
{ 18, 36, 54, 72},
{ 12, 24, 36, 48}};
uchar DPTR;
uchar PWM_HL;
uchar REPEAT;
uchar MODE;
uchar IR_CODE;
uint T_DELAY;
uchar DIM1,DIM2;
uchar COL1;
uchar R_DAT,G_DAT;B_DAT;
uchar R_BUF,G_BUF,B_BUF;
/******************************************************************
- 功能描述:紅外按鍵函數
- 隸屬模塊:無
- 函數屬性:無
- 參數說明:無
- 返回說明:無
- 注:.....
******************************************************************/
KEY_SET()
{
IR_CODE=(BYTE1>>24);
if(IR_CODE==0xF4) // 跳變1
{
FLAG_MODE=1;
MODE=0;
T_DELAY=1000;
return;
}
if(IR_CODE==0xF0) // 跳變2
{
FLAG_MODE=1;
MODE=0;
T_DELAY=3000;
return;
}
if(IR_CODE==0xEC) // 漸變1
{
FLAG_MODE=1;
MODE=1;
REPEAT=4;
return;
}
if(IR_CODE==0xE8) // 漸變2
{
FLAG_MODE=1;
MODE=1;
REPEAT=12;
return;
}
if(IR_CODE==0xFD) //OFF
{
FLAG_ON=0;
return;
}
if(IR_CODE==0xFC) //ON
{
FLAG_ON=1;
}
if(IR_CODE==0xFB) //紅色
{
MODE=2;
FLAG_MODE=1;
R_DAT=250;G_DAT=0;B_DAT=0;
}
if(IR_CODE==0xFA) //綠色
{
MODE=2;
FLAG_MODE=1;
R_DAT=0;G_DAT=250;B_DAT=0;
}
if(IR_CODE==0xF9) //藍色
{
MODE=2;
FLAG_MODE=1;
R_DAT=0;G_DAT=0;B_DAT=250;
}
if(IR_CODE==0xF8) //白色
{
MODE=2;
FLAG_MODE=1;
R_DAT=250;G_DAT=250;B_DAT=250;
}
if(IR_CODE==0xF7) //黃1
{
MODE=2;
FLAG_MODE=1;
R_DAT=200;G_DAT=200;B_DAT=0;
}
if(IR_CODE==0xF3) //黃2
{
MODE=2;
FLAG_MODE=1;
R_DAT=200;G_DAT=100;B_DAT=0;
}
if(IR_CODE==0xEF) //黃3
{
MODE=2;
FLAG_MODE=1;
R_DAT=200;G_DAT=150;B_DAT=0;
}
if(IR_CODE==0xEB) //黃4
{
MODE=2;
FLAG_MODE=1;
R_DAT=200;G_DAT=200;B_DAT=0;
}
if(IR_CODE==0xF6) //青1
{
MODE=2;
FLAG_MODE=1;
R_DAT=0;G_DAT=200;B_DAT=200;
}
if(IR_CODE==0xF2) //青2
{
MODE=2;
FLAG_MODE=1;
R_DAT=0;G_DAT=200;B_DAT=100;
}
if(IR_CODE==0xEE) //青3
{
MODE=2;
FLAG_MODE=1;
R_DAT=0;G_DAT=200;B_DAT=150;
}
if(IR_CODE==0xEA) //青4
{
MODE=2;
FLAG_MODE=1;
R_DAT=0;G_DAT=200;B_DAT=200;
}
if(IR_CODE==0xF5) //紫1
{
MODE=2;
FLAG_MODE=1;
R_DAT=200;G_DAT=0;B_DAT=200;
}
if(IR_CODE==0xF1) //紫2
{
MODE=2;
FLAG_MODE=1;
R_DAT=100;G_DAT=0;B_DAT=200;
}
if(IR_CODE==0xED) //紫3
{
MODE=2;
FLAG_MODE=1;
R_DAT=150;G_DAT=0;B_DAT=200;
}
if(IR_CODE==0xE9) //紫4
{
MODE=2;
FLAG_MODE=1;
R_DAT=200;G_DAT=0;B_DAT=200;
}
}
/******************************************************************
- 功能描述:R G B輸出
- 隸屬模塊:無
- 函數屬性:無
- 參數說明:無
- 返回說明:無
- 注:.....
******************************************************************/
SET_RGB(uchar LED_REG)
{
uchar LEDDATA;
LEDDATA=LED_REG;
if(LEDDATA&0X01) //輸出紅色
RED1=1;
else
RED1=0;
if(LEDDATA&0X02) //輸出綠色
GREEN1=1;
else
GREEN1=0;
if(LEDDATA&0X04) //輸出藍色
BLUE1=1;
else
BLUE1=0;
}
/******************************************************************
- 功能描述:延時函數
- 隸屬模塊:無
- 函數屬性:無
- 參數說明:無
- 返回說明:無
- 注:.....
******************************************************************/
delayms(uint x)
{
uint t;
while(x--)
for(t=1500;t>0;t--)
{
while(FLAG_ON==0)
{RED1=0;GREEN1=0;BLUE1=0;}
if(FLAG_MODE)return;
}
}
/******************************************************************
- 功能描述:PWM_輸出
- 隸屬模塊:無
- 函數屬性:無
- 參數說明:無
- 返回說明:無
- 注:.....
******************************************************************/
SHADE()
{
uchar i,CNT;
for(i=REPEAT;i>0;i--)
{
while(FLAG_ON==0)
{RED1=0;GREEN1=0;BLUE1=0;}
for(CNT=0;CNT<=PWM_HL;CNT++)
{
(R_DAT>CNT)? (RED1=1): (RED1=0);
(G_DAT>CNT)? (GREEN1=1):(GREEN1=0);
(B_DAT>CNT)? (BLUE1=1):(BLUE1=0);
if(FLAG_MODE)return;
}
}
}
/******************************************************************
- 功能描述:定時器0中斷,中斷時間為0.1MS,實現按鍵檢測.
- 隸屬模塊:無
- 函數屬性:無
- 參數說明:無
- 返回說明:無
- 注:.....
******************************************************************/
void TIME0_INT() interrupt 1
{
TH0 = (65535-200)/256;
TL0 = (65535-200)%256;
//=====================檢測高電平====================================================
if(FLAGERR==1) //解碼失敗,初始化參數
{
LCOUNT=0;
HCOUNT=0;
LOK=0;
FLAGERR=0;
SYNOK=0;
BITCOUNT=BIT_32;
}
if(IRIN==0)
{
LCOUNT++; //高電平計數器++
if(LOK==1) //第一個高電平
{
LOK=0;
if(SYNOK==1) //同步碼 Ok
{
HLCOUNT=LCOUNT+HCOUNT; //檢測高低計數值判定
if((3<HLCOUNT)&&(HLCOUNT<40)); //高低電平小于2560,大于1152,ok; 18
else
{
FLAGERR=1; //錯誤退出
return;
}
if(12<HCOUNT)
BYTE1=(BYTE1>>1)|0x80000000; //為1
else
BYTE1=(BYTE1>>1)|0x00000000; //為0
LCOUNT=0;
HCOUNT=0;
BITCOUNT--;
if(BITCOUNT==0) //解出了一次碼
{
SYNOK=0; //同步清零
BITCOUNT=BIT_32; //碼的位數
KEY_SET();
}
}
else
{
if((10<HCOUNT)&(HCOUNT<60)) //低電平大于6.4ms,小于12.8ms,同步碼電平ok; 80-100,OK
{
SYNOK=1;
LCOUNT=0;
HCOUNT=0;
}
else
{
FLAGERR=1;
}
}
}//end LOK
}//END IRIN==0;
else //檢測高電平的寬度==低電平計數
{
HCOUNT++;
if(LOK==1)
return;
if(SYNOK)
{
if((1<LCOUNT)&(LCOUNT<25)) //低電平大于256us,小于2048,高電平ok;
{
LOK=1;
}
else
{
FLAGERR=1;
}
}
else
{
if((60<LCOUNT)&(LCOUNT<120)) //低電平大于6MS,小于9MS, 同步低電平ok;
{
LOK=1;
}
else
{
FLAGERR=1;
}
} //END ELSE
} //EDN ELSE
}
/******************************************************************
- 功能描述:主函數
- 隸屬模塊:無
- 函數屬性:無
- 參數說明:無
- 返回說明:無
- 注:.....
******************************************************************/
void main()
{
TMOD = 0x01; //定時器0工作在16位的定時模式.
TH0 = (65535-200)/256; //定時器0高位設定
TL0 = (65535-200)%256; //定時器0低位設定
IE = 0x82; //開總中斷和定時器0中斷
TR0 = 1; //開定時器0
P0M1=0x00; //設置P2輸出口為推挽輸出
P0M0=0x07;
P3M1=0X80; //P3.7為輸入
P3M0=0X00;
P0=0;
PWM_HL=200;
REPEAT=8;
T_DELAY=2000;
FLAG_ON=1;
DIM1=1;
while(1)
{
switch (MODE)
{
case 0:
for(DPTR=0;DPTR<7;DPTR++) //跳變
{
SET_RGB(TAB1[DPTR]);
delayms(T_DELAY); //延時1秒
if(FLAG_MODE)
{
FLAG_MODE=0;
break;
}
}break;
case 1:
R_DAT=PWM_HL;G_DAT=0;B_DAT=0;
for(G_DAT=0;G_DAT<=PWM_HL;G_DAT++) //紅變黃
{
SHADE();
}if(FLAG_MODE){FLAG_MODE=0;break;}
for(R_DAT=PWM_HL;R_DAT>0;R_DAT--) //黃變綠
{
SHADE();
}if(FLAG_MODE){FLAG_MODE=0;break;}
for(B_DAT=0;B_DAT<=PWM_HL;B_DAT++) //綠變青
{
SHADE();
}if(FLAG_MODE){FLAG_MODE=0;break;}
for(G_DAT=PWM_HL;G_DAT>0;G_DAT--) //青變藍
{
SHADE();
}if(FLAG_MODE){FLAG_MODE=0;break;}
for(R_DAT=0;R_DAT<=PWM_HL;R_DAT++) //藍變紫
{
SHADE();
}if(FLAG_MODE){FLAG_MODE=0;break;}
for(G_DAT=0;G_DAT<=PWM_HL;G_DAT++) //紫變白
{
SHADE();
}if(FLAG_MODE){FLAG_MODE=0;break;}
for(G_DAT=PWM_HL;G_DAT>0;G_DAT--) //白變紅
{
B_DAT--;
SHADE();
}if(FLAG_MODE){FLAG_MODE=0;break;}
case 2:
SHADE();if(FLAG_MODE){FLAG_MODE=0;break;}
default:break;
}//mode
}
}
復制代碼
所有資料51hei提供下載(含原理圖):
http://www.zg4o1577.cn/bbs/dpj-137471-1.html
作者:
qzyhlf
時間:
2019-1-8 18:29
好資料,51黑有你更精彩!!!
作者:
mingjian78
時間:
2019-9-3 10:38
少SFR位定義及亮度加,亮度減程序
作者:
lidie
時間:
2019-9-3 18:54
請問51單片機IO口怎樣連接WS2811燈條
作者:
mingjian78
時間:
2019-9-5 15:23
lidie 發表于 2019-9-3 18:54
請問51單片機IO口怎樣連接WS2811燈條
單片機頻率需大于27MHZ及以上,定義好單片機IO口,編好程序并下載,5V供電單片機及WS2811,直接接WS2811信號輸入口就可控制。
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产精品我不卡
|
性欧美xxxx
|
国产免费国产
|
精品国产乱码一区二区三区a
|
亚洲精品自在在线观看
|
91视频进入
|
日本不卡免费新一二三区
|
日本天天操
|
午夜精品久久久久久
|
亚洲一区二区三区在线免费观看
|
噜噜噜色网
|
欧美精品一区在线
|
成人不卡
|
成人在线免费观看
|
天天艹逼网
|
日本一区二区三区四区
|
婷婷色在线
|
天天操天天射综合
|
日韩一区二区在线视频
|
自拍第1页
|
91麻豆精品国产91久久久更新资源速度超快
|
欧美国产精品一区二区
|
99欧美精品
|
精品视频一区二区三区在线观看
|
最新免费视频
|
草久久
|
久久久久久久久久一区二区
|
亚洲视频在线播放
|
精品欧美色视频网站在线观看
|
欧美色图另类
|
91欧美精品成人综合在线观看
|
亚洲视频在线免费观看
|
亚洲成人午夜电影
|
国产成人在线视频免费观看
|
97视频网站
|
久久国产视频网站
|
欧美成人一区二免费视频软件
|
欧美久久精品一级c片
|
欧美亚洲在线
|
国产精品久久久久久一区二区三区
|
www.夜夜骑
|