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

 找回密码
 加入磁动力

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 9067|回复: 24

好久没发帖,今天发个M50560的解码

[复制链接]
发表于 2005-9-16 14:01:00 | 显示全部楼层 |阅读模式
最近对于论坛真的很累,商业化看来无望了,非法注册又多到删也删不完,程序又有小问题,自己的空余时间又少得很,但又不忍心丢下这个看管了4年的小孩子,只有默默支撑下去,怎么说也是我们的精神乐园。 本程序,请勿转载!! CPU使用AT89C2051,12M晶振,4800比特率连接PC串口 /*---------------------------------------- 红外遥控解码 (M50560电视遥控器) Copyright 2005/9/13 All rights reserved. 明浩 E-mail: pnzwzw@163.com pnzwzw@cdle.net 一体化接收头输出端拉P3.2(int0),P1为控制输出端。 可以扩展到32路或更多 输出为低电平有效 ----------------------------------------*/ #include void InitCom(void); void ComOutChar(unsigned char OutData); void DelayA(void); void DelayB(void); void main(void) { unsigned int TempCyc; InitCom(); //初始化串口 EA = 1; //允许CPU中断 IT0 = 1; //INT0下降沿有效 EX0 = 1; //开INT0中断; ComOutChar(1); ComOutChar(5); ComOutChar(3); do { for (TempCyc=0; TempCyc<35000; TempCyc++) P3_7 = 0; for (TempCyc=0; TempCyc<30000; TempCyc++) P3_7 = 1; //工作指示LED } while(1); } //INT0中断 void INT0Fun(void) interrupt 0 using 2 { unsigned char IRCode[2], IROK; unsigned int TempCyc, TempCycB, TempCycA; EX0 = 0; //外部中断0关闭 IROK = 0; DelayA(); //延时等待引导码的前半部结束 DelayA(); if (!P3_2) //检验前半部是否过早结束,防干扰 { for (TempCycA=0; TempCycA<2; TempCycA++) { DelayA(); if (P3_2) //检验前半部是否过早结束,防干扰 { for (TempCyc=0; TempCyc<300; TempCyc++) if (!P3_2) break; //等待第一个位, if (TempCyc<300) //超时检验 { for (TempCyc=0; TempCyc<8; TempCyc++) { while(!P3_2); //等待P3_2拉高,开始位的下部分 DelayB(); //这里没设超时,实际应用在多功能的设计时应设超时 IRCode[TempCycA] = IRCode[TempCycA]>>1; if (P3_2) //当延时750us后P3_2仍为高则当前位为1 { IRCode[TempCycA] = IRCode[TempCycA] | 0x80; for (TempCycB=0; TempCycB<100; TempCycB++) if (!P3_2) break; //等待下个位 当位1时高电平为1.5ms, if (TempCycB>99) //之前已延时了750us, 所以超时应大于1.5ms-750us goto endchk; //这里最大为1ms } } } else goto endchk; //超时 } else goto endchk; IROK++; //当自定码和数据码都完成时为2 } } endchk: if (IROK==2) { ComOutChar(IRCode[0]); ComOutChar(IRCode[1]); //连接PC串口查看自定义码和数据码 if (IRCode[1]==0x10) //1号键 //只演示点亮2只LED,读者可以自行扩展控制别的器件 P1_7 = ~P1_7; if (IRCode[1]==0x11) //2号键 P1_6 = ~P1_6; for (TempCyc=0; TempCyc<300; TempCyc++) DelayA(); //延时 } EX0 = 1; } //向串口输出一个字符(非中断方式) void ComOutChar(unsigned char OutData) { SBUF = OutData; //输出字符 while(!TI); //空语句判断字符是否发完 TI = 0; //清TI } //串口初始化 晶振为12M 方式1 波特率4800 void InitCom(void) { SCON = 0x50; //串口方式1,允许接收 TMOD = 0x21; //定时器1定时方式2,定时0为模式1,16位模式 TCON = 0x40; //设定时器1开始计数 TH1 = 0xF3; //设波特率为4800 TL1 = 0xF3; PCON = 0x80; //波特率加倍控制,SMOD位 RI = 0; //清收发标志 TI = 0; TR1 = 1; //启动定时器 } void DelayA(void) { unsigned int TempCyc; for (TempCyc=0; TempCyc<650; TempCyc++); //3.5 } void DelayB(void) { unsigned int TempCyc; for (TempCyc=0; TempCyc<93; TempCyc++); // 0.75ms }
[此贴子已经被作者于2005-9-16 14:01:35编辑过]
回复

使用道具 举报

发表于 2005-9-17 14:19:00 | 显示全部楼层
支持!
回复 支持 反对

使用道具 举报

发表于 2005-9-18 14:09:00 | 显示全部楼层
单凭一人之力,是有点力不从心的!!!!继续努力!!!![em17][em27][em31]
回复 支持 反对

使用道具 举报

发表于 2005-9-18 18:41:00 | 显示全部楼层
支持!明浩你一定要支撑下去呀!我可是一天不登陆我就睡不了啊!!!关于非法注册的事,你可以从数据库里复制一份然后发给cne53102@sina.com.cn我狠狠心每天把作业在学校写完,回家就帮你删(我知道每天都有新注册的,但少了啊就好管理了,以前的我可以帮你删,保证不泄露数据!只要你告诉我删什么样的就行),我删完了再发给你,你把它再粘回去不就行啦?程序的问题我就不能帮你了,因为我不会VC只会VB6.0.呀!对了忘了跟你说了你的主页的这个恩扭的连接本来应该是:http://www.cdle.net/但是可能是因为你太忙的原因将连接写成了htt://www.cdle.net/少了一个字母"p".空间的问题嘛,我以前看见过http://www.programfan.com/向网友借用空间,我不知道他们是用的什么方法,也许你可以编一个程序,我有一个我自己VB6编的服务器的程序,不是很可靠,只支持*.htm和*.zip下载不支持asp,域名是我的电脑的IP,你可以通过连接的方式使用我的机器当"跳板".我的电脑现在一般都是上午9:00以前开机,一直运行到12:00左右(我的机器是我和我妈共用的C:是机器的D是俺妈的E是我的,我就把我的空间借给你把,我看看啊~~还有9.77GB呢!我可以借出8GB(我留着1.77G自己用不会介意把?我想明浩哥哥不是这样的人把~)顺便提一下,我原来还不知道明浩哥哥还是个爸爸呢!嘻嘻!~还有平时多喝点[em27](茶)不要总[em30],一天干细活不要多看[em47]多上点眼药水,注意[em48]早点睡!而且不要总[em10],否则会向我爸爸一样[em14]得地上到处都是的,家里人还得收拾~~注意身体哦切记不要[em05]如果你觉得你管不过来的话,可以把我弄成个斑竹什么的(一个奢侈的要求~[em04])
[em01][em07]
回复 支持 反对

使用道具 举报

发表于 2005-9-18 13:18:00 | 显示全部楼层
支持!!!!
回复 支持 反对

使用道具 举报

发表于 2005-9-16 14:10:00 | 显示全部楼层
哈哈,被我先看到[em07]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-19 08:45:00 | 显示全部楼层
谢谢大家的支持,非法注册的问题已解决,大家可以自由注册了。程序问题我尽快抽空解决。
回复 支持 反对

使用道具 举报

发表于 2005-10-10 12:34:00 | 显示全部楼层
你研发点东东,我们买,以此方式来维持网站运行的费用!或者实行交会费方能浏览的办法来筹集一部分资金
回复 支持 反对

使用道具 举报

发表于 2005-10-10 11:50:00 | 显示全部楼层
老大我的weiwei的号码好不容易成了一个星星!
你又把他给删掉了!能不能恢复啊!我可不是非法注册的!
回复 支持 反对

使用道具 举报

发表于 2005-10-11 16:46:00 | 显示全部楼层
以下是引用[I]zhaojunsong[/I]在2005-10-10 12:34:00的发言:[BR]你研发点东东,我们买,以此方式来维持网站运行的费用!或者实行交会费方能浏览的办法来筹集一部分资金

大哥你口气很大!别到时候又不买那不是浪费大哥时间吗!
回复 支持 反对

使用道具 举报

发表于 2005-10-11 21:07:00 | 显示全部楼层
你问问他,他的音源切换器我买了4块,2块编程器,1块仿真板,还有零件若干
回复 支持 反对

使用道具 举报

发表于 2005-11-25 01:11:00 | 显示全部楼层
是来自香港
谢谢 回覆
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-24 12:25:00 | 显示全部楼层
以下是引用肉酸托腮在2005-11-24 2:55:00的发言:

请问
可唔可以把所有的遥控键都写出来 ( 我是新手 )
( 我己从 0x00 试到 0x99 但是有些键都是查不到出来,Power,--/- )
谢谢 回覆


if (IRCode[1]==0x10) //1号键 //只演示点亮2只LED,读者可以自行扩展控制别的器件
P1_7 = ~P1_7;
if (IRCode[1]==0x11) //2号键
P1_6 = ~P1_6;

你做好电路,接到PC串口就可以用串口调试软件看到你所按的键的编码了

回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-24 12:29:00 | 显示全部楼层

肉酸托腮是香港同胞吧?

我刚想起我写文章时有做编码的对应图,我在此贴出来,有需要的朋友可以享用。

回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-24 12:31:00 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2005-11-24 02:55:00 | 显示全部楼层

请问
可唔可以把所有的遥控键都写出来 ( 我是新手 )
( 我己从 0x00 试到 0x99 但是有些键都是查不到出来,Power,--/- )
谢谢 回覆


if (IRCode[1]==0x10) //1号键 //只演示点亮2只LED,读者可以自行扩展控制别的器件
P1_7 = ~P1_7;
if (IRCode[1]==0x11) //2号键
P1_6 = ~P1_6;

回复 支持 反对

使用道具 举报

发表于 2007-1-8 15:59:00 | 显示全部楼层

// CPU使用AT89C2051,12,48接PC串口
// (M50560电视遥控器) 一体化接收头输出端拉P3.2(int0),P1为控制输出端。输出为低电平有效 
#include void InitCom(void);
void ComOutChar(unsigned char OutData);
void DelayA(void);
void DelayB(void);
void main(void)
{
unsigned int TempCyc;
InitCom();  //初始化串口
EA = 1 ;  //允许CPU中断
IT0 = 1;  //INT0下降沿有效
EX0 = 1;  //开INT0中断;
ComOutChar(1);
ComOutChar(5);
ComOutChar(3);
do
{
for (TempCyc=0;
TempCyc<35000;
TempCyc++) P3_7 = 0;
for (TempCyc=0;
TempCyc<30000;
TempCyc++) P3_7 = 1;  //作指示LED
}
while(1);
}  
   //INT0中断
void INT0Fun(void) interrupt 0 using 2
{
unsigned char IRCode[2], IROK;
unsigned int TempCyc, TempCycB, TempCycA;
EX0 = 0;   //外部中断0关闭
IROK =0;
DelayA();   //延时等待引导码的前半部结束
DelayA();
if (!P3_2)   //检验前半部是否过早结束,防干扰
{
for (TempCycA=0;
TempCycA<2;
TempCycA++)
{
DelayA();
if (P3_2)   //检验前半部是否过早结束,防干扰
{
for (TempCyc=0;
TempCyc<300;
TempCyc++) if (!P3_2) break;  //等待第一个位,
if (TempCyc<300)   //超时检验
{
for (TempCyc=0;
TempCyc<8; TempCyc++)
{
while(!P3_2);   //等待P3_2拉高,开始位的下部分
DelayB();   //这里没设超时,实际应用在多功能的设计时应设超时
IRCode[TempCycA] = IRCode[TempCycA]>>1;
if (P3_2)   //当延时750us后P3_2仍为高则当前位为1
{
IRCode[TempCycA] = IRCode[TempCycA] | 0x80;
for (TempCycB=0;
TempCycB<100;
TempCycB++) if (!P3_2) break;  //等待下个位 当位1时高电平为1.5ms,
if (TempCycB>99)   //之前已延时了750us, 所以超时应大于1.5ms-750us
goto endchk;    //这里最大为1ms
}
}
}
else goto endchk;   //超时
}
else goto endchk;
IROK++;    //当自定码和数据码都完成时为2
}
}
endchk:
if (IROK==2)
{
ComOutChar(IRCode[0]);
ComOutChar(IRCode[1]);   //连接PC串口查看自定义码和数据码

if (IRCode[1]==0x10)   //1号键 //只演示点亮2只LED,读者可以自行扩展控制别的器件
P1_7 = ~P1_7;
if (IRCode[1]==0x11)   //2号键
P1_6 = ~P1_6;
for (TempCyc=0; TempCyc<300; TempCyc++) DelayA();  //延时
}
EX0 = 1; }    //向串口输出一个字符(非中断方式)
void ComOutChar(unsigned char OutData)
{
SBUF = OutData;   //输出字符
while(!TI);   //空语句判断字符是否发完
TI = 0;    //清TI
}
     //串口初始化 晶振为12M 方式1 波特率4800
void InitCom(void)
{
SCON = 0x50;  //串口方式1,允许接收
TMOD = 0x21;  //定时器1定时方式2,定时0为模式1,16位模式
TCON = 0x40;  //设定时器1开始计数
TH1 = 0xF3;  //设波特率为4800
TL1 = 0xF3;
PCON =0x80; //波特率加倍控制,SMOD位
RI = 0; //清收发标志
TI = 0; //
TR1 = 1; //启动定时器
}
void DelayA(void)
{
unsigned int TempCyc;
for (TempCyc=0; TempCyc<650; TempCyc++); //3.5
}
void DelayB(void)
{
unsigned int TempCyc;
for (TempCyc=0; TempCyc<93; TempCyc++); // 0.75ms
}

这个程序我怎么编译不过去呀。。。请明洁看看。。。。。

回复 支持 反对

使用道具 举报

发表于 2008-1-16 13:59:00 | 显示全部楼层

老大,这么知道他来自香港呢!?查IP的吗?那快点把我加进来把!虽然我现在不会的很多。但我也想进这个大家庭学习!

[em02]
回复 支持 反对

使用道具 举报

发表于 2008-3-19 20:24:00 | 显示全部楼层
没看见电路图啊~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2008-2-24 13:32:00 | 显示全部楼层

for (TempCycA=0;
TempCycA<2;
TempCycA++)

不能分行写吧应写为

for (TempCycA=0; TempCycA<2; TempCycA++)

否则编译会出错!

回复 支持 反对

使用道具 举报

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

本版积分规则

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

粤公网安备 44040402000001号

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

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.