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

 找回密码
 加入磁动力

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 8525|回复: 9

格力空调红外控制编码解码C51源程序,大家切磋

[复制链接]
发表于 2003-12-20 23:26:00 | 显示全部楼层 |阅读模式
首先把我的联系方式留几个: QQ:112165 E_Mail:ats2008@tom.com msn:ats2008@tom.com homepage://ats2008.vicp.net ftp://ats2008.vicp.net 由于刚开始接触单片机,所以做出来的程序也许不代表什么,程序还有一点点工作没有做,但是你可以在任何一个网站找代码,就是16B的非0即1数据转化为1B的问题,在程序中均有详细的说明,采用的是INT0,INT1,非门双中断,T0,T1双定时,更详细的请看程序,有什么好的想法,可以和我交流,最好的联系方式为Msn,由于我接触单片机只有 短短两个月,这里采用的是At89C52芯片,外电路不要找我,因为我采用的是最简电路. 详细程序如下(Keil C编译成功): /* title 红外解码方式程序设计*/ /*芯片的固有属性为起始位为低电平触发,也就是说采用反向双触发方式第三次出发就为需要的码*/ /*引导码9msL+4.5msH*/ #define CLK_CPU 11.0592 #include bit flag; /* 定义中断标志*/ bit status; /*中断来源 INT0=0;INT1=1*/ unsigned int *px; /*存储解码信号*,第一位存储码数*/ struct code_end { unsigned int number; unsigned char *compressdata; /*把数据压缩后存储*/ }code_end; unsigned int *time_high; /*记录高电平持续时间 第一位为引导脉冲高点平*/ unsigned int *time_low; unsigned int time_stand; /*脉冲基数,即为低电平时间*/ unsigned int count_intr; /*中断产生的次数,这里去除了引导玛*/ bit overlow_sign; /*溢出标志*/ bit start_recieve=0; void get_time_stand(); void write_data(); unsigned int int0_count; /*低脉冲触发次数*/ unsigned int int1_count; /*高脉冲触发次数*/ bit rec_time(); /*记录高低电平的时间*/ void service_int0() interrupt 0 using 2 /* 中断0设置标志*/ { flag=1; status=0; int0_count++; if(int0_count>1) start_recieve=1; else start_recieve=0; } void service_int1() interrupt 1 using 2 { flag=1; status=1; int1_count++; if(int0_count>1) start_recieve=1; else start_recieve=0; } void timer0_init() /*定时器0初始化*/ { TMOD = 0x11; /*定时器0 1 均工作在1状态*/ TH0 = 0x00; TL0 = 0x00; TR0=0; } void timer1_init() /* 定时器1初始化*/ { TMOD = 0x11; TH1 = 0x00; TL1 = 0x00; TR1=0; } bit IR_init() /*红外信号接收初始化*/ { /*这里用来获取引导码,包括两个电平*/ /*time_high time_low 第一个存储数据就是相应的引导码的数据*/ /*9ms Low 4.5ms High 格力空调的编码,利用TEK示波器可以获取*/ rec_time(); return start_recieve; } void write_data() /*信号保存*/ { unsigned int i; unsigned int j; unsigned int count_loop; unsigned int sgl; struct code_end code_end; *px=count_intr; /*必须保证px的起始位置*/ px++; /*第一位开始存储码*/ for(j=1;j2*time_stand)/*大于2倍就认为是1*/ *px=1; else *px=0; px++; } /*数据一共存储了count_intr个,这里采用的是 unsigned int 格式*/ /*需要进一步压缩来获取最简单模式,code_end */ code_end.number=count_intr; px=px-code_end.number; sgl=count_intr%8; count_loop=(count_intr-sgl)/8; /*设置循环次数*/ for(i=0;i[此贴子已经被作者于2004-1-13 18:17:51编辑过]
回复

使用道具 举报

发表于 2003-12-22 08:43:00 | 显示全部楼层
不错,多多发言呀。
回复 支持 反对

使用道具 举报

发表于 2004-2-2 22:11:00 | 显示全部楼层
好样的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-21 17:05:00 | 显示全部楼层
有谁继续做,可以通过电力载波通讯啊
回复 支持 反对

使用道具 举报

发表于 2004-7-20 10:40:00 | 显示全部楼层
[em01]
回复 支持 反对

使用道具 举报

发表于 2004-7-23 14:57:00 | 显示全部楼层
不错,学习中!
回复 支持 反对

使用道具 举报

发表于 2006-1-18 18:34:00 | 显示全部楼层
顶一下
回复 支持 反对

使用道具 举报

发表于 2006-2-8 16:50:00 | 显示全部楼层
编译成功和调试成功还有好远的路要走啊!!!!
回复 支持 反对

使用道具 举报

发表于 2007-8-13 16:54:00 | 显示全部楼层
[em01][em02]还是不懂![em17]
回复 支持 反对

使用道具 举报

发表于 2009-3-5 10:36:00 | 显示全部楼层
怎么似乎都没有断行呢?
看得好累哦
不过还是要谢谢楼主哈
回复 支持 反对

使用道具 举报

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

本版积分规则

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

粤公网安备 44040402000001号

GMT+8, 2019-6-18 20:50

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.