历史上的今天
返回首页

历史上的今天

今天是:2025年04月04日(星期五)

2020年04月04日 | 基于AVR单片机的红外接收程序设计

2020-04-04 来源:elecfans

使用一体化的红外接收头,直接就解码出来了,平时红外接收头输出的是高电平,当有红外数据的时候,就会根据发送的红外数据有相应的电平转换。大家可以随便找个遥控板,测一下红外接收波形,看看高低电平的表示,便于计数及接收步骤。这次用的遥控板的红外协议是这样的:


0.6ms高电平+0.48ms低电平表示0,接收解码出来是0.6ms低电平+0.48ms高电平。

0.6ms高电平+1.66ms低电平表示1,接收解码出来是0.6ms低电平+1.66ms高电平。

调制38kHz,占空比1/3.

遥控发送数据先是9ms高电平,4.5ms低电平,然后是两个字节的识别码,接着是一个字节的数据和一个字节的数据反码。


单片机解码0和1只用计数接收到的低电平长度就行了。

基于AVR单片机的红外接收程序设计

具体的程序如下:

//interrp.c

#include

#include “interrp.h”

void Interrp_int0_init(void)

{

SREG=0X80;

GICR|=(1《MCUCR=0X00;//0X00低电平中断;0x01:电平变化中断;

//0x02:下降沿;0x03:上升沿;

}

void Interrp_int1_init(void)

{

SREG=0X80;

GICR|=(1《MCUCR=0X08;//0X00低电平中断;0x04:电平变化中断;

//0x08:下降沿;0x0c:上升沿;

}

void Interrp_int0_stop(void)

{

GICR&=~(1《}

void Interrp_int1_stop(void)

{

GICR&=~(1《}

//main.c

#include

#include “mytype.h”

#include “uart.h”

#include “interrp.h”

#include “timer.h”

#define IR 2

#define PIN4 PIND

#define DDR4 DDRD

#define in_IR (PIN4&(1《

uint8 code_0,code_1,data_0,data_1;

uint8 table[16]={“0123456789abcdef”};

#pragma interrupt_handler IR_init:2

void IR_init(void)

{uint8 i;

Interrp_int0_stop();//关中断。

i=Data_dec();//红外数据检测。

if(i==0)

{

Send_abyte(table[TCNT1/4096]);

Send_abyte(table[TCNT1%4096/256]);

Send_abyte(table[TCNT1%256/16]);

Send_abyte(table[TCNT1%16]);

Prints(“Error”,1);

}

code_0=0;

code_1=0;

data_0=0;

data_1=0;

DelayXms(100);

Interrp_int0_init();

}

uint8 Data_dec(void)

{

uint8 i;

while(in_IR==0);//等待红外输入变高。

TImer1_init();//定时器计数开始。

while(in_IR);//等待红外输入变低。

TImer1_stop();//定时计数停止。

if((TCNT1《26980)|(TCNT1》34980))

return 0; //4.5ms红外起始接受检测,不对返回0.

for(i=0;i《8;i++)

{

while(in_IR==0);//等待红外输入高。

TImer1_init();//定时计数开始。

while(in_IR);//等待红外输入变低。

TImer1_stop();//定时计数停止。

/*Send_abyte(table[TCNT1/4096]);

Send_abyte(table[TCNT1%4096/256]);

Send_abyte(table[TCNT1%256/16]);

Send_abyte(table[TCNT1%16]);

Send_abyte(‘ ’);*/

if((TCNT1《4400)&&(TCNT1》3400))

;

else

code_0=(code_0+(1《} //地址码接受;

for(i=0;i《8;i++)

{

while(in_IR==0);

Timer1_init();

while(in_IR);

Timer1_stop();

if((TCNT1《4400)&&(TCNT1》3400))

;

else

code_1=(code_1+(1《} //地址码接受;

for(i=0;i《8;i++)

{

while(in_IR==0);

Timer1_init();

while(in_IR);

Timer1_stop();

if((TCNT1《4400)&&(TCNT1》3400))

;

else

data_0=(data_0+(1《} //数据码接受;

for(i=0;i《8;i++)

{

while(in_IR==0);

Timer1_init();

while(in_IR);

Timer1_stop();

if((TCNT1《4400)&&(TCNT1》3400))

;

else

data_1=(data_1+(1《} //数据反码接受;

Data_process();

}

void Data_process(void)//发送接受数据到串口。

{

Send_abyte(table[code_0/16]);

Send_abyte(table[code_0%16]);

Send_abyte(‘ ’);

Send_abyte(table[code_1/16]);

Send_abyte(table[code_1%16]);

Send_abyte(‘ ’);

Send_abyte(table[data_0/16]);

Send_abyte(table[data_0%16]);

Send_abyte(‘ ’);

Send_abyte(table[data_1/16]);

Send_abyte(table[data_1%16]);

Send_abyte(10);

Send_abyte(13);

}

void main(void)

{

DDR4&=~(1《Uart_init();

Prints(“System init.。.”,1);

Interrp_int0_init();

while(1);

}

推荐阅读

史海拾趣

Consolidated Wire公司的发展小趣事

随着业务的不断发展,Consolidated Wire公司开始积极拓展国内外市场。公司加大了市场推广力度,通过参加行业展会、举办技术研讨会等方式提升品牌知名度。同时,公司还积极开拓海外市场,与国际知名企业建立合作关系,实现了业务的全球化布局。这些举措不仅提升了公司的市场份额,也增强了公司在电子行业的影响力。

驰芯微(CHIPWISE)公司的发展小趣事

驰芯微公司与明然科技的合作是公司在技术创新方面的又一重要突破。双方共同研发的MCU控制芯片成功应用于主动悬架项目,并在奇瑞的星途瑶光、瑞虎9等车型上取得了重要进展。这一合作不仅提升了国产芯片在高端配置车型中的应用水平,也进一步推动了驰芯微在汽车电子领域的发展。

上海晶岳(AFSEMI)公司的发展小趣事

为了保持技术领先和市场竞争力,晶岳电子一直注重研发团队的建设。目前,公司在上海、深圳及台湾均建有成熟的产品研发团队,核心功率器件及集成电路设计人员均拥有15年以上的设计研发经验。这些优秀的研发人员不仅为公司带来了源源不断的技术创新,也确保了公司在激烈的市场竞争中始终保持领先地位。此外,晶岳电子还积极与高校和研究机构合作,共同开展前沿技术的研发和应用。

Antenova公司的发展小趣事

Antenova公司积极寻求与其他行业领导者的战略合作,以推动公司的成长和发展。通过与全球知名的芯片制造商、设备生产商等建立合作关系,Antenova得以将其天线产品集成到更广泛的电子产品中,从而进一步扩大了市场份额。这些战略合作不仅提升了Antenova的品牌知名度,还为公司的长期发展提供了有力支持。

以上是关于Antenova公司发展起来的五个相关故事,这些故事展示了公司在技术创新、市场拓展、产品推出、专业服务以及战略合作等方面的努力和成就。这些成就为Antenova在电子行业中的成功奠定了坚实基础,并为公司未来的持续发展提供了有力保障。

ADLINK公司的发展小趣事

Antenova公司在天线设计领域的创新是其迅速发展的关键因素之一。公司专注于研发高效率、低能耗、高可靠性的天线产品,以满足快速增长的物联网市场需求。通过不断的技术创新和产品升级,Antenova成功在智能家居、汽车、可穿戴设备等多个领域取得了显著的市场份额增长。

Greenconn Corp公司的发展小趣事
避免将过多食物一次性放入冰箱,以减少冰箱电机的负荷。

问答坊 | AI 解惑

2008中国Linux从业者职位分析报告

近日,我们针对国内知名招聘网站中2007年12月16日至22日近一周关于Linux、Windows以及Unix人才的21679条招聘信息进行了汇总分析。        在这一周的招聘信息中:对Linux有招聘需求的企业数量共有2694家,有8516个具 ...…

查看全部问答>

WinCE通信指南之配套光盘

WinCE通信指南之配套光盘…

查看全部问答>

各位大虾帮帮忙

各位大侠你们好 小弟是刚刚学习80c514汇编程序 用keil软件编辑生成的后缀名为hex的文件,(保证编译等一切正常),但是我用编程器软件想把hex文件调到软件里面准备写进芯片,但是怎么也掉不进去,显示的界面全是ff 16进制的东西,还请各位大虾指 ...…

查看全部问答>

DM642图像显示问题

我买了一个DM642开发板,程序用CCS的Load Program调入运行显示正常,但是用flashburn将程序写入flash加电自启动运行,图像显示错位,上面部分跑到下面了,有时候图像中间图像一个黑十字。有那位高手遇到过这个问题,希望能指导一下,酬谢500-1000. ...…

查看全部问答>

介绍好的无线模块!!!

苏州天铱电子搞活动了,赶紧去看看,或者联系qq:472230383 www.tianyi-dz.com …

查看全部问答>

索尼笔记本电脑问题 ERROR 0200:Failure Fixed Disk 0怎么解决?

我的索尼笔记本电脑是2004年买的,最近开机出现如下问题提示信息 ERROR 0200:Failure Fixed Disk 0 Press resume Press to Setup 按F1之后,提示 The operating system not found 请问各位专家怎么以上问题解决?…

查看全部问答>

Zigbee配置开发环境出错

MPLAB IDE 编译程序时报错(copy了一个简单的例子,可以肯定程序没有错误,可能是环境没配置好) Debug build of project `D:\\Zigbee\\exp\\hello.mcp\' started. Preprocessor symbol `__DEBUG\' is defined. Tue Jun 01 17:56:48 2010 ----- ...…

查看全部问答>

高分求解linux 输入法的问题

高分求解linux 输入法的问题 http://community.eeworld.net/Expert/TopicView3.asp?id=5341375…

查看全部问答>

关于VDDA,VSSA

                                 STM32F MCU的数据手册上说,VDDA直接接到VDD上.此说法不妥.VDDA是模拟电源,与VDD之间应加磁珠隔离.…

查看全部问答>

I2C实在搞不定了

各位大大的程序,官方的,民间的,都试过了,开发板上的,有时复位后可以,大部分时间不行.俺投降了.接的是FM24C16 .用I2C1最常见的现象: SCL常高,无信号. SDA常低,亦无信号.导致BUSY位始终为1PB6 PB7设置为Open-drain.两个脚都 ...…

查看全部问答>