红外检测(电视遥控器)

2020-02-05 09:32发布

刚刚捣鼓出来的程序 部分子程序如下 已经试验成功了  晒晒程序
void delay()
        {;;}//微妙延时。
void delayXms(uchar x)         
{
uchar i;
while(x--)
{
  for(i=250;i>0;i--)
  {
   _nop_();
   _nop_();
   _nop_();
   _nop_();
  }
}
}//毫秒延时
/*void start ()
{
SDA=1;
delay();
SCL=1;
delay();
SDA=0;
delay();
}//起始信号
void stop ()
{
SDA=0;
  delay();
SCL=1;
  delay();
SDA=1;
  delay();
}//停止信号
void init()
{
SCL=1;
  delay();
SDA=1;
  delay();
}//初始化,开始SCL和SDA都为高电平且保持一定的时间。//没有必要。
void responds()
{
uchar i;
i=0;
SCL=1;
delay();
while((SDA==1)&&(i<250))
i++;
SCL=0;
  delay();
}//应答信号
void write_dat (uchar dat)   //写一个字节.
{                                                                //主器件发送起始命令和从器件地址信息(R/W 位)置零给从器件在从器件产生,                                                                //应答信号后主器件发送CAT24WC01/02/04/08/16 的字节地址.
uchar i,temp;
temp=dat;
for(i=0;i<8;i++)//主器件在收到从器件的另一个应答信号后再发送数据到被寻址的存储单元.
{
  temp=temp<<1;
  SCL=0;
  delay();
  SDA=CY;
   delay();
  SCL=1;
   delay();
}
  SCL=0;
   delay();
  SDA=1;
  delay();
}
void write(uchar date,uchar add)   // 写一个字节dat到地址add,此方式为字节些只能写一个字节。
{
start();//起始信号,
write_dat(0xa0);//和从器件地址信息(R/W位置零)。
responds();//主器件响应从器件响应从器件产生的应答信号。
write_dat(add);//主器件发送CAT24WC01/02/04/08/16的字节地址。
responds();//主器件响应从器件响应从器件产生的应答信号。
write_dat(date);//主器件向CAT24WC01/02/04/08/16发送字节数据到被寻址的地址单元。
responds();//主器件响应从器件响应从器件产生的应答信号。
stop();
}
uchar read_dat ()    //读一个字节,为随机读的方式。
{
  uchar i,k;
  SCL=0;
  delay();
  SDA=1;
   delay();
for (i=0;i<8;i++)
{
  
  SCL=1;
   delay();
  k=(k<<1)|SDA;
  delay();
  SCL=0;
  delay();
}
return k;//读一个字节.从函数中返回一个返回值
}
uchar read_add (uchar add)   //从地址add中读取一个字节
{
uchar date;
start();
write_dat(0xa0);
responds();
write_dat(add);
responds();
start();
write_dat(0xa1);
responds();
date=read_dat();
delay();
stop();
return date;
}*/


相信即使对红外检测有点了解的 都会知道这个程序了价值了,嘿嘿
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。