本帖最后由 daheix 于 2016-11-5 20:22 编辑
没有看到大家玩红外遥控器,我来玩一个;
首先咨询QQ群里面的朋友,知道红外遥控器的例子是:exam22IRDA 目录中。所以我就用这个来自己玩一下;
1、保证工程i编译通过
2、我没有led显示屏幕,屏幕是坏的,所以我只好使用串口打印,来查看我的按键的信息。方法是添加 printf函数打印信息到串口显示。
3、加载包后,串口一直没有打印按键消息。然后我就一直尝试。看原理图发现有个LED跳线,两个针脚。我就尝试把这两个用跳线帽跳上。结果就打印出来信息了。
相关配置如下:
整体的实验硬件:主板 + 遥控器(我使用的是别的网络机顶盒的)
【备注】我也实验了那种LED灯带的小遥控器,但是无法接收到任何信息,估计不是一路货色。
跳线连接放大图
串口打印结果显示图:
实验修改的test.c代码如下:
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "lcd.h"
#include "usmart.h"
#include "key.h"
#include "remote.h"
int main(void)
{
u32 times = 1; //LED闪烁的总次数
u8 key;
u8 t=0;
u8 *str=0;
uart_init(72,9600); //串口初始化为9600
delay_init(72); //延迟初始化
LED_Init(); //初始化LED
LCD_Init(); //初始化LCD
Remote_Init(); //红外线接收器初始化
POINT_COLOR=RED; //设置字体颜色
LCD_ShowString(30,40,200,24,24,"Dev Board ^_^");
LCD_ShowString(60,70,200,16,16,"REMOTE TEST");
LCD_ShowString(60,90,200,16,16,"M3");
LCD_ShowString(60,110,200,16,16,"2014/3/12");
LCD_ShowString(60,130,200,16,16,"KEYVAL:");
LCD_ShowString(60,150,200,16,16,"KEYCNT:");
LCD_ShowString(60,170,200,16,16,"SYMBOL:");
while(1)
{
key=Remote_Scan();
if(key)
{
LCD_ShowNum(116,130,key,3,16); //显示键值
printf("onclick %d\n",key);
LCD_ShowNum(116,150,RmtCnt,3,16); //显示按键次数
printf("onclick times: %d\n",RmtCnt);
switch(key)
{
case 0:str="ERROR";break;
case 162:str="POWER";break;
case 98:str="UP";break;
case 2:str="PLAY";break;
case 194:str="RIGHT";break;
case 34:str="LEFT";break;
case 224:str="VOL-";break;
case 168:str="DOWN";break;
case 144:str="VOL+";break;
case 104:str="1";break;
case 152:str="2";break;
case 176:str="3";break;
case 48:str="4";break;
case 24:str="5";break;
case 122:str="6";break;
case 16:str="7";break;
case 56:str="8";break;
case 90:str="9";break;
case 66:str="0";break;
case 82:str="DELETE";break;
}
LCD_Fill(116,170,116+8*8,170+16,WHITE); //清屏
LCD_ShowString(116,170,200,16,16,str); //显示 按键 值
printf(" onclicked\n",str);
}else delay_ms(10);
t++;
if(t==20)
{
t=0;
LED0=!LED0;
//80秒显示一次打印信息
if(0 == times % 80)
{
printf("I'm LED, light changed %d times\n",times);
}
times++;
}
}
}
发现的问题:
【1】遥控器会突然的无法正常显示按键信息,这个时候,将红外跳线重新插拔跳线帽,就好了。这个应该室友问题。
【2】我按一次按键,会连续显示4次,这个应该是遥控器的问题,是为了保证控制信号真正的发送出去,这个需要在 接收端 做相关的处理,相同的4次按键,只处理一次有效的 就可以了。这个也是为了保证实际使用而做的保护措施吧。多次发送策略。
总结:其他的东西,慢慢玩,呵呵。然后就可以控制其他的各种东西了。
通过打印,把自己的遥控器都配置起来。实现了 通过遥控器的1到9来控制LED灯的闪烁的速度。1最快,9最慢;
代码很简单,修改了上面的几行代码而已:
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "lcd.h"
#include "usmart.h"
#include "key.h"
#include "remote.h"
int main(void)
{
u32 times = 1; //¿ª»úµ½ÏÖÔڵĵÆÉÁ˸µÄ´ÎÊý
u32 lcdSpeed = 20;
u8 key;
u8 t=0;
u8 *str=0;
uart_init(72,9600); //´®¿Ú³õʼ»¯Îª9600
delay_init(72); //ÑÓʱ³õʼ»¯
LED_Init(); //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
LCD_Init(); //³õʼ»¯LCD
Remote_Init(); //ºìÍâ½ÓÊÕ³õʼ»¯
POINT_COLOR=RED;//ÉèÖÃ×ÖÌåΪºìÉ«
LCD_ShowString(30,40,200,24,24,"Dev Board ^_^");
LCD_ShowString(60,70,200,16,16,"REMOTE TEST");
LCD_ShowString(60,90,200,16,16,"M3");
LCD_ShowString(60,110,200,16,16,"2014/3/12");
LCD_ShowString(60,130,200,16,16,"KEYVAL:");
LCD_ShowString(60,150,200,16,16,"KEYCNT:");
LCD_ShowString(60,170,200,16,16,"SYMBOL:");
while(1)
{
key=Remote_Scan();
if(key)
{
LCD_ShowNum(116,130,key,3,16); //ÏÔʾ¼üÖµ
printf("onclick %d\n",key);
LCD_ShowNum(116,150,RmtCnt,3,16); //ÏÔʾ°´¼ü´ÎÊý
printf("onclick times: %d\n",RmtCnt);
switch(key)
{
case 0:str="ERROR";break;
case 24:str="PWOER ON/OFF";break;
case 16:str="MUTE";break; //¾²Òô
case 106:str="ZHI BO";break;
case 234:str="DIAN BO";break;
case 248:str="YING YONG";break;
case 218:str="SETTING";break;
case 186:str="LAST";break;
case 58:str="NEXT";break;
case 40:str="VOL +";break;
case 8:str="VOL -";break;
case 32:str="MENU";break;
case 216:str="INFO";break;
case 98:str="UP";break;
case 226:str="LEFT";break;
case 170:str="OK";break;
case 168:str="RIGHT";break;
case 104:str="DOWN";break;
case 96:str="HOME";break;
case 2:str="RETURN";break;
//set speed by the button
case 42:
lcdSpeed = 20;//这里控制速度
str="1";
break;
case 18:str="2";lcdSpeed = 40;break;
case 224:str="3";lcdSpeed = 60;break;
case 10:str="4";lcdSpeed = 80;break;
case 72:str="5";lcdSpeed = 100;break;
case 136:str="6";lcdSpeed = 120;break;
case 50:str="7";lcdSpeed = 140;break;
case 112:str="8";lcdSpeed = 160;break;
case 176:str="9";lcdSpeed = 180;break;
case 232:str="MOUSE_MODE";break;
case 48:str="0";break;
}
LCD_Fill(116,170,116+8*8,170+16,WHITE); //Çå³þ֮ǰµÄÏÔʾ
LCD_ShowString(116,170,200,16,16,str); //ÏÔʾSYMBOL
printf(" onclicked\n",str);
}
else
{
delay_ms(10);
}
t++;
//set speed
if(t==lcdSpeed)
{
t=0;
LED0=!LED0;
//ÉÁ80´ÎÏÔʾһ´Î´òÓ¡ÐÅÏ¢
if(0 == times % 80)
{
printf("I'm LED, light changed %d times\n",times);
}
times++;
}
}
}
OK,拿去 happy吧~~~~~~
我把hex文件也放在这里,可以用你们家里的遥控器来试验一下,是否可以使用吧。
本帖最后由 daheix 于 2016-11-5 20:22 编辑
没有看到大家玩红外遥控器,我来玩一个;
首先咨询QQ群里面的朋友,知道红外遥控器的例子是:exam22IRDA 目录中。所以我就用这个来自己玩一下;
1、保证工程i编译通过
2、我没有led显示屏幕,屏幕是坏的,所以我只好使用串口打印,来查看我的按键的信息。方法是添加 printf函数打印信息到串口显示。
3、加载包后,串口一直没有打印按键消息。然后我就一直尝试。看原理图发现有个LED跳线,两个针脚。我就尝试把这两个用跳线帽跳上。结果就打印出来信息了。
相关配置如下:
整体的实验硬件:主板 + 遥控器(我使用的是别的网络机顶盒的)
【备注】我也实验了那种LED灯带的小遥控器,但是无法接收到任何信息,估计不是一路货色。
跳线连接放大图
串口打印结果显示图:
实验修改的test.c代码如下:
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "lcd.h"
#include "usmart.h"
#include "key.h"
#include "remote.h"
int main(void)
{
u32 times = 1; //LED闪烁的总次数
u8 key;
u8 t=0;
u8 *str=0;
uart_init(72,9600); //串口初始化为9600
delay_init(72); //延迟初始化
LED_Init(); //初始化LED
LCD_Init(); //初始化LCD
Remote_Init(); //红外线接收器初始化
POINT_COLOR=RED; //设置字体颜色
LCD_ShowString(30,40,200,24,24,"Dev Board ^_^");
LCD_ShowString(60,70,200,16,16,"REMOTE TEST");
LCD_ShowString(60,90,200,16,16,"M3");
LCD_ShowString(60,110,200,16,16,"2014/3/12");
LCD_ShowString(60,130,200,16,16,"KEYVAL:");
LCD_ShowString(60,150,200,16,16,"KEYCNT:");
LCD_ShowString(60,170,200,16,16,"SYMBOL:");
while(1)
{
key=Remote_Scan();
if(key)
{
LCD_ShowNum(116,130,key,3,16); //显示键值
printf("onclick %d\n",key);
LCD_ShowNum(116,150,RmtCnt,3,16); //显示按键次数
printf("onclick times: %d\n",RmtCnt);
switch(key)
{
case 0:str="ERROR";break;
case 162:str="POWER";break;
case 98:str="UP";break;
case 2:str="PLAY";break;
case 194:str="RIGHT";break;
case 34:str="LEFT";break;
case 224:str="VOL-";break;
case 168:str="DOWN";break;
case 144:str="VOL+";break;
case 104:str="1";break;
case 152:str="2";break;
case 176:str="3";break;
case 48:str="4";break;
case 24:str="5";break;
case 122:str="6";break;
case 16:str="7";break;
case 56:str="8";break;
case 90:str="9";break;
case 66:str="0";break;
case 82:str="DELETE";break;
}
LCD_Fill(116,170,116+8*8,170+16,WHITE); //清屏
LCD_ShowString(116,170,200,16,16,str); //显示 按键 值
printf(" onclicked\n",str);
}else delay_ms(10);
t++;
if(t==20)
{
t=0;
LED0=!LED0;
//80秒显示一次打印信息
if(0 == times % 80)
{
printf("I'm LED, light changed %d times\n",times);
}
times++;
}
}
}
发现的问题:
【1】遥控器会突然的无法正常显示按键信息,这个时候,将红外跳线重新插拔跳线帽,就好了。这个应该室友问题。
【2】我按一次按键,会连续显示4次,这个应该是遥控器的问题,是为了保证控制信号真正的发送出去,这个需要在 接收端 做相关的处理,相同的4次按键,只处理一次有效的 就可以了。这个也是为了保证实际使用而做的保护措施吧。多次发送策略。
总结:其他的东西,慢慢玩,呵呵。然后就可以控制其他的各种东西了。
通过打印,把自己的遥控器都配置起来。实现了 通过遥控器的1到9来控制LED灯的闪烁的速度。1最快,9最慢;
代码很简单,修改了上面的几行代码而已:
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "lcd.h"
#include "usmart.h"
#include "key.h"
#include "remote.h"
int main(void)
{
u32 times = 1; //¿ª»úµ½ÏÖÔڵĵÆÉÁ˸µÄ´ÎÊý
u32 lcdSpeed = 20;
u8 key;
u8 t=0;
u8 *str=0;
uart_init(72,9600); //´®¿Ú³õʼ»¯Îª9600
delay_init(72); //ÑÓʱ³õʼ»¯
LED_Init(); //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
LCD_Init(); //³õʼ»¯LCD
Remote_Init(); //ºìÍâ½ÓÊÕ³õʼ»¯
POINT_COLOR=RED;//ÉèÖÃ×ÖÌåΪºìÉ«
LCD_ShowString(30,40,200,24,24,"Dev Board ^_^");
LCD_ShowString(60,70,200,16,16,"REMOTE TEST");
LCD_ShowString(60,90,200,16,16,"M3");
LCD_ShowString(60,110,200,16,16,"2014/3/12");
LCD_ShowString(60,130,200,16,16,"KEYVAL:");
LCD_ShowString(60,150,200,16,16,"KEYCNT:");
LCD_ShowString(60,170,200,16,16,"SYMBOL:");
while(1)
{
key=Remote_Scan();
if(key)
{
LCD_ShowNum(116,130,key,3,16); //ÏÔʾ¼üÖµ
printf("onclick %d\n",key);
LCD_ShowNum(116,150,RmtCnt,3,16); //ÏÔʾ°´¼ü´ÎÊý
printf("onclick times: %d\n",RmtCnt);
switch(key)
{
case 0:str="ERROR";break;
case 24:str="PWOER ON/OFF";break;
case 16:str="MUTE";break; //¾²Òô
case 106:str="ZHI BO";break;
case 234:str="DIAN BO";break;
case 248:str="YING YONG";break;
case 218:str="SETTING";break;
case 186:str="LAST";break;
case 58:str="NEXT";break;
case 40:str="VOL +";break;
case 8:str="VOL -";break;
case 32:str="MENU";break;
case 216:str="INFO";break;
case 98:str="UP";break;
case 226:str="LEFT";break;
case 170:str="OK";break;
case 168:str="RIGHT";break;
case 104:str="DOWN";break;
case 96:str="HOME";break;
case 2:str="RETURN";break;
//set speed by the button
case 42:
lcdSpeed = 20;//这里控制速度
str="1";
break;
case 18:str="2";lcdSpeed = 40;break;
case 224:str="3";lcdSpeed = 60;break;
case 10:str="4";lcdSpeed = 80;break;
case 72:str="5";lcdSpeed = 100;break;
case 136:str="6";lcdSpeed = 120;break;
case 50:str="7";lcdSpeed = 140;break;
case 112:str="8";lcdSpeed = 160;break;
case 176:str="9";lcdSpeed = 180;break;
case 232:str="MOUSE_MODE";break;
case 48:str="0";break;
}
LCD_Fill(116,170,116+8*8,170+16,WHITE); //Çå³þ֮ǰµÄÏÔʾ
LCD_ShowString(116,170,200,16,16,str); //ÏÔʾSYMBOL
printf(" onclicked\n",str);
}
else
{
delay_ms(10);
}
t++;
//set speed
if(t==lcdSpeed)
{
t=0;
LED0=!LED0;
//ÉÁ80´ÎÏÔʾһ´Î´òÓ¡ÐÅÏ¢
if(0 == times % 80)
{
printf("I'm LED, light changed %d times\n",times);
}
times++;
}
}
}
OK,拿去 happy吧~~~~~~
我把hex文件也放在这里,可以用你们家里的遥控器来试验一下,是否可以使用吧。