 |
| 昵称:wml88092 |
| 级别:小兵 |
| 贡献值:21 |
| 经验值:0 |
给他留言 |
| 来自:-- -- |
|
本人用16F630写了一个无线遥控解码程序,因为水平有限,地址码经学习后已经解码成功,但是不知道数据码怎样编写,望大家多多帮忙,多多指教!谢谢! #include #define uint unsigned int #define uchar unsigned char #define TIME0 25 #define TIME1 100 #define TIME2 110 #define TIME3 200 uchar time0,time1; uchar testbyte; uchar byteD[]={0,0,0}; uchar byteB[]={0,0,0}; uchar byteC[]={0,0,0}; void readEE(); void writeEE(); void getCode(); void led(); void delay(uint z); void main() { TRISC=0b00000011; TRISA=0b00001000; OPTION=0b11000001; PORTA=0; PORTC=0; TMR0=0; readEE(); while(1) { if(RC0==0); //按下学习按键 { delay(5); //去抖 if(RC0==0) //再次检测 { NOP(); NOP(); while(RC0==0); //等待按键弹起 testbyte|=0b01000001; //学习模式标志 RA0=1; //LED指示进入学习模式 } } if(RC1==0) { delay(5); if(RC1==0) getCode(); } } } void getCode() { uchar i,j; for(i=0;i =TIME2)&&(time0 =TIME0)&&(time1 { byteB[i]=(byteB[i] =TIME2)&&(time1 =TIME0)&&(time0 { byteB[i]=(byteB[i]<<1)&0b11111110; } } } } if((testbyte&0b01000001)==0b01000001) { testbyte=0; //清除学习模式标志 writeEE(); //将接收到的编码写进EEPROM RA0=0; //灯灭,指示完成学习 } else { if((byteB[0]==byteD[0])||(byteB[1]==byteD[1])||(byteB[2]==byteD[2])) { led(); //收到正确的编码,灯闪2次 } } } void readEE() //读EEPROM { uchar i; for(i=0;i<3;i++) { EEADR=i; RD=1; NOP(); NOP(); byteD[i]=EEDATA; } } void writeEE() //写EEPROM { uchar i; for(i=0;i 0;y--); } |