在这个程序里有一条我不知道什么意思,看了好几天也没搞懂,请帮我解一下:Rem_Code[j]++;
; 效果:按手持式4键发射器上的任意按键,程序能解码出来,并在发光管上显示 ;======= 模拟 pt2272 接收========================= ************************************************/
#include"AT89x52.h" //#include"global.h" #include"intrins.h" #include"51hei.H"
#define uchar unsigned char #define uint unsigned int
uchar Rem_Code[3]; uint TimeCount; sbit Get_Rem=P3^2;
/* //延时函数 void Delay100us(void) { uchar i; for(i=0;i<55;i++) { _nop_(); } } */
void delay8(uint t) { while(--t); }
void Delay100us(void) { delay8(13); //8-18 }
//因为他的格式是00表示"0"11表示"1"01表示"F"所以我们要把12位乘以2等于24位刚好是3个字节 //第一二个字节是地址码,第三个字节是数据码 //发射芯片采用的是PT2262芯片用4.7M的震荡电阻315M发射 //遥控我们全部默认地址码是 FFFFFFFF 单片机解码出来就是0x55 0x55 //遥控处理函数 void Remote_Process(void) { uchar i,j,Count=0; Delay100us(); if(TimeCount>0)//当按键按下释放后该值不在赋值就同通过递减直到该值等于0 {//等于0后表示按键释放 TimeCount--; } if(Get_Rem==0)//如果有低电平就进入解码 { for(Count=0;Count<100;Count++)//判断12毫秒左右的引导码 { Delay100us();//100us*100=10ms if(Get_Rem==1)//如果在延时10毫秒期间有高电平出现就是干扰信号退出解码 { return; } } while(Get_Rem==0);//等待低电平结束 for(j=0;j<3;j++)//8位地址码加4位数据码 { for(i=0;i<8;i++) { Count=0; do { Delay100us(); Count++; if(Count>20)//如果在大于2毫秒高电平还没有结束认为是干扰退出解码 {//理论上是1.2毫秒,我们2毫秒留有余量,防止遥控批量中的误差 return; } }while(Get_Rem==1);//计算高平时间并等待结束 Count=0; do { Delay100us(); Count++; if(Count>20)//如果在大于2毫秒低平还没有结束认为是干扰退出解码 { return; } }while(Get_Rem==0);//计算低电平时间并等待结束 Rem_Code[j]<<=1;//数据从高位开始接收所以每次向左移一位 if(Count<8)//如果低电平时间小于800毫秒认为该位为1 { Rem_Code[j]++; } } } //huqin ACC=Rem_Code[2]; if(ACC==0xc0) P0=0xef; if(ACC==0x30) P0=0xdf; if(ACC==0x0c) P0=0xbf; if(ACC==0x03) P0=0x7f;
if(TimeCount==0)//为0表示是新的一次按下对其进行处理 {//如过该值大于0表示已经按下不在处理,保证按下一次只做一次处理 // if((Rem_Code[0]==Addr_Code_H)&&(Rem_Code[0]==Addr_Code_L)) // { // if(Rem_Code[2]==Key_A)//如果数据与A键的值相等表示A键按下对其处理 // {//试验用A键来控制继电器的开关 // Com_Relay;//继电器取反 // Nokia3310();//显示继电器的状态 // Bz_Out();//蜂鸣器响一声 // } // } //P2_2=0; } TimeCount=1000;//按键按下标志 } }
void main() { AUXR=0x01; P1_4=0; guandz(); guanled();
while(1) { Remote_Process();//遥控处理 }
} |