title
收藏本站
联系站长
关于本站
首页 信息发布 产品宣传 论坛交流 学习文章 技术人生 项目源码 技术资料 人才收录
 今天是: 2010年9月11日 星期 六
欢迎光临!单片机群号:25930265 71062262 21829895 64584393 26583231(只限加一群)  
 当前位置: 欢迎话题互动专区 --> 非技术专版 --> 单片机技术生活
 求助!PIC16F630模拟2272  
1111
昵称: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--);
  }
  
  
2010-07-01 16:01:58
资料 邮箱
登录之后才能发表新的讨论或者回复
本网站部分资料转自网上,如有侵权请来信告明,我们会尽快删除  | 网站地图
Copyright @ 2007-2010 深圳单片机交流网.版权所有
网站创办者:詹长亮,周发辉,李林盛
网站支持:zcl843@163.com QQ:380476830 13723787271詹长亮