|
红外线遥控器控制继电器的程序
#include
#include
#define uchar unsigned char
#define uint unsigned int
#pragma interrupt_handler IceInt:6 中断程序说明
uint bitcnt,data0=0,data1=0;
void ICEInit(void) //T/C1 初始化
{
CLI();
DDRD&=~(1<
PORTD=0XFF;
TIMSK=0X20; //使能捕获中断(PD6)
TCCR1A=0X00; // T/C1时钟与系统相同,使用系统 AVR内部自带 1MHz
TCCR1B=0X81; //使能噪音抑制, 下降沿触发中断
}
void IceInt(void)
{
static uint oldFall;
uint temp,newFall;
newFall=ICR1;
temp=newFall- oldFall; //计算脉冲加间隔的时间
oldFall=newFall;
if(temp>1025 && temp<1225) // "0"信号
{
temp=0;
}
else if (temp>2145 && temp<2345) //"1"信号
{
temp=1;
}
else if (temp>13400 && temp<13600) //header信号
{
bitcnt=0;
data0=0;
data1=0;
return; //返回, 等待下次开始接收
}
else // 干扰信号
{
return;
}
bitcnt++;
if (bitcnt<16) //开始接收前 16 位
{
data0=data0|(uint)temp;
data0=data0<<1;
}
else if (bitcnt==16)
{
data0=data0|(uint)temp;
}
else if (bitcnt<32) //开始接收后 16 位
{
data1=data1|(uint)temp;
data1=data1<<1;
}
else if (bitcnt==32) // 接收完最后一位
{
CLI();
data1=data1|(uint)temp;
if(data1==0X3BD2) //"开关"键的data1值是0X3BD2
{
PORTC=~PORTC;//"开关"变换
}
else
{
PORTC=PORTC;//"开关"不变
}
}
}
//**********************
void main()
{
DDRC=0XFF;//初始化端C口
PORTC=0X00;
PORTC&=~(1<
SREG=0x00; //关闭全局中断
ICEInit();
IceInt();
S_St(); //调用显示
SREG=0x80; //开全局中断
}
//用“S_St(); //调用显示函数”先查出红外线遥控器开关键的值“data1”的值--****,再把值填入if(data1==0X3****) //"开关"键的data1值是****
[ 本帖最后由 pyq208 于 2011-4-13 21:57 编辑 ]
|
|