磁动力电子网-雕刻机DIY论坛,单片机论坛,CNCDIY,DIYCNC

 找回密码
 加入磁动力

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3228|回复: 0

学习型红外解码,这里针对格力空调

[复制链接]
发表于 2004-2-6 23:27:00 | 显示全部楼层 |阅读模式
这里是我最新的格力空调解码器,由于时间的原因这里采用最简单的程序设计方案,例如引导码的类型长度,0与1码的编制,这里直接给出了判断方法,但是没有给出相对应的时间解码程序,如果需要可以给我来信,这里的编码还没有做到最简,例如编码0这里表示为0x00,1表示为0x01,单独占一个char,完全可以进一步的压缩以节约资源,下图给出解码的时间序列,6000H =6001H表示码长,6002表示引导码,接着是相应的码序列,这里已经通过实验验证,完全可行,如果有其他更好的解码方案,请与我交流qq:11265,请写出你的标志,闲聊的勿打扰,如果需要相应的发射编码方案,请给我写信ats2008@tom.com,大家共享经验。 #include #include #define MA_OPEN 0 #define MA_CLOSE 1 #define MA_UP 2 #define MA_DOWN 3 unsigned int count_bit; unsigned int address_abs; unsigned int address_radix; bit flag; unsigned char status; unsigned int time_radix; bit program_over; void system_init(); void service_int0(); void service_int1(); void service_timer1(); void system_run(unsigned char command_sign); void system_gettimeradix(); void system_gettimeradix() { time_radix=600; } void system_init() { TMOD=0x11; ET0=0; ET1=1; /*允许定时器1中断*/ IT0=1; /*边缘触发*/ IT1=1; /*边缘触发*/ EX0=1; /*允许外部中断*/ EX1=1; EA=1; /*允许中断*/ TR1=0; TH1=0x00; TL1=0x00; count_bit=0; program_over=0; flag=0; address_abs++; } void service_int0() interrupt 0 using 0 { flag=1; status=0; } void service_int1() interrupt 2 using 2 { count_bit++; flag=1; status=2; } void service_timer1() interrupt 3 using 3 { flag=1; status=3; } void system_run(unsigned char command_sign) { unsigned int time_temp; time_temp=0; if(command_sign==MA_OPEN) { address_abs=0x0000; address_radix=0x0000; } if(command_sign==MA_CLOSE) { address_abs=0x0100; address_radix=0x0100; } if(command_sign==MA_UP) { address_abs=0x0200; address_radix=0x0200; } if(command_sign==MA_DOWN) { address_abs=0x0300; address_radix=0x0300; } system_init(); system_gettimeradix(); while(program_over==0) { if(flag==1) { switch(status) { case 0: { TR1=0; if(count_bit!=0) { address_abs++; if(TH1>4) XBYTE[address_abs]=0x01; else XBYTE[address_abs]=0x00; } TH1=0x00; TL1=0x00; flag=0; break; } case 1:{ break ;} case 2:{ TR1=1; flag=0; break; } case 3:{ EA=0; address_abs++; XBYTE[address_abs]=0x01; program_over=1; flag=0; XBYTE[address_radix]=count_bit; address_radix++; XBYTE[address_radix]=count_bit; break; } case 4:{ break; } default:break; } } } } main() { while(1) system_run(0); }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入磁动力

本版积分规则

QQ|小黑屋|手机版|Archiver|www.cdle.net 磁动力电子网 2001-2017 ( 粤ICP备10098153号

粤公网安备 44040402000001号

GMT+8, 2019-3-20 20:58

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.