标题: [讨论]学习型遥控器的方案程序讨论 [打印本页]

作者: 逍遥剑2012    时间: 2012-3-13 00:10
标题: [讨论]学习型遥控器的方案程序讨论

我最近在研究用51做一个学习型遥控器,参考了网上的一些程序,只是这个程序只是用于学习单个按键的,而且还不是很稳定,我想做一个能够学习多个按键的遥控器,不过我刚开始学单片机不久,对于网上的那个程序还不能完全看出究竟有哪些不足,也不知道如何在它的基础上将遥控代码存进AT24C02等系列的存储器里面,希望有相同兴趣爱好的或者之前有过研究的人能够指点下,感激不尽,若有较完善的程序代码的话,那就感激涕零了。

/********学习型遥控器程序*********/
#include<reg52.h>
#include<intrins.h>   //延时函数
#define uchar unsigned char
#define uint unsigned int
sbit studylamp=P1^6; //学习指示灯
sbit lamp=P1^7; //发射指示灯
sbit studykey=P3^3; //学习键
sbit remotein=P3^2; //遥控信号输入口
sbit remoteout=P3^5; //遥控信号输出口
sbit txkey=P3^0; //发射键
uint i,j,m=2040,n,k,s;
uchar idata remotedata[206]; //存脉冲宽度数据用
uint head; //存起始位用
uint remdata; //
/****一毫秒延时程序****/
delay1ms(uint t)
{
  for(i=0;i<t;i++)
   for(j=0;j<120;j++)
  ;
}
/****初始化程序****/
clearmen()
{
  studylamp=1;//关学习指示灯
  lamp=1;  //关发射指示灯
  remoteout=0; //关遥控输出
  remotein=1;  //
  for(i=0;i<206;i++)
   {remotedata=0x00;}  //清内存
  IE=0x00;
  IP=0x01;
  TMOD=0x22;//八位自动重装模式
  PCON=0x00;
  TH1=0xf3;//40KHz初值
  TL1=0xf3;
  IT1=1;//脉冲延跳变模式
  EX1=1; //外中断允许
  EA=1; //开总中断
}
/*****键功能函数****/
keywork()
{
  if (txkey==0)
    {while(txkey==0);//等待键释放
      ET1=1;
      TR1=1;//发起始位
      for(i=head;i>0;i--){;}
    remoteout=0;
    ET1=0;
    TR1=0;
    n=0;
    while(1)
    { if(remotedata[n]==0)
      {delay1ms(10);break;} //数据为0结束
      for(i=remotedata[n];i>0;i--)
        {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
      lamp=~lamp;
      n++;//偶地址不发送
      ET1=1;
      TR1=1;//奇地址发送调制脉冲
       for(i=remotedata[n];i>0;i--){;}
      remoteout=0;
      ET1=0;
      TR1=0;
      n++; 
    } 
  } 
}
/******主函数****/
main()
{
  clearmen();
  while(1)
  {
   keywork();
  }
 
}
/****40KHz载波发生函数*****/
 void time_intt(void)interrupt 3
{
remoteout=~remoteout;
}
/*******学习函数*****/
//外中断1
void intt1(void)interrupt 2

  ET1=0;TR1=0;EA=0;EX0=0;EX1=0;
  head=0;studylamp=0;lamp=1;
  while(studykey==0);//等待键释放
 
  while(remotein==1);//等待遥控码输入
  head=0;//读入起始位
  while(remotein==0)
  {_nop_();_nop_();_nop_();_nop_();_nop_();
   _nop_();_nop_();_nop_();_nop_();_nop_();
   _nop_();_nop_();_nop_();_nop_();_nop_();
   head++;
  }
  head=head-1;
 n=0;remdata=0x00;
 
 while(1)
  {
   while(remotein==1)
   {_nop_();_nop_();_nop_();_nop_();_nop_();
   _nop_();_nop_();_nop_();_nop_();_nop_();
   _nop_();_nop_();_nop_();_nop_();_nop_();remdata++;
   }

if(remdata>m) //高电平大于5毫秒退出
  {remotedata[n]=0x00;EX1=1;EA=1; goto end;}
  remotedata[n]=remdata;n++;//存高电平脉宽数据
  remdata=0x00;//脉宽计数器清零
  while(remotein==0)
  {_nop_();_nop_();_nop_();_nop_();_nop_();
   _nop_();_nop_();_nop_();_nop_();_nop_();
   _nop_();_nop_();_nop_();_nop_();_nop_();
  remdata++;
  }//低电平计数
  remotedata[n]=remdata;
  n++;
  remdata=0x00;//存低电平脉宽数据
 }
 
end:lamp=0;studylamp=1;
  
}

 

 


作者: 腾飞的龙    时间: 2016-8-24 12:14
我也在折腾这货啊,希望有高手指点谜经




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1