这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 遥控解码

共40条 2/4 1 2 3 4 跳转至
助工
2015-03-14 22:18:05     打赏
11楼

进来学习,早就该了解这些,本人很懒


菜鸟
2015-03-14 22:38:33     打赏
12楼
串口反馈数据是单片机调试最便捷的方式。

菜鸟
2015-03-30 17:14:05     打赏
13楼
不错的方法; 

专家
2015-03-30 21:13:04     打赏
14楼
呵呵呵呵,回复回复,学习学习,谢谢谢谢!

助工
2015-03-31 09:04:25     打赏
15楼
谢谢楼主分享

助工
2015-03-31 09:06:25     打赏
16楼
有一个疑问就是搂住解码的过程应该挺复杂的吧?能不能把解码过程给出来一个

专家
2015-04-02 15:40:34     打赏
17楼
学习一下,长见识。

助工
2015-04-06 21:14:27     打赏
18楼
看看

院士
2015-04-13 13:47:30     打赏
19楼
#include <reg52.h>




#define c(x) (x*110592/120000)


sbit Ir_Pin = P3^5;


unsigned char Ir_Buf[4]; //用于保存解码结果




// UART初始化
// 波特率:9600
void uart_init(void)
{
    unsigned char u;


    ET1=0;


    TMOD = 0x21;        // 定时器1工作在方式2(自动重装)
    SCON = 0x50;        // 10位uart


    TH1 = 0xFD;
    TL1 = 0xFD;


    u = SBUF;
    TR1 = 1;
}


// 获取低电平时间
unsigned int Ir_Get_Low()
{
TL0 = 0;
TH0 = 0;
TR0 = 1;
while (!Ir_Pin && (TH0&0x80)==0);  
              
TR0 = 0;           
return (TH0 * 256 + TL0);
}


// 获取高电平时间
unsigned int Ir_Get_High()
{
TL0 = 0;
TH0 = 0;
TR0 = 1;
while (Ir_Pin && (TH0&0x80)==0);


TR0 = 0;
return (TH0 * 256 + TL0);
}




main()
{
unsigned int temp;
char i,j;


uart_init();

while (1)
{
while (Ir_Pin);


temp = Ir_Get_Low();
if (temp < c(8500) || temp > c(9500))  //引导脉冲低电平9000
continue;
temp = Ir_Get_High();
if (temp < c(4000) || temp > c(5000))  //引导脉冲高电平4500
continue;


for (i=0; i<4; i++) //4个字节
{
for (j=0; j<8; j++) //每个字节8位
{
temp = Ir_Get_Low();
if(temp < c(200) || temp > c(800))
continue;


temp = Ir_Get_High();
if(temp < c(200) || temp > c(2000))
continue;


Ir_Buf[i] >>= 1;
if(temp > c(1120)) 
Ir_Buf[i]|=0x80;
}
}


SBUF = Ir_Buf[2]; // 返回键码
   while (TI == 0);
        TI = 0;
}
}

 


菜鸟
2015-04-14 23:04:40     打赏
20楼

跟高手学习一下。


共40条 2/4 1 2 3 4 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]