DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1268|回复: 0
打印 上一主题 下一主题

[家电] 遥控器程序

[复制链接]
跳转到指定楼层
楼主
发表于 2011-4-30 14:45:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
遥控解码的原理:我们知道遥控是采用38KHZ的脉冲通过红外发光二极管调制发送出去的 。我们的主
目的是怎样将从空气中传送来的遥控信息,进行解码。对于遥控里面的最底层原理,我就不多介绍啦 , 网
友可以参考相关书籍。在这里简单的说一下遥控解码的注意事项:
引导码的时间为:13.5ms,高电平时间为9ms,低电平时间为4.5ms。
低电平时间周期为:用L表示低 L=1.125ms
高电平时间周期为:用H表示高 H=2.25ms
发送一串数据大约58.5---76.5ms
遥控码是由:引导码、用户码、用户反码、键盘码、键盘反码 几部分组成。

相关源程序C语言版本)
unsigned char th1_val = 0, th1_old = 0;
unsigned char c_last=0;
unsigned char c_bits = 8;
unsigned char c_index = 0;
unsigned char c_code ,c_last1,c_last2,c_last3=0;
bit c_error = 0;
#define T_100US (F_OSC/12/10000)
#define T_ZERO_MIN (T_100US*10)
#define T_ZERO_MAX (T_100US*18)
#define T_ONE_MIN (T_100US*20)
#define T_ONE_MAX (T_100US*28)
#define T_REP_MIN (T_100US*110)
#define T_REP_MAX (T_100US*120)
#define T_START_MIN (T_100US*130)
#define T_START_MAX (T_100US*150)
#define TH_ZERO_MIN (T_ZERO_MIN>>8)
#define TH_ZERO_MAX (T_ZERO_MAX>>8)
#define TH_ONE_MIN (T_ONE_MIN>>8)
#define TH_ONE_MAX (T_ONE_MAX>>8)
#define TH_REP_MIN (T_REP_MIN>>8)
#define TH_REP_MAX (T_REP_MAX>>8)
#define TH_START_MIN (T_START_MIN>>8)
#define TH_START_MAX (T_START_MAX>>8)
#define CODE1 0x0a
#define CODE2 0xf5
#define INIT_T0 (65536L - (F_OSC/12)/HZ)
#define INIT_TH0 (INIT_T0 >> 8)
unsigned int remocnt=0;
extern bit menu1flag;
void int0_bh(void)
{
unsigned char temp = th1_val;
th1_val -= th1_old;
if (temp  TH_START_MAX)
// goto err_out;
if (th1_val >= TH_START_MIN)
goto reset_out;
if (th1_val > TH_REP_MAX)
goto err_out;
if (th1_val >= TH_REP_MIN) {
if (key_last == KEY_INC || key_last == KEY_DEC||key_last == KEY_MENU){
key_on = 1;
if(key_last==KEY_MENU) key_on=0;
if(++remocnt>40) { keymenu=1;
key_on=1;
remocnt=0;
}
else keymenu=0;
if(menu1flag) key_on=0;
}
goto reset_out;
}
if (c_error)
return;
if (th1_val > TH_ONE_MAX)
goto err_out;
if (th1_val >= TH_ONE_MIN) {
c_last >>= 1;
c_last |= 0x80;
goto bit_rcv;
}
if (th1_val > TH_ZERO_MAX)
goto err_out;
if (th1_val >= TH_ZERO_MIN) {
c_last >>= 1;
goto bit_rcv;
}
goto err_out;
bit_rcv:
if (--c_bits)
return;
//c_index++;
switch (c_index++) {
case 0:
{ if (c_last == CODE1)
goto out;
else { goto out;}
}
case 1:
{ if (c_last == CODE2)
goto out;
// c_last2=c_last;
else {goto out;}
}
case 2: {
c_code = c_last;
goto out;
}
case 3: {
if (c_last != "c_code)
goto err_out;
// c_last3=c_last;
break;
}
}
if (key_on) {
goto reset_out;
}
switch (c_code) {
case 0x12:
key_last = KEY_POWER;
break;
case 0x03:
{
key_last = KEY_MENU;
keymenu=0;
remocnt=0;
}
break;
case 0x06:
key_last = KEY_VIDEO;
break;
case 0x13:
key_last = KEY_INC;
break;
case 0x48:
key_last = KEY_DEC;
break;
case 0x09:
key_last = KEY_ZOOM;
break;
default:
key_last = KEY_INVALID;
goto reset_out;
}
key_on = 1;
goto reset_out;
err_out:
c_error = 1;
goto out;
reset_out:
c_error = 0;
c_index = 0;
goto out;
out:
c_last = 0;
c_bits = 8;
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2026-1-23 12:10 , 耗时 0.099163 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表