发新帖本帖赏金 1.00元(功能说明)我要提问
返回列表
打印

红外遥控C51解码方法及程序_连载(原创)

[复制链接]
楼主: oldzhang
手机看帖
扫描二维码
随时随地手机跟帖
21
oldzhang|  楼主 | 2013-7-17 00:19 | 只看该作者 回帖奖励 |倒序浏览
本帖最后由 oldzhang 于 2013-7-18 08:30 编辑

由于PHILIPS红外遥控码的宽度只有两种,宽度相差刚好一倍,软件测量脉冲宽度就可以用8位计数器实现,调节脉冲宽度识别时基的大小,可以使得短的脉冲宽度和长的脉冲宽度刚好在128的两边,就可以用128来判断长、短脉冲,这样编程会方便的多。
附:
PHILIPS格式红外遥控编码脉冲宽度的识别工具软件。

yk_read_philips.rar

714 Bytes

使用特权

评论回复
22
wsnsyy| | 2013-7-17 10:06 | 只看该作者
MARK,學習中

使用特权

评论回复
23
outstanding| | 2013-7-17 14:17 | 只看该作者
顶。。。。。。。。。。。

使用特权

评论回复
24
oldzhang|  楼主 | 2013-7-17 17:27 | 只看该作者
本帖最后由 oldzhang 于 2013-7-17 19:25 编辑

用这个工具读SAA3010遥控器的编码如下:
其中F0代表低电平,后面是一个字节的低电平长度。
FF代表高电平,后面是一个字节的高电平长度,长度00代表溢出了。
这是我把tt的值设为18后测量的脉冲宽度数据,调节tt的值实际上是调节了延时单元的延时时间:
也就是这句的时间,这个值愈大,延时单元的时基越长。
for(t=tt;t!=0;t--);

#define tt 18
F0 70 FF 6A F0 6F FF 6A F0 DC FF 6B F0 6F FF 6A F0 6F FF 6B F0 6E FF 6A
F0 70 FF 6A F0 6F FF 6A F0 6F FF 6A F0 6F FF 6A F0 6F FF 6B F0 6E FF D9
F0 6D FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00
FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00

使用特权

评论回复
25
oldzhang|  楼主 | 2013-7-17 19:26 | 只看该作者
今天有点忙,抽空改个tt再测试一下

使用特权

评论回复
26
oldzhang|  楼主 | 2013-7-18 08:00 | 只看该作者
#define tt 24
F0 58 FF 52 F0 AB FF 55 F0 56 FF 52 F0 58 FF 51 F0 56 FF 54 F0 57 FF 53
F0 55 FF 54 F0 56 FF 53 F0 58 FF 52 F0 55 FF 54 F0 57 FF 52 F0 56 FF A8
F0 58 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00
FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00
FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 97
F0 55 FF 54 F0 A7 FF 59 F0 52 FF 56 F0 55 FF 56 F0 51 FF 58 F0 52 FF 57
F0 53 FF 55 F0 53 FF 56 F0 54 FF 56 F0 52 FF 58 F0 52 FF 57 F0 52 FF AC
F0 54 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00
FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00

可以看到,不但测量到了第一次的编码,还有重复发的编码,一般红外遥控器要发3次。

使用特权

评论回复
27
oldzhang|  楼主 | 2013-7-18 08:36 | 只看该作者
终于完成了SAA3010红外遥控器(PHILIPS格式)的解码C51程序,贴上来供有用的朋友下载。
经过测量和汇编写的程序的编码完全一致:
        DB      00H          ;0
        DB      01H          ;1
        DB      02H          ;2
        DB      03H          ;3
        DB      04H          ;4
        DB      05H          ;5
        DB      06H          ;6
        DB      07H          ;7
        DB      08H          ;8
        DB      09H          ;9
        DB      0CH          ;开/关
        DB      0DH          ;静音
        DB      0AH          ;单/双
        DB      1EH          ;搜索
        DB      20H          ;节目+
        DB      21H          ;节目-
        DB      2BH          ;微调+
        DB      2CH          ;微调-
        DB      10H          ;音量+
        DB      11H          ;音量-
        DB      29H          ;存储
        DB      0EH          ;爱好
        DB      0FH          ;屏幕
        DB      26H          ;定时
        DB      1CH          ;对比+
        DB      1DH          ;对比-
        DB      14H          ;色彩+
        DB      15H          ;色彩-
        DB      12H          ;量度+
        DB      13H          ;量度-
        DB      38H          ;AV
        DB      3FH          ;TV

yk_Philips.rar

846 Bytes

使用特权

评论回复
28
oldzhang|  楼主 | 2013-7-18 08:38 | 只看该作者
        for(i=20;i!=0;i--)
        {
                x<<=1;
                if(IFda==0)        //采用每个周期移位2次
                {
                        for(j=1;j!=0;j++) {for(t=tts;t!=0;t--); if(IFda==1) break;};
                        if(j&0x80) x<<=1;  //长低电平增加一次移位         
                }
                if(IFda==1)
                {
                        for(j=1;j!=0;j++) {for(t=tts;t!=0;t--); if(IFda==0) break;};
                        if(j&0x80) {x<<=1; x|=1;}; //长低电平增加一次移位
                        if(j==0)   break;  //查到长高电平,结束退出20次for循环       
                }
        }

这是程序的核心部分

使用特权

评论回复
29
oldzhang|  楼主 | 2013-7-18 18:45 | 只看该作者
感谢STC12C4052单片机:
我的带红外接收头的单片机,是一个项目的系统板,除了单片机,还有MAX232,74HC240,SN75174,TC4427*2,等,以及红外接收头。
今天到实验室,顺手拿了一个和5v、20A电源长的一样的AC-DC开关电源,接上电源线,连好计算机,点击STC的ISP的下载,插220v插头,
发现STC12C4052AD冒烟,赶紧拔下220v插头。
检查发现12C4052AD被烧得背部鼓包了,再一检查,原来我顺手拿的长得像5v、20A电源长的像AC-DC开关电源的不是5v输出,是300v、0.7A。
我想这下完了,板子上的片子都烧了吧,可能连计算机RS232串口都烧了吧。
抱着侥幸心理,把背部鼓包的STC12C4052AD换了个新的,换好5v正确的电源,重新下载,正常!
谢天谢地,只烧了那片背部鼓包的12C4052AD,保护了其他芯片都好着呢。
这个STC12C4052AD大有牺牲我一人,保护大家伙的英雄气概。
再次感谢STC单片机的过压保护措施!

使用特权

评论回复
30
autopccopy| | 2013-7-18 19:23 | 只看该作者
很神奇,300v,什么都烧阿,x x

使用特权

评论回复
31
oldzhang|  楼主 | 2013-7-22 17:22 | 只看该作者
是因为这里的300v,限流到0.7A了吧

使用特权

评论回复
32
oldzhang|  楼主 | 2013-7-23 11:04 | 只看该作者
昨晚把两种红外遥控的程序用在了产品中,调试成功。通过#define #ifdifne,#else,选择编译,选择两种遥控器,最后选(PHILIPS格式)SAA3010,和一款淘宝上的NEC格式的很扁的遥控器

使用特权

评论回复
33
氤氲小茶| | 2013-7-23 11:06 | 只看该作者
我来看看了啊!嘿嘿

使用特权

评论回复
34
refee| | 2013-7-27 17:08 | 只看该作者
老张 该结贴散分罗 ;P

使用特权

评论回复
35
oldzhang|  楼主 | 2013-8-3 11:09 | 只看该作者
结题了
这两天还玩了无线遥控,就是键少点,好像最多12个键,但是按着手感超好,估计以后用它

无线遥控器.jpg (6.96 KB )

无线遥控器.jpg

使用特权

评论回复
36
xlhtracy| | 2013-9-2 15:21 | 只看该作者

使用特权

评论回复
37
79xiaozaizai| | 2013-9-2 16:11 | 只看该作者
路过看看

使用特权

评论回复
38
Regsen| | 2013-9-4 15:44 | 只看该作者
顶楼主。先看了,有用来讨教。谢谢楼主

使用特权

评论回复
39
xyysfh| | 2013-9-10 10:38 | 只看该作者
MARK一下

使用特权

评论回复
40
discover568| | 2013-10-7 19:58 | 只看该作者
PHILIPS的程序下载了怎么提示压缩文件错误,请发我一份可以吗?多谢了先,409591164@qq.com

使用特权

评论回复
发新帖 本帖赏金 1.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则