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

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

[复制链接]
11003|54
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
oldzhang|  楼主 | 2013-7-14 10:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 oldzhang 于 2013-7-18 07:56 编辑

偶得一很薄的红外遥控,想解码,放假在家,又没有示波器,只有STC12单片机板,板上P3.3有红外接收头。
把十几年前用汇编写的解码程序拿出来看,想改为C51,当时用的万利的仿真机,晶体6MHZ,单片机为12机器周期的AT89C51,现在是STC12C4052,单周期,当时的软件延时方法,现在的STC51单片机用不成了。
附件中是2000年9月用汇编写的三种红外遥控的解码程序,在南京万利ME5103仿真机上调试通过的,其中的DE00H是万利仿真机的显示程序入口。
当年就发现红外遥控有两种编码:一种为东芝、康佳等用的高电平宽度不同代表0和1,现在知道叫PWM编码:Pulse Width Modulatoin 编码,是NEC红外遥控编码;
另一种为SAA3010遥控器用的,上升沿和下降沿区分0和1的曼彻斯特编码,当时就查到是PHILIPS编码,现在还有一个名词为PPM编码:Pulse Phase Modulation编码,也叫PHILIPS红外遥控编码。

把自己没有示波器,用单片机和计算机进行红外遥控解码的过程、以及为解码编写的工具连载论坛。

后面陆续还有:
C51定时器测量红外遥控脉冲宽度的工具软件;
C51软件测试NEC格式红外遥控脉冲宽度软件;
C51红外遥控NEC编码格式解码程序;
C51软件测试PHILPS格式红外遥控脉冲宽度软件;
C51红外遥控PHILIPS格式解码程序。


KONKA.rar

808 Bytes

TOSHIBA.rar

499 Bytes

SAA3010T.rar

1.39 KB

打赏榜单

lxa0 打赏了 1.00 元 2020-09-17

评分
参与人数 1威望 +12 收起 理由
xlhtracy + 12 赞一个!

相关帖子

沙发
long870912| | 2013-7-14 10:20 | 只看该作者
路过看看!

使用特权

评论回复
板凳
oldzhang|  楼主 | 2013-7-14 11:00 | 只看该作者
本帖最后由 oldzhang 于 2013-7-14 11:56 编辑

新的STC12系列单片机为单周期指令,过去的软件延时用不成了,我想,第一步先查出这个薄遥控的编码规律,我就想先编写一个软件,测试一下红外遥控编码的高电平和低电平的长度,用定时器测量,定时器测量出来是准确的。
附件里面的程序yk_read_imes.c就是用定时器测量脉冲宽的的程序:我用F0表示低电平,后面跟着是两个字节的时间,用FF表示高电平,后面跟着的是两个字节的高电平时间。
因为红外遥控不发射的时候,是高电平,在高电平测试时加了TF0==1的判断,判断是否结束。
程序的最后是定时器测量的结果,第一个低电平时间0x2041,我的晶体是11.0592MHZ,我计算了一下,刚好是9ms,接下来的高电平时间0X1021,刚好是9ms的一半4.5ms.后面很容易区分高低电平的长度,看结果,显然是NEC编码。也就是PWM码,只要从4.5ms高电平以后开始,一高一低代表1位,取32位即可,高电平短的为0,高电平宽的为1,一般遥控器的遥控码都是一次发3组。
定时器测量的脉冲长度,F0表0时间,FF表1时间
F0 20 41 FF 10 21 F0 01 FA FF 02 0C F0 01 EF FF 02 41 F0 01 E0 FF 02 07
F0 02 1D FF 02 16 F0 01 ED FF 02 2D F0 01 ED FF 02 14 F0 02 06 FF 02 15
F0 01 E2 FF 02 23 F0 01 F8 FF 06 18 F0 02 07 FF 06 0F F0 02 1F FF 06 07
F0 01 FF FF 06 12 F0 02 02 FF 06 10 F0 02 16 FF 06 10 F0 02 04 FF 06 0E
F0 01 00 FF 06 11 F0 02 15 FF 02 05 F0 01 F6 FF 06 17 F0 02 17 FF 06 12
F0 02 02 FF 01 EF F0 02 28 FF 06 14 F0 01 00 FF 02 02 F0 02 1E FF 02 01
F0 02 03 FF 02 20 F0 01 F8 FF 06 0F F0 02 06 FF 02 18 F0 02 08 FF 02 0E
F0 02 0C FF 06 07 F0 02 0B FF 01 F8 F0 02 23 FF 06 04 F0 02 11 FF 06 05
F0 02 03 FF 06 08 F0 02 2C FF 8E 7B F0 20 3C FF 08 13 F0 02 07 FF 00 02

yk_read_times.rar

866 Bytes

使用特权

评论回复
地板
09电气| | 2013-7-14 11:08 | 只看该作者
简单的延时函数速度是以前的五倍。所以以前的延时函数参数扩大五倍就行。

使用特权

评论回复
5
oldzhang|  楼主 | 2013-7-14 11:23 | 只看该作者
本帖最后由 oldzhang 于 2013-7-14 11:44 编辑

下来是如何解码,如果用定时器判断长度解码,会占用一个定时器,我还是想尽量少占用单片机资源,和原来的老汇编一样用软件延时,软件延时取决于单片机的指令时间,程序所用的语句,以及晶体的频率。我用C51编写了一个软件延时解NEC编码的程序:yk-read_NEC.c,程序用软件延时,程序的最后是测量的脉冲宽度数据,可以看出。软件测试的脉冲宽度和定时器的能对应起来,后面就是编程识别串行码的工作了。软件延时测量的脉冲长度,F0表0时间,FF表1时间
F0 16 D1 FF 0B 3F F0 01 81 FF 01 64 F0 01 74 FF 01 71 F0 01 6D FF 01 62
F0 01 82 FF 01 59 F0 01 70 FF 01 75 F0 01 76 FF 01 66 F0 01 77 FF 01 6D
F0 01 60 FF 01 80 F0 01 64 FF 04 3E F0 01 6D FF 04 3A F0 01 86 FF 04 37
F0 01 6B FF 04 44 F0 01 6A FF 04 45 F0 01 79 FF 04 41 F0 01 79 FF 04 36
F0 01 6E FF 04 41 F0 01 7F FF 01 5D F0 01 73 FF 04 3A F0 01 85 FF 04 3D
F0 01 6F FF 01 6E F0 01 72 FF 04 3A F0 01 70 FF 01 53 F0 01 86 FF 01 6C
F0 01 66 FF 01 83 F0 01 5D FF 04 40 F0 01 6C FF 01 7F F0 01 67 FF 01 69
F0 01 77 FF 04 46 F0 01 5C FF 01 73 F0 01 6F FF 04 3C F0 01 75 FF 04 3C
F0 01 6D FF 04 3F F0 01 76 FF 64 9C F0 16 AC FF 05 BC F0 01 56 FF 00 00

yk_read_NEC.rar

666 Bytes

使用特权

评论回复
6
autopccopy| | 2013-7-14 11:27 | 只看该作者
没有示波器麻烦一点。。。

使用特权

评论回复
7
oldzhang|  楼主 | 2013-7-14 11:34 | 只看该作者
本帖最后由 oldzhang 于 2013-7-18 08:22 编辑

在软件测量脉冲宽度的基础上,我编写了NEC红外遥控解码程序。
解码程序的设计思路:
先判断9ms低电平,不是退出。
再判断4.5ms高电平,不是退出。
下来就是4个字节的数据移位:
先让过低电平,测量高电平长度,短的移位0,长的移位1
4个字节数据获取之后,对获取的数据进行校验,前两字节相互为反码,校验错退出,后两字节也互为反码进行校验,校验错退出,从后面两字节中取出键码。
我测量的结果在程序最后,我的遥控器是金正某种插卡收音机放音遥控,编码和其他不一样,我用前面的定时器测量的宽度核对了,结果是对的。我测试了0--9:
0    1    2    3    4    5    6    7    8    9
0x68 0x30 0x18 0x7A 0X10 0X38 0X5A 0X42 0X4A 0X52

附件:yk_NEC.C

yk_NEC.rar

692 Bytes

使用特权

评论回复
8
oldzhang|  楼主 | 2013-7-14 11:36 | 只看该作者
我还编写调试了PHILIPS遥控器的解码程序,等我整理好了发上来。

使用特权

评论回复
9
dirtwillfly| | 2013-7-14 13:52 | 只看该作者
没有示波器,会很蛋痛

使用特权

评论回复
10
refee| | 2013-7-14 16:28 | 只看该作者
楼主精神可嘉 顶一个先 话说二手示波器也很便宜的哦 不妨在TB上搜搜看

使用特权

评论回复
11
oldzhang|  楼主 | 2013-7-14 19:25 | 只看该作者
TAOBAO上搜的60M泰克也2500元呀

使用特权

评论回复
12
coody| | 2013-7-14 19:43 | 只看该作者
可以参考STC官网上用定时器查询方式的接收程序,简单可靠,也不独占定时器,定时器可以做程序的基本时标,或其它查询方式的程序。

使用特权

评论回复
13
bowei181| | 2013-7-15 09:38 | 只看该作者
红外有两种编码,来接到了,收藏。

使用特权

评论回复
14
oldzhang|  楼主 | 2013-7-15 10:08 | 只看该作者
红外有NEC编码和PHILIPS编码,我正在调试PHILIPS编码,有些难,奇数对了,偶数错,或者偶数对了奇数错,奇数指按键的1,3,5,7,9

使用特权

评论回复
15
oldzhang|  楼主 | 2013-7-15 10:23 | 只看该作者
12楼的:
可以参考STC官网上用定时器查询方式的接收程序,简单可靠,也不独占定时器,定时器可以做程序的基本时标,或其它查询方式的程序。


我没有找到,能否给个链接,谢谢。
我调PHLIPS的遇到困难了。

使用特权

评论回复
16
coody| | 2013-7-15 13:00 | 只看该作者
17
oldzhang|  楼主 | 2013-7-15 19:31 | 只看该作者
下载到了,谢谢,是不是这个

STC15系列只用一个定时器的红外接收程序.rar

9.51 KB

使用特权

评论回复
18
qfyanglin| | 2013-7-15 21:32 | 只看该作者
这是我做的红外红线接收解码: ://v.youku.com/v_show/id_XNTA0MDI1OTEy.html
这是红外线发射:  ://v.youku.com/v_show/id_XNTc5MjgzNjA0.html
如有需要源程序可以发给你。

使用特权

评论回复
19
月影风| | 2013-7-15 22:37 | 只看该作者
钻研精神十足,支持下,继续努力了。

使用特权

评论回复
20
oldzhang|  楼主 | 2013-7-15 23:13 | 只看该作者
本帖最后由 oldzhang 于 2013-7-18 08:27 编辑

好不容易根据前面的汇编编程思路,编写了一个PHILIPS编码的红外遥控的程序,虽然可以使用,但是有个GOTO语句,自己很不满意。

YKPHILIPS.rar

1.25 KB

使用特权

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

本版积分规则

89

主题

1590

帖子

27

粉丝