欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
全彩LED合集-紅外遙控全彩LED控制器制作
[打印本頁(yè)]
作者:
jialinx
時(shí)間:
2015-9-15 22:05
標(biāo)題:
全彩LED合集-紅外遙控全彩LED控制器制作
【第八個(gè)程序-紅外遙控全彩LED控制器】
原理圖
樂(lè)云兄 辛苦了, 來(lái)頂一下。
還缺一個(gè)亮度加減或者是漸變速度加減功能沒(méi)有加進(jìn)去哦
//////////////////////////////////////
C語(yǔ)言
//////////////////////////////////////
//*******************************************************************************************/
//* 紅外遙控LED R-G-B全彩控制器程序 */
//*遙 控 器:市面上通用24鍵超薄帶單色指示遙控器,功能控制器 FLASH STROBE FADE SMOOTH */
//*單片機(jī)型號(hào):STC90C52RC PWM輸出端口:R=P1.3 G=P1.4 B=1.5 遙控接收頭(HS0038)P3.2 */
//*程序作者 : 高山云先生 2012年3月31日 重慶 */
//*程序版本 :VER:2.0 */
//*程序功能 :本版本程序在原VER:1.0 VER:1.1 VER:1.2的基礎(chǔ)上增加了EEROM斷電數(shù)據(jù)記憶功能, */
//* watchdog_timer看門狗定時(shí)器功能,確保程序跑飛時(shí)自動(dòng)復(fù)位。 */
//*******************************************************************************************/
//*******************************************************************************************/
#include "STC90.h"
#include < intrins.h >
#define uchar unsigned char
#define uint unsigned int
#define led_port P1
sbit IR_RE = P3^2;
sbit led_r = P1^3;
sbit led_g = P1^4;
sbit led_b = P1^5;
sbit led_wd = P1^7;
sbit K1 =P3^0 ; //增加鍵
sbit K2 =P3^1 ; //減少鍵
sbit BEEP =P3^7 ; //蜂鳴器
uchar temp,temp1;
bit k=0; //紅外解碼判斷標(biāo)志位,為0則為有效信號(hào),為1則為無(wú)效
bit Flag2;
uchar date[4]={0,0,0,0}; //date數(shù)組為存放地址原碼,反碼,數(shù)據(jù)原碼,反碼
uint lade_1,lade_2,lade_3,lade_4;
uint num;
uchar date_ram,ee_temp,ee_temp1;
uchar WDT_NUM=0;
uchar const dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 顯示段碼值01234567
uchar code seg[]={7,6,5,4,3,2,1,0};//分別對(duì)應(yīng)相應(yīng)的數(shù)碼管點(diǎn)亮,即位碼
unsigned long disp_date;
void fade();
void fade1();
/*************************** 看門狗子程序*************************/
void watchdog_timer()
{
if(WDT_NUM==5)
{
WDT_NUM=0;
led_wd=!led_wd;
}
WDT_NUM++;
WDT_CONTR=0x3f;
}
/******************************************************************/
void delay(unsigned int cnt)
{
while(--cnt);
}
/*--------------------------延時(shí)1ms程子程序-----------------------*/
void delay_1ms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=126;y>0;y--);
}
/*--------------------------延時(shí)1ms程子程序-----------------------*/
delay1000()
{
uchar i,j;
i=5;
do{j=95;
do{j--;}
while(j);
i--;
}
while(i);
}
/*---------------------------延時(shí)882us子程序-----------------------*/
delay882()
{
uchar i,j;
i=6;
do{j=71;
do{j--;}
while(j);
i--;
}while(i);
}
/*--------------------------延時(shí)2400us程子程序-----------------------*/
delay2400()
{
uchar i,j;
i=5;
do{j=237;
do{j--;}
while(j);
i--;
}while(i);
}
/**********************************************************************/
/*
void display()
{
uchar i;
for(i=0;i<8;i++)
{
P0=dofly[disp_date%10];//取顯示數(shù)據(jù),段碼
P2=seg[i]; //取位碼
delay_1ms(1);
disp_date/=10;
}
}
*/
/*********************************************************************/
uchar EEPROM_read(uint addr)//EEPROM字節(jié)讀
{
ISP_CONTR=0x83; //系統(tǒng)時(shí)鐘<12M時(shí),對(duì)ISP_CONTR寄存器設(shè)置的值,本電路為11.0592M
ISP_CMD=1; //字節(jié)讀
ISP_ADDRH=(addr&0xff00)>>8;
ISP_ADDRL=addr&0x00ff;
ISP_TRIG=0x46;
ISP_TRIG=0xb9;
_nop_();
_nop_();
return ISP_DATA;
}
//--------------------------------------------------------------------
void EEPROM_write(uint addr,uchar dat)//EEPROM字節(jié)寫(xiě)
{
ISP_CONTR=0x83; //系統(tǒng)時(shí)鐘<12M時(shí),對(duì)ISP_CONTR寄存器設(shè)置的值,本電路為11.0592M
ISP_CMD=2; //字節(jié)編程
ISP_ADDRH=(addr&0xff00)>>8;
ISP_ADDRL=addr&0x00ff;
ISP_DATA=dat;
ISP_TRIG=0x46;
ISP_TRIG=0xb9;
_nop_();
_nop_();
}
//--------------------------------------------------------------------
void EEPROM_ERASE(uint addr)//EEPROM扇區(qū)擦除
{
ISP_CONTR=0x83; //系統(tǒng)時(shí)鐘<12M時(shí),對(duì)ISP_CONTR寄存器設(shè)置的值,本電路為11.0592M
ISP_CMD=3; //扇區(qū)擦除
ISP_ADDRH=(addr&0xff00)>>8;
ISP_ADDRL=addr&0x00ff;
ISP_TRIG=0x46;
ISP_TRIG=0xb9;
_nop_();
_nop_();
}
//**************************************************************
/*----------------------------------------------------------*/
/*-----------------------紅外解碼程序(核心)-----------------*/
/*----------------------------------------------------------*/
void IR_decode()
{
uchar i,j;
while(IR_RE==0);
delay2400();
if(IR_RE==1) //延時(shí)2.4ms后如果是高電平則是新碼
{
delay1000();
delay1000();
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
while(IR_RE==0); //等待地址碼第1位高電平到來(lái)
delay882(); //延時(shí)882us判斷此時(shí)引腳電平
///CY=IR_RE;
if(IR_RE==0)
{
date[i]>>=1;
date[i]=date[i]|0x00;
}
else if(IR_RE==1)
{
delay1000();
date[i]>>=1;
date[i]=date[i]|0x80;
}
} //1位數(shù)據(jù)接收結(jié)束
} //32位二進(jìn)制碼接收結(jié)束
}
}
/*
void LED_PWM()
{
lade_2=num; //384
lade_4=num; //384
while(lade_2!=0&Flag2==1)
{
for(lade_3=512;lade_3>lade_4;lade_3--)
//512
{
led_port=0x00;
delay(1);
}
lade_3=512; //512
lade_4--;
for(lade_1=0;lade_1<lade_2;lade_1++)
{
led_port=0x38; //c7
delay(1);
}
lade_1=0;
lade_2--;
if(temp!=0x0c&Flag2==1)
{
lade_2=0;
}
lade_2=num; //384
lade_4=num; //384
}
}
*/
void calc()
{
EEPROM_read(0x2000);
ee_temp1=ISP_DATA;
ee_temp=ee_temp1&0x0f;
//************************************* 1
/*
if(date[3]==0xff&Flag2==1)
{
if(num>=20)
{
num=num-80;
}
//else num=1;
LED_PWM();
}
if(date[3]==0xfe&Flag2==1)
{
if(num<=500)
{
num=num+80;
}
// else num=511;
LED_PWM();
}
if(ee_temp1==0xfd)
{
led_port=0x00;
watchdog_timer();
}
if(ee_temp1==0xfc)
{
led_port=0x00;
led_r=1;
led_g=1;
led_b=1;
watchdog_timer();
}
*/
//********************************************** 2
if(ee_temp1==0xfb)
{
led_port=0x00;
led_r=1;
watchdog_timer();
}
if(ee_temp1==0xfa)
{
led_port=0x00;
led_g=1;
watchdog_timer();
}
if(ee_temp1==0xf9)
{
led_port=0x00;
led_b=1;
watchdog_timer();
}
if(ee_temp1==0xf8)
{
led_port=0x00;
led_r=1;
led_g=1;
led_b=1;
watchdog_timer();
}
//************************************** 3
if(ee_temp1==0xf7)
{
uint fade_1,fade_2,fade_3,fade_4;
fade_2=448; //384
fade_4=448; //384
while(fade_2!=0&ee_temp==0x07)
{
for(fade_3=512;fade_3>fade_4;fade_3--)
//512
{
led_port=0x10;
delay(1);
}
fade_3=512; //512
fade_4--;
watchdog_timer();
for(fade_1=0;fade_1<fade_2;fade_1++)
{
led_port=0x08;
delay(1);
}
fade_1=0;
fade_2--;
if(ee_temp!=0x07)
{
fade_2=0;
}
watchdog_timer();
fade_2=448; //384
fade_4=448; //384
}
}
if(ee_temp1==0xf6)
{
uint fade_1,fade_2,fade_3,fade_4;
fade_2=448; //384
fade_4=448; //384
while(fade_2!=0&ee_temp==0x06)
{
for(fade_3=512;fade_3>fade_4;fade_3--)
//512
{
led_port=0x20;
delay(1);
}
fade_3=512; //512
fade_4--;
watchdog_timer();
for(fade_1=0;fade_1<fade_2;fade_1++)
{
led_port=0x10;
delay(1);
}
fade_1=0;
fade_2--;
if(ee_temp!=0x06)
{
fade_2=0;
}
watchdog_timer();
fade_2=448; //384
fade_4=448; //384
}
}
if(ee_temp1==0xf5)
{
uint fade_1,fade_2,fade_3,fade_4;
fade_2=448; //384
fade_4=448; //384
while(fade_2!=0&ee_temp==0x05)
{
for(fade_3=512;fade_3>fade_4;fade_3--)
//512
{
led_port=0x08;
delay(1);
}
fade_3=512; //512
fade_4--;
watchdog_timer();
for(fade_1=0;fade_1<fade_2;fade_1++)
{
led_port=0x20;
delay(1);
}
fade_1=0;
fade_2--;
if(ee_temp!=0x05)
{
fade_2=0;
}
watchdog_timer();
fade_2=448; //384
fade_4=448; //384
}
}
if(ee_temp1==0xf4)
{
while(ee_temp==4)
{
led_port=0x00;
led_r=1;
delay_1ms(200);
led_port=0x00;
led_r=1;
led_g=1;
delay_1ms(200);
led_port=0x00;
led_g=1;
delay_1ms(200);
watchdog_timer();
led_port=0x00;
led_g=1;
led_b=1;
delay_1ms(200);
led_port=0x00;
led_b=1;
delay_1ms(200);
led_port=0x00;
led_b=1;
led_r=1;
delay_1ms(200);
watchdog_timer();
}
}
//************************************** 4
if(ee_temp1==0xf3)
{
uint fade_1,fade_2,fade_3,fade_4;
fade_2=416; //384
fade_4=416; //384
while(fade_2!=0&ee_temp==0x03)
{
for(fade_3=512;fade_3>fade_4;fade_3--)
//512
{
led_port=0x10;
delay(1);
}
fade_3=512; //512
fade_4--;
watchdog_timer();
for(fade_1=0;fade_1<fade_2;fade_1++)
{
led_port=0x08;
delay(1);
}
fade_1=0;
fade_2--;
if(ee_temp!=0x03)
{
fade_2=0;
}
watchdog_timer();
fade_2=416; //384
fade_4=416; //384
}
}
if(ee_temp1==0xf2)
{
uint fade_1,fade_2,fade_3,fade_4;
fade_2=384; //384
fade_4=384; //384
while(fade_2!=0&ee_temp==0x02)
{
for(fade_3=512;fade_3>fade_4;fade_3--)
//512
{
led_port=0x20;
delay(1);
}
fade_3=512; //512
fade_4--;
watchdog_timer();
for(fade_1=0;fade_1<fade_2;fade_1++)
{
led_port=0x10;
delay(1);
}
fade_1=0;
fade_2--;
if(ee_temp!=0x02)
{
fade_2=0;
}
watchdog_timer();
fade_2=384; //384
fade_4=384; //384
}
}
if(ee_temp1==0xf1)
{
uint fade_1,fade_2,fade_3,fade_4;
fade_2=348; //384
fade_4=348; //384
while(fade_2!=0&ee_temp==0x01)
{
for(fade_3=512;fade_3>fade_4;fade_3--)
//512
{
led_port=0x08;
delay(1);
}
fade_3=512; //512
fade_4--;
watchdog_timer();
for(fade_1=0;fade_1<fade_2;fade_1++)
{
led_port=0x20;
delay(1);
}
fade_1=0;
fade_2--;
if(ee_temp!=0x01)
{
fade_2=0;
}
watchdog_timer();
fade_2=348; //384
fade_4=348; //384
}
}
if(ee_temp1==0xf0)
{
while(ee_temp==0)
{
led_port=0x00;
led_r=1;
delay_1ms(500);
watchdog_timer();
led_port=0x00;
led_g=1;
delay_1ms(500);
led_port=0x00;
led_b=1;
delay_1ms(500);
watchdog_timer();
}
}
//******************************************** 5
if(ee_temp1==0xef)
{
uint fade_1,fade_2,fade_3,fade_4;
fade_2=384; //384
fade_4=384; //384
while(fade_2!=0&ee_temp==0x0f)
{
for(fade_3=512;fade_3>fade_4;fade_3--)
//512
{
led_port=0x10;
delay(1);
}
fade_3=512; //512
fade_4--;
watchdog_timer();
for(fade_1=0;fade_1<fade_2;fade_1++)
{
led_port=0x08;
delay(1);
}
fade_1=0;
fade_2--;
if(ee_temp!=0x0f)
{
fade_2=0;
}
watchdog_timer();
fade_2=384; //384
fade_4=384; //384
}
}
if(ee_temp1==0xee)
{
uint fade_1,fade_2,fade_3,fade_4;
fade_2=320; //384
fade_4=320; //384
while(fade_2!=0&ee_temp==0x0e)
{
for(fade_3=512;fade_3>fade_4;fade_3--)
//512
{
led_port=0x20;
delay(1);
}
fade_3=512; //512
fade_4--;
watchdog_timer();
for(fade_1=0;fade_1<fade_2;fade_1++)
{
led_port=0x10;
delay(1);
}
fade_1=0;
fade_2--;
if(ee_temp!=0x0e)
{
fade_2=0;
}
watchdog_timer();
fade_2=320; //384
fade_4=320; //384
}
}
if(ee_temp1==0xed)
{
uint fade_1,fade_2,fade_3,fade_4;
fade_2=320; //384
fade_4=320; //384
while(fade_2!=0&ee_temp==0x0d)
{
for(fade_3=512;fade_3>fade_4;fade_3--)
//512
{
led_port=0x08;
delay(1);
}
fade_3=512; //512
fade_4--;
watchdog_timer();
for(fade_1=0;fade_1<fade_2;fade_1++)
{
led_port=0x20;
delay(1);
}
fade_1=0;
fade_2--;
if(ee_temp!=0x0d)
{
fade_2=0;
}
watchdog_timer();
fade_2=320; //384
fade_4=320; //384
}
}
if(ee_temp1==0xec)
fade();
//******************************************* 6
if(ee_temp1==0xeb)
{
led_port=0x00;
led_r=1;
led_g=1;
watchdog_timer();
}
if(ee_temp1==0xea)
{
led_port=0x00;
//led_r=0;
led_g=1;
led_b=1;
watchdog_timer();
}
if(ee_temp1==0xe9)
{
led_port=0x00;
led_r=1;
//led_g=0;
led_b=1;
watchdog_timer();
}
if(ee_temp1==0xe8)
fade1();
}
void fade()
{
// uchar i;
uint fade_1,fade_2,fade_3,fade_4;
fade_2=512;
fade_4=511;
while(fade_2!=0&ee_temp==0x0c)
{
for(fade_3=512;fade_3>fade_4;fade_3--)
{
led_port=0x10;
delay(1);
}
fade_3=512;
fade_4--;
watchdog_timer();
for(fade_1=0;fade_1<fade_2;fade_1++)
{
led_port=0x08;
delay(1);
}
fade_1=0;
fade_2--;
if(ee_temp!=0x0c)
{
fade_2=0;
}
}
watchdog_timer();
fade_2=512;
fade_4=511;
while(fade_2!=0&ee_temp==0x0c)
{
if(ee_temp!=0x0c)
{
fade_2=0;
}
for(fade_3=512;fade_3>fade_4;fade_3--)
{
led_port=0x20;
delay(1);
// watchdog_timer();
}
fade_3=512;
fade_4--;
watchdog_timer();
for(fade_1=0;fade_1<fade_2;fade_1++)
{
led_port=0x10;
delay(1);
// watchdog_timer();
}
fade_1=0;
fade_2--;
}
watchdog_timer();
fade_2=512;
fade_4=511;
while(fade_2!=0&ee_temp==0x0c)
{
if(ee_temp!=0x0c)
{
fade_2=0;
}
for(fade_3=512;fade_3>fade_4;fade_3--)
{
led_port=0x08;
delay(1);
watchdog_timer();
}
fade_3=512;
fade_4--;
watchdog_timer();
for(fade_1=0;fade_1<fade_2;fade_1++)
{
led_port=0x20;
delay(1);
watchdog_timer();
}
fade_1=0;
fade_2--;
}
watchdog_timer();
}
void fade1()
{
// uchar i;
uint fade_1,fade_2,fade_3,fade_4;
fade_2=128;
fade_4=127;
while(fade_2!=0&ee_temp==0x08)
{
for(fade_3=128;fade_3>fade_4;fade_3--)
{
led_port=0x10;
delay(1);
}
fade_3=128;
fade_4--;
for(fade_1=0;fade_1<fade_2;fade_1++)
{
led_port=0x08;
delay(1);
}
fade_1=0;
fade_2--;
if(ee_temp!=0x08)
{
fade_2=0;
}
}
watchdog_timer();
fade_2=128;
fade_4=127;
while(fade_2!=0&ee_temp==0x08)
{
if(ee_temp!=0x08)
{
fade_2=0;
}
for(fade_3=128;fade_3>fade_4;fade_3--)
{
led_port=0x20;
delay(1);
}
fade_3=128;
fade_4--;
for(fade_1=0;fade_1<fade_2;fade_1++)
{
led_port=0x10;
delay(1);
}
fade_1=0;
fade_2--;
}
watchdog_timer();
fade_2=128;
fade_4=127;
while(fade_2!=0&ee_temp==0x08)
{
if(ee_temp!=0x08)
{
fade_2=0;
}
for(fade_3=128;fade_3>fade_4;fade_3--)
{
led_port=0x08;
delay(1);
}
fade_3=128;
fade_4--;
for(fade_1=0;fade_1<fade_2;fade_1++)
{
led_port=0x20;
delay(1);
}
fade_1=0;
fade_2--;
}
watchdog_timer();
}
void init()
{
led_port=0x00;
/*
led_r=1;
delay_1ms(500);
led_port=0x00;
led_g=1;
delay_1ms(500);
led_port=0x00;
led_b=1;
delay_1ms(500);
led_port=0x00;
*/
delay_1ms(2);
WDT_CONTR=0x3f;
delay_1ms(500);
}
//********************************
void main()
{
init();
Flag2=0;
SP=0x60; //堆棧指針
EX0=1; //允許外部中斷0,用于檢測(cè)紅外遙控器按鍵
EA=1;
num=255;
while(1)
{
calc();
}
}
//********************************************************************
/*------------------------外部中斷0程序-------------------------*/
/*------------------主要用于處理紅外遙控鍵值--------------------*/
void int0() interrupt 0
{
uchar i;
Flag2=0; ///////
k=0;
EX0=0; //檢測(cè)到有效信號(hào)關(guān)中斷,防止干擾
for(i=0;i<4;i++)
{
delay1000();
if(IR_RE==1){k=1;} //剛開(kāi)始為9ms的引導(dǎo)碼.
}
led_port=0x00;
if(k==0)
{
IR_decode(); //如果接收到的是有效信號(hào),則調(diào)用解碼程序
if(date[3]>=0xe8)
{
if(date[3]<=0xfb)
{
temp1=date[3];
EEPROM_ERASE(0x2000); //STC_EEROM_0X2000 temp1
EEPROM_write(0x2000,temp1);
EEPROM_read(0x2000);
ee_temp1=ISP_DATA;
ee_temp=ee_temp1&0x0f;
/*
temp=date[3]&0x0f;
EEPROM_ERASE(0x2004); //STC_EEROM_0X2004 temp
EEPROM_write(0x2004,temp);
*/
}
else
{
EEPROM_read(0x2000);
ee_temp1=ISP_DATA;
ee_temp=ee_temp1&0x0f;
}
}
delay2400();
delay2400();
delay2400();
delay_1ms(500);
}
EX0=1; //開(kāi)外部中斷,允許新的遙控按鍵
}
//*********************************************************************
復(fù)制代碼
作者:
騰飛的龍
時(shí)間:
2015-11-13 12:27
好資料謝謝分享。樓主屏蔽的語(yǔ)句是不用片內(nèi)PWM的部分嗎?求不用內(nèi)部PWM的程序謝謝!
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1