完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
/**************************************************************
File Name: 红外按键 Editor: Electricity Institute Of Hunan City University 朱家林 Edite Time: 2013-07-15 Modifier: 朱家林 Modication Time: Compiler : AVR Studio4.17 Hardware Platform: Atmega128MCU,8MHZ crystals Hardware Conection: Description : Attention: **************************************************************/ #include "comm.h" //*********************************************************************** // 定义变量区 //*********************************************************************** #define delay_us(x) _delay_us(x) //AVR GCC延时函数 x(us) #define delay_ms(x) _delay_ms(x) //AVR GCC延时函数 x(ms) #define RED_IN DDRE &= ~(1 << PE1) //设置输入,红外接收头接单片机PE3口 #define RED_OUT DDRE |= (1 << PE1) //设置输出 #define RED_CLR PORTE &= ~(1 << PE1) //置低电平 #define RED_SET PORTE |= (1 << PE1) //置高电平 #define RED_R (PINE & (1 << PE1)) //读电平 #define FMQ_0 PORTD &= ~(1 << PD6) //蜂鸣器所在IO口PD6 #define FMQ_1 PORTD |= (1 << PD6) uchar IRKEY; uint temp_value; uchar code_value=0; uchar key_code[4]; uchar key_value; /*****************************************************/ void beep() //产生1KHZ频率声音的函数 { DDRD=0xff;//设置为输出 FMQ_0; _delay_us(500); FMQ_1; _delay_us(500); } void beep1() { uint k; for(k=0;k<20;k++) { beep(); } FMQ_1; _delay_ms(25); } //*********************************************************************** // IO端口初始化 //*********************************************************************** void IRIO_init() { DDRE |= 0x02; RED_SET; RED_IN; } //************************************************************************* // 遥控器键值赋功能值子程序 //************************************************************************* void Key_Icode(void) { switch(key_code[2]) { case 0x0C: IRKEY = 1; break; case 0x18: IRKEY = 2; break; case 0x5E: IRKEY = 3; break; case 0x08: IRKEY = 4; break; case 0x1C: IRKEY = 5; break; case 0x5A: IRKEY = 6; break; case 0x42: IRKEY = 7; break; case 0x52: IRKEY = 8; break; case 0x4A: IRKEY = 9; break; case 0x16: IRKEY = '0'; break; case 0x45: IRKEY = POWER;break; case 0x47: IRKEY = MENU;break; case 0x44: IRKEY = TEST;break; case 0x40: IRKEY = ADD;break; case 0x43: IRKEY = HOME;break; case 0x07: IRKEY = BACK;break; case 0x15: IRKEY = PLAY;break; case 0x09: IRKEY = FORWARD;break; case 0x19: IRKEY = DECREASE;break; case 0x0d: IRKEY = CLEAR;break; default: IRKEY = 0xFF; break; } } //************************************************************************* // 遥控器解码子程序 //************************************************************************* uchar Red_Code() { uchar i,j,k = 0; for(i = 0;i < 19;i++) { delay_us(400); //延时400us if(RED_R) //9ms内有高电平,则判断为干扰,退出处理程序 { return; } } while(!RED_R); //等待9ms低电平过去 for(i=0;i<5;i++) //是否连发码 { delay_us(500); if(!RED_R) { return; } } while(RED_R); //等待4.5ms高电平过去 for(i = 0;i < 4;i++) //接收4个字节的数据 { for(j = 0;j < 8;j++) //每个字节的数据8位 { while(!RED_R); //等待变高电平 while(RED_R) //计算高电平时间 { delay_us(100); k++; if(k >= 22) //高电平时间过长,则退出处理程序 { return; // } } code_value>>=1; //接受一位数据 if(k >= 8) { code_value|=0x80; //高电平时间大于0.56,则为数据1 } k = 0; //计时清零 } key_code[i]=code_value; //四个字节的数据 } Key_Icode(); //调用赋值函数 //Display_Key(key); //显示按键值 beep1(); //按键声音指示 return IRKEY; } /*****************等待按键*****************************/ void waitkey()//waiting for the button press { key_value = 0x00; while(key_value==0x00) {key_value = Red_Code();}//IRKEY } |
|
|
|
yts1213 发表于 2013-8-23 20:23 可以用文档的形式发过来吗?而且好像有点少 |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
503 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1756 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1183 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1053 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1287 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12022 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 20:22 , Processed in 0.481299 second(s), Total 73, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号