英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流
标题:
一个HT6221码的接收程序
[打印本页]
作者:
winnie
时间:
2009-4-25 15:22
标题:
一个HT6221码的接收程序
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/***************************************************************************************************************************
公司名称:
模块名称:rf.c
功 能 HT6221码接收模块 芯片型号:HT6221
说 明:6221码的动态接收
程序设计:FANZENGYONG
设计时间:2003.11.22
版 本 号: 20031122
**************************************************************************************************************************/
#ifdef HT6221
#define RF_CODE_HEAD_HIGH 55 //6221头码宽度上限为55
#define RF_CODE_HEAD_LOW 48 //6221头码宽度上限为48
#define RF_CODE_1 6 //6221码"1"宽度为6
#define RF_CODE_NUMBER 4 //6221码的个数为4
//#else
#endif
unsigned char rf_code_time; //码宽度的时间
unsigned char rf_loop; //一个数据码的移位次数
unsigned char rf_code_count; //码的个数
unsigned char rf_code_value[RF_CODE_NUMBER];//*rf_code_value //存放码的值
unsigned char key_value; //按键的值
bit flag_rf_start; //遥控码的第一个电平跳变
bit flag_rf_head; //引导码接收到标志
bit flag_key; //键按下标志
#define UCHAR unsigned char
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
rf()
{//UCHAR countrf;
//rf_code_time=TMR0;
//TMR0=0;
//CCP1IF=0; //ccp电平中断
/////////////////////////////////////////////////////////////////////////////
if(flag_rf_start==0)
{flag_rf_start=1; return;}
else{
/////////////////////////////////////////////////////////////////////////////
if(flag_rf_head==0)
{/*if((rf_code_time>40)&&(rf_code_time<48)) //按键按住不松的处理
{flag_rf_start=flag_rf_head=0;
if(key_value==0x0c||key_value==0x17||key_value==0)
{countrf+=1;
if(countrf>=3)
{countrf=0;
flag_key=1; //按键按住不松的处理
}
}
else countrf=0;
}*/ //按键按住不松的处理
//else{countrf=0;
if((rf_code_time>=RF_CODE_HEAD_LOW)&&(rf_code_time<RF_CODE_HEAD_HIGH))<RF_CODE_HEAD_HIGH))
flag_rf_head=1;
return;
//}
}
///////////////////////////////////////////////////////////////////////////
else{if(rf_code_time>RF_CODE_1)
rf_code_value[rf_code_count]|=0b10000000;
else rf_code_value[rf_code_count]&=0b01111111;
rf_loop+=1;
///////////////////////////////////////////////////////////////////////////////
if(rf_loop>=8)
{rf_loop=0;
rf_code_count+=1;
if(rf_code_count>=RF_CODE_NUMBER)
{flag_rf_start=flag_rf_head=0;
rf_code_count=0;
//key_value=rf_code_value[2]; //6221的第三个码存放键值
//bitdata0=rf_code_value[0]; //6221的低8位地址码
//bitdata1=rf_code_value[1]; //6221的高8位地址码
//bitdata=rf_code_value[3]; //6221的第三位数据码的反码
//flag_key=1;
}
}
else rf_code_value[rf_code_count]=rf_code_value[rf_code_count]>>1; //循环右移
///////////////////////////////////////////////////////////////////////////////
}
/////////////////////////////////////////////////////////////////////////////
}
/////////////////////////////////////////////////////////////////////////////
}
欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/)
Powered by Discuz! X3.2