完善资料让更多小伙伴认识你,还能领取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; } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1693 浏览 0 评论
【每周推荐】采用11代Intel CPU,基于youyeetoo X1开发板搭建少儿AI智能STEAM积木平台
977 浏览 0 评论
3056 浏览 2 评论
【youyeetoo X1 windows 开发板体验】+ 影音处理和AI模型移植
2692 浏览 5 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 移植zbar的方法
1817 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
6466 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-10 01:12 , Processed in 0.711518 second(s), Total 86, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号