基于ARM的红外遥控信号分析器设计.docx

上传人:b****6 文档编号:8253313 上传时间:2023-01-30 格式:DOCX 页数:16 大小:700.24KB
下载 相关 举报
基于ARM的红外遥控信号分析器设计.docx_第1页
第1页 / 共16页
基于ARM的红外遥控信号分析器设计.docx_第2页
第2页 / 共16页
基于ARM的红外遥控信号分析器设计.docx_第3页
第3页 / 共16页
基于ARM的红外遥控信号分析器设计.docx_第4页
第4页 / 共16页
基于ARM的红外遥控信号分析器设计.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

基于ARM的红外遥控信号分析器设计.docx

《基于ARM的红外遥控信号分析器设计.docx》由会员分享,可在线阅读,更多相关《基于ARM的红外遥控信号分析器设计.docx(16页珍藏版)》请在冰豆网上搜索。

基于ARM的红外遥控信号分析器设计.docx

基于ARM的红外遥控信号分析器设计

ARM课程设计报告

基于ARM的红外遥控信号分析器设计

院系:

机电工程学院

专业:

电子信息工程

年级(班级):

xxxx级(x)班

姓名:

xxx

学号:

xxxxxxxxxxx

指导教师:

xxx

职称:

讲师

完成日期:

2014年x月xx日

目录

1设计任务及要求1

2总体设计思路及功能描述1

2.1设计思路1

2.2功能描述1

3各部分程序功能及详细设计2

3.1红外显示界面设计2

3.2红外按键检测流程3

3.3红外接收信号检测的程序实现3

3.4红外接收结果显示5

4调试的步骤及调试过程中出现的问题以及解决方法6

4.1调试的步骤6

4.2问题以及解决方法7

5设计心得体会7

附录A:

源程序9

基于ARM的红外遥控信号分析器设计

1设计任务及要求

这次的ARM课程设计,我选的课题是基于ARM的红外遥控信号分析器设计,需设计一个能在LCD屏上显示所接收的红外遥控按键名称。

其实现的功能如下:

(1)能接收并显示普通电视红外遥控信号

(2)译码遥控信号并显示

2总体设计思路及功能描述

2.1设计思路

本次设计方案就是利用ARM的多功能性的特点来设计的,具体思路为利用S3C2440和触摸屏的驱动对产生的信号进行触摸屏显示,设计框图如下图。

 

图1总体框图

1、以ARM作为核心,综合应用了中断系统、定时器、计数器等知识,应用红外光的优点

2、遥控发射器通过对红外光发射频率的控制来区别不同的操作 

3、遥控接收器通过对红外光接收频率的识别,判断出控制操作,来完成整个红外遥控发射、接收过程

4、S3C2440通过对遥控接收器的信号分析处理,解码出遥控器上对应的按键,并将其按键名显示在LCD屏上。

2.2功能描述

能在LCD屏上显示所接收的红外遥控按键名称。

其实现的功能如下:

(1)能接收并显示普通电视红外遥控信号

(2)译码遥控信号并显示

3各部分程序功能及详细设计

3.1红外显示界面设计

图2红外显示界面

红外显示界面的程序实现:

GUI_SetBkColor(GUI_RED);

GUI_Clear();

GUI_SetPenSize(10);

GUI_SetColor(GUI_BLACK);//设定前景颜色API

GUI_SetTextMode(GUI_TM_TRANS);

GUI_DispStringHCenterAt("红外遥控按键显示",240,10);

GUI_DispStringHCenterAt("您按下的按键是:

",60,100);

GUI_DispStringHCenterAt("xx电信(x)班",250,200);

GUI_DispStringHCenterAt("xxxxx号",245,220);

3.2红外按键检测流程

 

 

 

图3红外按键检测流程图

红外接收头检测到遥控器红外发射来的信号,S3C2440对信号进行分析处理,判断是否接收到正确的红外信号编码,如果信号错误重新开始检测,若成功识别,则将遥控按键名称显示在LCD屏上。

3.3红外接收信号检测的程序实现

unsignedcharj,k,N=0,L=0,X=21;

while((rGPGDAT&0x1)==0)

{

delay(15);

if(rGPGDAT&0x1)

{

break;

}

//确认IR信号出现

while((rGPGDAT&0x1)==0)//等IR变为高电平,跳过9ms的前导低电平信号。

{delay

(1);}

while(rGPGDAT&0x1)//等IR变为低电平,跳过4.5ms的前导高电平信号。

{delay

(1);

L++;

}

if(L>3)

{break;}

for(j=0;j<4;j++)//收集四组数据

{

for(k=0;k<8;k++)//每组数据有8位

{

while((rGPGDAT&0x1)==0)//等IR变为高电平

{delay

(1);}

while(rGPGDAT&0x1)//计算IR高电平时长

{

delay

(1);

N++;

if(N>=30)//0.14ms计数过长自动离开。

{break;}

}//高电平计数完毕

IRCOM[j]=IRCOM[j]>>1;//数据最高位补“0”

if(N>=8){IRCOM[j]=IRCOM[j]|0x80;}//数据最高位补“1”

N=0;

}//endfork

}//endforj

/*if(IRCOM[2]!

=(~IRCOM[3]))

{

break;

}*/

IRCOM[5]=IRCOM[2]&0x0F;//取键码的低四位

IRCOM[6]=IRCOM[2]>>4;//右移4次,高四位变为低四位

3.4红外接收结果显示

图4红外接收显示结果

3.5程序流程图

 

Y

 

图7设计总流程图

4调试的步骤及调试过程中出现的问题以及解决方法

4.1调试的步骤

1、连接实验箱与计算机的串口线,打开计算机超级终端,并设定为com1,115200,8,1,0N

2、连接仿真调试电缆(J-Link)。

3、打开ARM集成开发环境ADS,按要求编写或打开实验程序。

4、根据实验内容要求编写,调试程序。

5、通过ADS的DEBUG把编写好的程序加载到J-Link,进行程序仿真测试。

6、记录相关数据和实验现象。

7、调试完毕,整理实验箱,并切断实验箱电源。

4.2问题以及解决方法

1、出现文件找不到的错误。

通过菜单的Project->Removeobject,并重新编译程序,生成新的.axf文件,便可解决问题。

2、调试时发现无法解码红外信号,经排除遥控器电量不足的可能后,用示波器直接对红外接收头的输出引脚进行波形观测,当按下遥控按键时,示波器会显示出一瞬间的波形,按住不放时,遥控器会间断发射循环码,从示波器的波形分析,红外接收到的波形是正确的。

因为红外遥控发射的红外信号遵循NEC协议,而程序是用定时器进行延时,然后对延时进行计数,对计数值进行分析处理可得到遥控器的红外编码,因此延时时间需要比较精准。

用延时程序写一个简单的方波,再用示波器观测其延时时间,经过调整,将延时调节到了理想状态,再重新编译程序,便成功的接收到了正确的红外信号。

3、将遥控的按键名显示在LCD上,出现数据更新时重叠显示,进查阅GUI手册,调用清初文字的函数,在每次跟新按键名之前,运行该函数,便解决该问题。

5设计心得体会

在本次的ARM课程设计过程中,从构思设计到实现,遇到了很多问题,但都一一克服了。

本次课程设计让我们对嵌入式系统的硬件和软件的基本原理、基本特点,嵌入式系统设计的基本方法有了更进一步的了解掌握。

通过课程设计,我们对ARM这门课程有了更深一步的了解。

也让我感受到了ARM的强大与重要,意识到我们需要花更多的时间去将ARM的理论应用到实践中去,多动手,多去解决问题,锻炼自己解决问题的能力,积累经验,才能正在学好ARM这门课程。

这次课程设计,我经过自己的努力,在老师同学的帮助下,顺利完成了。

参考文献

[1]戴峻峰,付丽辉.多功能红外线遥控器的设计.2002.8(12):

16~18.

[2]苏长赞.红外线与超声波遥控,北京:

人民邮电出版社.1995年.

[3]杨恢先,王子菡,杨穗,陶霞.一种基于单片机的红外遥控软件解码方法,自动化与仪器仪表.2004,22

(2):

16~18.

[4]s3c2440中文数据手册(完整版).pdf.

[5]ARM公司.arm指令集[EB/OL].[2013-06-10],

附录A:

程序

#include"config.h"

#include"gui.h"

voidledflash(void);

staticvoid__irqkey_handler(void);

voidkey_init(void);

unsignedcharIRCOM[7];

unsignedcharPRING[21][10]={"关机","SETUP","静音","MODE","返回",

"EQ","后退","前进","暂停/播放","音量减",

"音量加","0","1","2","3",

"4","5","6","7","8","9"};

voidusDelay(inttime)

{

inti,j;

for(i=time;i>0;i--)

for(j=1;j>0;j--);

}

voiddelay(unsignedcharx)//x*0.14MS

{

inty;

for(y=0;y

usDelay(134);

}

voidledflash(void)

{

inti;

/*

rGPGCON=(rGPGCON&0xFFFFFFF0)|(0xd<<0);

rGPGDAT=rGPGDAT&0xfffe|0x0;

for(i=0;i<100000;i++);//延时

rGPGDAT=rGPGDAT&0xfffe|0x1;

for(i=0;i<100000;i++);//延时

rGPBDAT=(rGPBDAT&0xf0f)|(0xd<<4);

for(i=0;i<500000;i++);//延时

rGPBDAT=(rGPBDAT&0xfff)|(0xf<<4);

for(i=0;i<500000;i++);//延时

}

voidMain()

{

/*TargetInit();

rGPFCON=(rGPFCON&0xFF0F)|(0x7<<4);

while

(1)

{

delay

(1);

rGPFDAT=(rGPFDAT&0xf7)|(1<<3);

delay

(1);

rGPFDAT=(rGPFDAT&0xf7)|(0<<3);

}

*/

unsignedcharh=0,l=0;

TargetInit();

GUI_Init();

rGPBCON=(rGPBCON&0xfff3ff)|(0x4<<8);

rGPGUP&=0xfffe|0x1;

rGPGCON=(rGPGCON&0xFFFFFFF0)|(0xc<<0);

GUI_SetBkColor(GUI_RED);

GUI_Clear();

GUI_SetPenSize(10);

GUI_SetColor(GUI_BLACK);

//设定前景颜色API

GUI_SetTextMode(GUI_TM_TRANS);

GUI_DispStringHCenterAt("红外遥控按键显示",240,10);

GUI_DispStringHCenterAt("您按下的按键是:

",60,100);

GUI_DispStringHCenterAt("xx电信(x)班",250,200);

GUI_DispStringHCenterAt("xxxxx号",245,220);

while

(1)

{

unsignedcharj,k,N=0,L=0,X=21;

while((rGPGDAT&0x1)==0)

{

delay(15);

if(rGPGDAT&0x1)

{

break;

}

//确认IR信号出现

while((rGPGDAT&0x1)==0)//等IR变为高电平,跳过9ms的前导低电平信号。

{delay

(1);}

while(rGPGDAT&0x1)

//等IR变为低电平,跳过4.5ms的前导高电平信号。

{delay

(1);

L++;

}

if(L>3)

{break;}

for(j=0;j<4;j++)//收集四组数据

{

for(k=0;k<8;k++)//每组数据有8位

{

while((rGPGDAT&0x1)==0)//等IR变为高电平

{delay

(1);}

while(rGPGDAT&0x1)

//计算IR高电平时长

{

delay

(1);

N++;

if(N>=30)//0.14ms计数过长自动离开。

{break;}

}

//高电平计数完毕

IRCOM[j]=IRCOM[j]>>1;//数据最高位补“0”

if(N>=8){IRCOM[j]=IRCOM[j]|0x80;}//数据最高位补“1”

N=0;

}//endfork

}//endforj

/*if(IRCOM[2]!

=(~IRCOM[3]))

{

break;

}*/

IRCOM[5]=IRCOM[2]&0x0F;

//取键码的低四位

IRCOM[6]=IRCOM[2]>>4;

//右移4次,高四位变为低四位

if(IRCOM[5]>9)

{l=IRCOM[5]+0x37;}

else

l=IRCOM[5]+0x30;

if(IRCOM[6]>9)

{h=IRCOM[6]+0x37;}

else

h=IRCOM[6]+0x30;

if((h==(4+0x30))&(l==(8+0x30)))

{X=0;}

if((h==(2+0x30))&(l==(8+0x30))|(h==(14+0x37))&(l==(5+0x30)))

{X=1;}

if((h==(0+0x30))&(l==(8+0x30))|(h==(14+0x37))&(l==(1+0x30)))

{X=2;}

if((h==(6+0x30))&(l==(8+0x30)))

{X=3;}

if((h==(14+0x37))&(l==(8+0x30)))

{X=4;}

if((h==(8+0x30))&(l==(8+0x30)))

{X=5;}

if((h==(0+0x30))&(l==(0+0x30)))

{X=6;}

if((h==(4+0x30))&(l==(2+0x30))|(h==(10+0x37))&(l==(8+0x30)))

{X=7;}

if((h==(12+0x37))&(l==(1+0x30)))

{X=8;}

if((h==(2+0x30))&(l==(2+0x30))|(h==(10+0x37))&(l==(4+0x30)))

{X=9;}

if((h==(9+0x30))&(l==(8+0x30))|(h==(12+0x37))&(l==(3+0x30))|(h==(15+0x37))&(l==(15+0x35)))

{X=10;}

if((h==(4+0x30))&(l==(1+0x30))|(h==(12+0x37))&(l==(8+0x30)))

{X=11;}

if((h==(6+0x30))&(l==(1+0x30))|(h==(12+0x37))&(l==(12+0x37)))

{X=12;}

if((h==(14+0x37))&(l==(3+0x30))|(h==(9+0x30))&(l==(12+0x37)))

{X=13;}

if((h==(2+0x30))&(l==(11+0x37))|(h==(8+0x30))&(l==(5+0x30)))

{X=14;}

if((h==(14+0x37))&(l==(1+0x30))|(h==(13+0x37))&(l==(12+0x37)))

{X=15;}

if((h==(6+0x30))&(l==(3+0x30))|(h==(8+0x30))&(l==(12+0x37)))

{X=16;}

if((h==(10+0x37))&(l==(11+0x37))|(h==(9+0x30))&(l==(5+0x30)))

{X=17;}

if((h==(10+0x37))&(l==(8+0x30)))

{X=18;}

if((h==(10+0x37))&(l==(10+0x37))|(h==(11+0x37))&(l==(5+0x30)))

{X=19;}

if((h==(10+0x37))&(l==(9+0x30))|(h==(13+0x37))&(l==(5+0x30)))

{X=20;}

GUI_GotoXY(150,100);

GUI_DispCEOL();

GUI_DispStringAtCEOL(&PRING[X],235,100);

//GUI_DispStringHCenterAt(&PRING[X],150,100);

/*GUI_SetFont(&GUI_Font8x16);

GUI_GotoXY(150,100);

GUI_DispCEOL();

GUI_GotoXY(150,100);

GUI_DispChar(h);

GUI_GotoXY(170,100);

GUI_DispCEOL();

GUI_GotoXY(170,100);

GUI_DispChar(l);*/

}

}

}

voidkey_init(void)

{

rGPGCON&=~(0x3<<0);

rGPGCON|=(0x2<<0);

rEXTINT1&=~(0xf<<0);

rEINTPEND|=(1<<8);

rEINTMASK&=~(1<<8);

pISR_EINT8_23=(U32)key_handler;

EnableIrq(BIT_EINT8_23);

}

staticvoid__irqkey_handler(void)

{

if(rINTPND==BIT_EINT8_23);

{

ClearPending(BIT_EINT8_23);

if(rEINTPEND&(1<<8))

rEINTPEND|=(1<<8);

for(;;){ledflash();}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1