完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
刚接触单片机红外线的控制,采用的是DF0038B一体化红外线发光二极管,红外线发射部分是20键的38K的NEC编码的遥控器,想实现数码管显示1-f的数字,但是在按+或者-的时候,本来是想实现加1的操作,数码管却从当前数依次加1或者减1到最大数或者最小数,不知道是什么原因,红色部分加上延时后只是改变了依次变化的速度,求大侠帮助
//################################################################################################# //文件:51单片机的红外遥控解码程序 //属性:使用外部中断0连接遥控头,接收红外遥控键值送P2口显示,12MHz外部晶振 //作者:新思科电子 2011-06 //资源:P3.2=接收头输入,P2=8LED //################################################################################################# #include"reg52.h" #define uint unsigned int #define uchar unsigned char uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; uchar led=0x00; int a=0; void io_init(void); void int_init(void); void DelayMS(uint x) { uchar t; while(x--) for(t=0;t<120;t++); } void main(void) { io_init(); int_init(); while(1) {switch(~led) {case 0x16:P0=DSY_CODE[0];a=0;break; case 0x0c:P0=DSY_CODE[1];a=1;break; case 0x18:P0=DSY_CODE[2];a=2;break; case 0x5E:P0=DSY_CODE[3];a=3;break; case 0x08:P0=DSY_CODE[4];a=4;break; case 0x1C:P0=DSY_CODE[5];a=5;break; case 0x5A:P0=DSY_CODE[6];a=6;break; case 0x42:P0=DSY_CODE[7];a=7;break; case 0x52:P0=DSY_CODE[8];a=8;break; case 0x4A:P0=DSY_CODE[9];a=9;break; case 0x40:if(a<13)P0=DSY_CODE[a++];DelayMS(500);break;//遥控器上“+” case 0x19:if(a>0)P0=DSY_CODE[a--];DelayMS(500);break;//遥控器上“-” default:P0=0xff;} } } void io_init(void) { P0=0xff; P1=0xff; P2=0xff; P3=0xff; } void int_init(void) { EX0=1; EA=1; } void interrupt0()interrupt 0 { uchar i=0,j=0,k=0,us=0; uchar addr[4]={0}; EX0=0; for(i=0;i<255;i++) //9ms内有高电平认为是干扰 { if(P3&0x04) //255的值实际时间为800us { EX0=1; return; } } while(!(P3&0x04)); //等待9ms低电平过去 for(i=0;i<4;i++) { for(j=0;j<8;j++) { while(P3&0x04); //等待4.5ms高电平过去 while(!(P3&0x04)); //等待0.56ms低电平后面的高电平 while(P3&0x04) //计算这个高电平的时间 { for(us=0;us<=32;us++); //100us的延时语句 if((k++)>=30) //高电平时间过长退出程序 { EX0=1; return; } } addr=addr>>1; //接收一位数据 if(k>=8) addr=addr|0x80; //高电平大于0.56ms,则为1 k=0; } } led=~(addr[2]); //P2的LED显示二进制键值 EX0=1; } |
|
相关推荐
3个回答
|
|
很多呀
|
|
|
|
|
|
|
|
谢谢你的解答,针对你说的条件有重复,在case里面应该是算是分支了吧,应该不会出现这个情况,程序没有报错,主要现象还是,我按9后,显示“9”,我按“-”后,数码管从9.8.7.6.5……1这样变化,我考虑的是按键的抖动问题,或者是外部中断的设置上有问题,针对你说的还原a,我是想在原有的数码显示的基础上,显示加减的操作,头一次接触,现在不知道怎么改了,你能给我改一下吗,谢谢 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板
506 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十章 YOLO2人手检测实验
445 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-网络编程示例之开发板测试
394 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-网络编程示例之网络socket程序编程
883 浏览 0 评论
飞凌嵌入式-ELFBOARD-RGB LCD屏接口的PCB设计要点
889 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11728 浏览 31 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-16 21:24 , Processed in 0.566800 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号