久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
全彩LED合集-紅外遙控全彩LED控制器制作
[打印本頁]
作者:
jialinx
時間:
2015-9-15 22:05
標題:
全彩LED合集-紅外遙控全彩LED控制器制作
【第八個程序-紅外遙控全彩LED控制器】
原理圖
樂云兄 辛苦了, 來頂一下。
還缺一個亮度加減或者是漸變速度加減功能沒有加進去哦
//////////////////////////////////////
C語言
//////////////////////////////////////
//*******************************************************************************************/
//* 紅外遙控LED R-G-B全彩控制器程序 */
//*遙 控 器:市面上通用24鍵超薄帶單色指示遙控器,功能控制器 FLASH STROBE FADE SMOOTH */
//*單片機型號: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的基礎上增加了EEROM斷電數據記憶功能, */
//* watchdog_timer看門狗定時器功能,確保程序跑飛時自動復位。 */
//*******************************************************************************************/
//*******************************************************************************************/
#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; //紅外解碼判斷標志位,為0則為有效信號,為1則為無效
bit Flag2;
uchar date[4]={0,0,0,0}; //date數組為存放地址原碼,反碼,數據原碼,反碼
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};//分別對應相應的數碼管點亮,即位碼
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);
}
/*--------------------------延時1ms程子程序-----------------------*/
void delay_1ms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=126;y>0;y--);
}
/*--------------------------延時1ms程子程序-----------------------*/
delay1000()
{
uchar i,j;
i=5;
do{j=95;
do{j--;}
while(j);
i--;
}
while(i);
}
/*---------------------------延時882us子程序-----------------------*/
delay882()
{
uchar i,j;
i=6;
do{j=71;
do{j--;}
while(j);
i--;
}while(i);
}
/*--------------------------延時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];//取顯示數據,段碼
P2=seg[i]; //取位碼
delay_1ms(1);
disp_date/=10;
}
}
*/
/*********************************************************************/
uchar EEPROM_read(uint addr)//EEPROM字節讀
{
ISP_CONTR=0x83; //系統時鐘<12M時,對ISP_CONTR寄存器設置的值,本電路為11.0592M
ISP_CMD=1; //字節讀
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字節寫
{
ISP_CONTR=0x83; //系統時鐘<12M時,對ISP_CONTR寄存器設置的值,本電路為11.0592M
ISP_CMD=2; //字節編程
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扇區擦除
{
ISP_CONTR=0x83; //系統時鐘<12M時,對ISP_CONTR寄存器設置的值,本電路為11.0592M
ISP_CMD=3; //扇區擦除
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) //延時2.4ms后如果是高電平則是新碼
{
delay1000();
delay1000();
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
while(IR_RE==0); //等待地址碼第1位高電平到來
delay882(); //延時882us判斷此時引腳電平
///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位數據接收結束
} //32位二進制碼接收結束
}
}
/*
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,用于檢測紅外遙控器按鍵
EA=1;
num=255;
while(1)
{
calc();
}
}
//********************************************************************
/*------------------------外部中斷0程序-------------------------*/
/*------------------主要用于處理紅外遙控鍵值--------------------*/
void int0() interrupt 0
{
uchar i;
Flag2=0; ///////
k=0;
EX0=0; //檢測到有效信號關中斷,防止干擾
for(i=0;i<4;i++)
{
delay1000();
if(IR_RE==1){k=1;} //剛開始為9ms的引導碼.
}
led_port=0x00;
if(k==0)
{
IR_decode(); //如果接收到的是有效信號,則調用解碼程序
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; //開外部中斷,允許新的遙控按鍵
}
//*********************************************************************
復制代碼
作者:
騰飛的龍
時間:
2015-11-13 12:27
好資料謝謝分享。樓主屏蔽的語句是不用片內PWM的部分嗎?求不用內部PWM的程序謝謝!
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲3p
|
国产伦精品一区二区三区高清
|
久热国产精品
|
日韩有码一区
|
99精品久久久国产一区二区三
|
天天操天天操
|
日日操日日干
|
亚洲一区二区三区视频
|
久艹网站
|
欧美一区二区三区在线观看
|
精品一区二区久久久久久久网精
|
日韩有码一区二区三区
|
国产真实乱对白精彩久久小说
|
青青草一区二区三区
|
国产91丝袜在线熟
|
亚洲国产中文字幕
|
九九九视频在线观看
|
精品一区二区三区免费视频
|
天堂一区二区三区
|
久久99成人
|
久久久999免费视频 999久久久久久久久6666
|
狠狠干美女
|
日韩成人在线网站
|
在线a视频
|
日韩一区二区视频
|
欧美高清成人
|
天天操夜夜爽
|
日韩欧美理论片
|
国产视频久久久
|
国产毛片视频
|
婷婷99
|
99精品久久
|
色99视频
|
欧美不卡在线
|
高清不卡毛片
|
日韩精品视频一区二区三区
|
欧美精品一区二区在线观看
|
国产网站在线免费观看
|
99热在线播放
|
99热这里有精品
|
97色在线观看免费视频
|