串口通信发送红外遥控器解码值.docx

上传人:b****4 文档编号:13896621 上传时间:2023-06-19 格式:DOCX 页数:8 大小:16.17KB
下载 相关 举报
串口通信发送红外遥控器解码值.docx_第1页
第1页 / 共8页
串口通信发送红外遥控器解码值.docx_第2页
第2页 / 共8页
串口通信发送红外遥控器解码值.docx_第3页
第3页 / 共8页
串口通信发送红外遥控器解码值.docx_第4页
第4页 / 共8页
串口通信发送红外遥控器解码值.docx_第5页
第5页 / 共8页
串口通信发送红外遥控器解码值.docx_第6页
第6页 / 共8页
串口通信发送红外遥控器解码值.docx_第7页
第7页 / 共8页
串口通信发送红外遥控器解码值.docx_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

串口通信发送红外遥控器解码值.docx

《串口通信发送红外遥控器解码值.docx》由会员分享,可在线阅读,更多相关《串口通信发送红外遥控器解码值.docx(8页珍藏版)》请在冰点文库上搜索。

串口通信发送红外遥控器解码值.docx

串口通信发送红外遥控器解码值

串口通信发送红外遥控器解码值

本程序所用的原理图下载:

点这里,单片机芯片使用的stc89c52;找到数码管的原理图即可.这是一整个单片机开发板的电路图其他的忽略.

/**

***********************************************************************************************

*@file

main.c

*@author

xr

*@date

2014年3月31日10:

26:

47

*@version

V1.2.3

*@brief

红外通信NEC协议进行红外遥控器解码显示用户码和键码到数码管上

*@note

单片机STC89C52RCMCU晶振11.0592MHZ

***********************************************************************************************

*/

#include;

//红外输出数据口

sbitIRD=P3^3;//外部中断引脚

bitirflag=0;

unsignedcharircode[4];//接收解码得到的数据

unsignedcharcodeLedTable[]={

0xC0,//"0"

0xF9,//"1"

0xA4,//"2"

0xB0,//"3"

0x99,//"4"

0x92,//"5"

0x82,//"6"

0xF8,//"7"

0x80,//"8"

0x90,//"9"

0x88,//"A"

0x83,//"B"

0xC6,//"C"

0xA1,//"D"

0x86,//"E"

0x8E

//"F"

};

unsignedcharLedBuff[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};//数码管显示缓冲区

unsignedcharthr0,tlr0;

voidConfigTimer0(unsignedintxms);

voidConfigTimer1();

voidmain()

{

ConfigTimer0

(1);//定时1ms

ConfigTimer1();

while

(1)

{

if(irflag)//接收到红外数据,则刷新显示

{

LedBuff[5]=LedTable[ircode[0]>;>;4];//取用户码的高4位字节

LedBuff[4]=LedTable[ircode[0]&0x0F];//取用户码的低四位字节

LedBuff[1]=LedTable[ircode[2]>;>;4];//取键码的高四位

LedBuff[0]=LedTable[ircode[2]&0x0F];//取键码的低四位

}

}

}

/**

*@brief

定时器T0配置

*@param

定时时间xms

*@retval

*/

voidConfigTimer0(unsignedintxms)

{

unsignedinttmp;

tmp=65536-xms*11059200/12/1000;

thr0=(unsignedchar)(tmp>;>;8);

tlr0=(unsignedchar)(tmp&0x00FF);

TMOD&=0xF0;

TMOD|=0x01;//T0方式1

TH0=thr0;

TL0=tlr0;

TR0=1;

EA=1;

ET0=1;

//设置定时器T0的中断优先级高于外部中断的优先级

//IP中断优先级寄存器PT2PSPT1PX1PT0PX0

PT0=1;//提高T0的优先级,优先进行数码管刷新,消除数码管显示抖动

}

/**

*@brief

数码管刷新

*@param

*@retval

*/

voidrefresh()

{

staticunsignedcharj=0;

P0=0xFF;//消隐

P1=(0x08|j);//00001ADDR2ADDR1ADDR0

P0=LedBuff[j++];

if(j>;=6)

j=0;

}

/**

*@brief

T0中断服务

*@param

*@retval

*/

voidTimer0_ISP()interrupt1

{

TH0=thr0;

TL0=tlr0;

refresh();//数码管刷新

}

/**********************红外解码*************************************/

/**

*@brief

配置定时器T1,开启外部中断,T1用来计数

*@param

*@retval

*/

voidConfigTimer1()

{

TMOD&=0x0F;//清零T1控制位

TMOD|=0x10;//T1方式1

TH1=0;

TL1=0;//初始化计数值为0

TR1=0;//在没有进入外部中断前,先关闭定时器T1

ET1=0;//关闭T1中断,只用来计数

IT1=1;//设置外部中断为下降沿触发中断

EX1=1;//开启外部中断

}

/**

*@brief

获得高电平时间(空闲时间)

*@param

*@retval

*/

unsignedintgetHeighTime()

{

//在检测外部电平之前,先将红外检测引脚拉高释放

IRD=1;

TH1=0;

TL1=0;//重新清零

TR1=1;//打开定时器T1开始计数

while(IRD)

{

//进行超时判断,若高电平时间大于9ms,即引导码时间,则直接退出

if(TH1>;0x40)//(0x40*256)*(12/11059200)s=17.7ms

{

break;//退出

}

}

TR1=0;//关闭计数

return(TH1*256+TL1);//返回IRD引脚持续的高电平时T1计数值

}

/**

*@brief

获取低电平时间(载波)

*@param

*@retval

*/

unsignedintgetLowTime()

{

//释放IRD检测引脚

IRD=1;

TH1=0;

TL1=0;//清零T1计数值

TR1=1;//启动T1计数

while(!

IRD)

{

if(TH1>;0x40)//TL1计数满则进位TH1,时间:

TH1*256*12/11059200s=17.7ms

{//时间大于了NEC协议的引导码载波时间9ms,进行强制退出,避免假等待

break;

}

}

TR1=0;//关闭计数

return(TH1*256+TL1);//返回低电平持续的计数值每计数一次是一个机器周期的时间即1.08us

}

/**

*@brief

外部中断服务,检测红外信号

*@param

*@retval

*/

voidExINT_ISP()interrupt2//外部中断1中断标号为2

{

unsignedinttime;//时间

unsignedchari,j;

unsignedcharbyte=0;

time=getLowTime();//获取低电平T1计数值,即引导码的9ms载波

if((time;8755))//范围8.5-9.5msX=0.0085/(12/11059200)

{

//错误引导码

IE1=0;//清零外部中断标志

return;//退出中断

}

//符合引导码的9ms

time=getHeighTime();//获取高电平时间

if((time;4608))//范围4ms-5ms

{

//不是4.5ms的空闲

IE1=0;//清零外部中断

return;//退出中断

}

//是正确的引导码

for(i=0;i;645))//范围350us-700us

{

IE1=0;//清零外部中断标志

return;//退出中断

}

time=getHeighTime();//空闲时间

if((time>;322)&&(time;>;=1;//地位在前,先接收低位

}

elseif((time>;1198)&&(time;>;=1;

byte|=0x80;//高位置1

}

else

{

//无效码

IE1=0;

return;

}

}

ircode=byte;//接收数据

}

//全部接收完毕

irflag=1;

IE1=0;//清零外部中断标志位

}

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2