完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
我在写红外遥控的C语言解码程序,参考了一份代码,代码很短,不到300行,但是呢,对于这个数组:uchar IRCOM[7];
的值是如何得来的,我真搞不懂,没有任何地方有给它赋值过,导致我对这句话很不理解:IRCOM[j]=IRCOM[j] >> 1; //高位补0 按照程序的思路,解码后的值就存储在 IRCOM[2] 里面,然后跟键码表RecvData[] 进行对比: for(j=0;j<10;j++) { if(IRCOM[2]==RecvData[j]) { ControlCar(j); } } 从而得知按下哪个按键。请教大神 IRCOM[2] 的值是怎么得来的?
|
|
相关推荐
8个回答
|
|
IRCOM[j]=IRCOM[j] >> 1; //高位补0 ,C语言里的移位是不带进位的,不想汇编会区分带进位和不带进位的移位,所以移位后补充的位就是0。
if (N>=8) { IRCOM[j] = IRCOM[j] | 0x80; } 这里就是对IRCOM[j]做置1的赋值
最佳答案
|
|
|
|
红外,这就厉害了
|
|
|
|
unsigned char j,k;
do{ j = 10; do{ k = 50; do{ _nop_(); }while(--k); }while(--j); }while(--i); |
|
|
|
人中狼 发表于 2017-6-10 19:06 这里确实有做出赋值,但不止在这里,还有 IRCOM[j]=IRCOM[j] >> 1; 这句是赋0的语句,感谢您给我提点我才看懂它的解码思路! |
|
|
|
|
|
|
|
|
|
|
|
有两个地方对 IRCOM[j] 这个数组进行赋值:
(1) IRCOM[j]=IRCOM[j] >> 1; //右移一位并高位赋0 (2) IRCOM[j] = IRCOM[j] | 0x80; //高位赋1 解码关键思路是判断高电平是否大于等于8ms,若是则为1,否则为0 。 在此结帖啦~~ |
|
|
|
直接计时红外信号高低电平宽度,可以直接解码
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
195 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
172 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
453 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
697 浏览 2 评论
602 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11983 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 03:46 , Processed in 0.861146 second(s), Total 88, Slave 70 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号