完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
`将遥控器上的2,4,6,8按键定义为电脑上显示的相应按键的数值为01,03,02,04 #include "reg52.h" typedef unsigned int u16; typedef unsigned char u8; ***it P0_0=P2^2; ***it P0_1=P2^3; ***it P0_2=P2^4; ***it LSA=P2^2; ***it LSB=P2^3; ***it LSC=P2^4; ***it IRIN=P3^2; u8 IrValue[6]; u8 time; u8 DisplayData[8]; u8 SendData; u8 code smgduan[17]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0X76}; void delay(u16 i) //延时 { while(i--); } void DigDisplay() //数码管显示函数 { u8 i; for(i=0;i<3;i++) { switch(i) { case(0): LSA=0;LSB=0;LSC=0; break; case(1): LSA=1;LSB=0;LSC=0; break; case(2): LSA=0;LSB=1;LSC=0; break; } P0=DisplayData[2-i]; delay(100); P0=0x00; } } void IrInit() //初始化红外线接收 { IT0=1; EX0=1; EA=1; IRIN=1; } void UsartInit() // 设置串口 { SCON=0X50; //工作方式为1 TMOD=0X20; //计数器工作方式2 PCON=0X80; //波特率加倍 TH1=0XF3; //波特率4800 TL1=0XF3; ES=1; EA=1; TR1=1; } void main() //主函数 { IrInit(); UsartInit(); while(1) { DisplayData[0] = smgduan[IrValue[2]/16]; DisplayData[1] = smgduan[IrValue[2]%16]; DisplayData[2] = smgduan[16]; DigDisplay(); if(SendData==1) { /* 红外线按键对应值 2---0x18 4--0x08 8--0x52 6--0x5a */ if((IrValue[2]==0x18)||(IrValue[2]==0x08)||(IrValue[2]==0x5a)||(IrValue[2]==0x52)) { SBUF=IrValue[2]; { switch(IrValue[2]) { case 0x18: P0=0XFF; P0_0=0; break; case 0x08: P0=0XFF; P0_1=0; break; case 0x5a: P0=0XFF; P0_2=0; break; } } SendData=0; } } } } void ReadIr() interrupt 0 //读取红外线数值的中断函数 { u8 j,k; u16 err; Time=0; delay(700); if(IRIN==0) { err=1000; while((IRIN==0)&&(err>0)) { delay(1); err--; } if(IRIN==1) { err=500; while((IRIN==1)&&(err>0)) { delay(1); err--; } for(k=0;k<4;k++) { for(j=0;j<8;j++) { err=60; while((IRIN==0)&&(err>0)) { delay(1); err--; } err=500; while((IRIN==1)&&(err>0)) { delay(10); //0.1ms Time++; err--; if(Time>30) { return; } } IrValue[k]>>=1; if(Time>=8) { IrValue[k]|=0x80; } Time=0; } } } if(IrValue[2]!=~IrValue[3]) { SendData=0; return; } else { SendData=1; } } } void Usart() interrupt 4 //串口通信中断函数 { u8 receiveData; receiveData=SBUF; RI = 0; SBUF=IrValue[2]; while(!TI); TI=0; } ` |
|
相关推荐
4个回答
|
|
这是我最后修改后的代码
0 将遥控器上的2,4,6,8按键定义为电脑上显示的相应按键的数值为01,03,02,04 #include "reg52.h" typedef unsigned int u16; typedef unsigned char u8; ***it P0_0=P2^2; ***it P0_1=P2^3; ***it P0_2=P2^4; ***it LSA=P2^2; ***it LSB=P2^3; ***it LSC=P2^4; ***it IRIN=P3^2; u8 IrValue[6]; u8 time; u8 DisplayData[8]; u8 SendData; u8 code smgduan[17]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0X76}; void delay(u16 i) //延时 { while(i--); } void DigDisplay() //数码管显示函数 { u8 i; for(i=0;i<3;i++) { switch(i) { case(0): LSA=0;LSB=0;LSC=0; break; case(1): LSA=1;LSB=0;LSC=0; break; case(2): LSA=0;LSB=1;LSC=0; break; } P0=DisplayData[2-i]; delay(100); P0=0x00; } } void IrInit() //初始化红外线接收 { IT0=1; EX0=1; EA=1; IRIN=1; } void UsartInit() // 设置串口 { SCON=0X50; //工作方式为1 TMOD=0X20; //计数器工作方式2 PCON=0X80; //波特率加倍 TH1=0XF3; //波特率4800 TL1=0XF3; ES=1; EA=1; TR1=1; } void main() //主函数 { IrInit(); UsartInit(); while(1) { DisplayData[0] = smgduan[IrValue[2]/16]; DisplayData[1] = smgduan[IrValue[2]%16]; DisplayData[2] = smgduan[16]; DigDisplay(); if(SendData==1) { /* 红外线按键对应值 2---0x18 4--0x08 8--0x52 6--0x5a */ if(IrValue[2]==0x18) { SBUF=0x01; } else if(IrValue[2]==0x08) { SBUF=0x03; } else if(IrValue[2]==0x5a) { SBUF=0x04; } else if(IrValue[2]==0x52) { SBUF=0x02; } SendData=0; } } } void ReadIr() interrupt 0 //读取红外线数值的中断函数 { u8 j,k; u16 err; Time=0; delay(700); if(IRIN==0) { err=1000; while((IRIN==0)&&(err>0)) { delay(1); err--; } if(IRIN==1) { err=500; while((IRIN==1)&&(err>0)) { delay(1); err--; } for(k=0;k<4;k++) { for(j=0;j<8;j++) { err=60; while((IRIN==0)&&(err>0)) { delay(1); err--; } err=500; while((IRIN==1)&&(err>0)) { delay(10); //0.1ms Time++; err--; if(Time>30) { return; } } IrValue[k]>>=1; if(Time>=8) { IrValue[k]|=0x80; } Time=0; } } } if(IrValue[2]!=~IrValue[3]) { SendData=0; return; } else { SendData=1; } } } void Usart() interrupt 4 //串口通信中断函数 { u8 receiveData; receiveData=SBUF; RI = 0; // SBUF=IrValue[2]; while(!TI); TI=0; } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
238 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
629 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
552 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
552 浏览 0 评论
1074 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11764 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 03:11 , Processed in 0.498684 second(s), Total 54, Slave 47 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号