完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
//大家帮我看看问题出在哪里,红外遥控发射的值要用怎么测
#include ***it IRIN=P3^2; ***it led1 = P2^0; ***it led2 = P2^1; unsigned char IrValue[6]; unsigned char time; void IrInit(); void DelayMs(unsigned int ); code unsigned char Tab[17] = {//定义数码管字型数据 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, //0123456789 0x77,0x7C,0x39,0x5E,0x79,0x71, //AbCdEF 0x40 //- }; /******************************************************************************* * 函数名 : main * 函数功能 : 主函数 * 输入 : 无 * 输出 : 无 *******************************************************************************/ void main() { IrInit(); while(1) { switch(IrValue[2]) { case 0: P0 = Tab[0];break; case 1: P0 = Tab[1];break; case 2: P0 = Tab[2];break; case 3: P0 = Tab[3];break; case 4: P0 = Tab[4];break; case 5: P0 = Tab[5];break; case 6: P0 = Tab[6];break; case 7: P0 = Tab[7];break; case 8: P0 = Tab[8];break; case 9: P0 = Tab[9];break; } } } /******************************************************************************* * 函数名 : DelayMs() * 函数功能 : 延时 * 输入 : x * 输出 : 无 *******************************************************************************/ void DelayMs(unsigned int x) //0.14ms误差 0us { unsigned char i; while(x--) { for (i = 0; i<13; i++) {} } } /******************************************************************************* * 函数名 : IrInit() * 函数功能 : 初始化红外线接收 * 输入 : 无 * 输出 : 无 *******************************************************************************/ void IrInit() { IT0=1;//下降沿触发 EX0=1;//打开中断0允许 EA=1; //打开总中断 IRIN=1;//初始化端口 } /******************************************************************************* * 函数名 : ReadIr() * 函数功能 : 读取红外数值的中断函数 * 输入 : 无 * 输出 : 无 *******************************************************************************/ void ReadIr() interrupt 0 { unsigned char j,k; unsigned int err; Time=0; DelayMs(70); if(IRIN==0) //确认是否真的接收到正确的信号 { err=1000; //1000*10us=10ms,超过说明接收到错误的信号 /*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时 侯,程序死在这里*/ while((IRIN==0)&&(err>0)) //等待前面9ms的低电平过去 { DelayMs(1); err--; } if(IRIN==1) //如果正确等到9ms低电平 { err=500; while((IRIN==1)&&(err>0)) //等待4.5ms的起始高电平过去 { DelayMs(1); err--; } for(k=0;k<4;k++) //共有4组数据 { for(j=0;j<8;j++) //接收一组数据 { err=60; while((IRIN==0)&&(err>0))//等待信号前面的560us低电平过去 // while (!IRIN) { DelayMs(1); err--; } err=500; while((IRIN==1)&&(err>0)) //计算高电平的时间长度。 { DelayMs(1);//0.14ms Time++; err--; if(Time>30) { EX0=1; return; } } IrValue[k]>>=1; //k表示第几组数据 if(Time>=8) //如果高电平出现大于565us,那么是1 { IrValue[k]|=0x80; } Time=0; //用完时间要重新赋值 } } } if(IrValue[2]!=~IrValue[3]) { return; } } } |
|
相关推荐
13个回答
|
|
实物还是仿真,实物需要红外接收芯片,你板子上有没有
|
|
|
|
|
|
|
|
解决了,把switch里面换成
case 0X0C: P0 = Tab[1];break; case 0X18: P0 = Tab[2];break; case 0X5E: P0 = Tab[3];break; case 0X08: P0 = Tab[4];break; case 0X1C: P0 = Tab[5]; break; case 0X5A: P0 = Tab[6];break; case 0X42: P0 = Tab[7];break; case 0X52: P0 = Tab[8];break; case 0X4A: P0 = Tab[9];break; 就可以了,但是为什么是这些值呢?? |
|
|
|
etopstar 发表于 2013-8-21 18:55 因为每个按键的值都是固定好的,你可以通过串口检测程序来检测你的遥控器上每个按键对应的键码值 |
|
|
|
|
|
|
|
|
|
按键的键值和你的硬件接线有关系,0号按键的键值不是等于0的
|
|
|
|
etopstar 发表于 2013-8-21 18:55 那些值是遥控器上每个键解码后的值,每个码都对应遥控器上的一个键 |
|
|
|
|
|
|
|
|
|
|
|
遥控按键出来接吗,就是ASCII码
|
|
|
|
正需要此资料,感谢楼主无私分享,先学习,后评论
|
|
|
|
正需要此资料,感谢楼主无私分享
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
7 浏览 0 评论
26 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
13 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
644 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1000 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11770 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 14:22 , Processed in 0.755612 second(s), Total 99, Slave 79 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号