您的位置 首页 电源

单片机红外遥控解码HS0038B用1602液晶显示

一个红外遥控接收头解码的列子试验成功,51单片机+1602液晶显示,完整的源码下载地址是:http:www51heicombbsdpj-19538-1html下面

一个红外遥控接纳头解码的列子 实验成功,51单片机+1602液晶显现,完好的源码下载地址是:http://www.51hei.com/bbs/dpj-19538-1.html下面给出首要程序的预览:

/**************************************************
*程序称号: HS0038B红外遥控键值显现
*晶 振: 11.0592MHZ
*作 者: Kevin.Xie
*时 间: 200944
*地 址:51hei
***************************************************/
/* HS0038B知识点弥补:
out脚在没有接纳到红外时输出高电平,接纳到则输出低电平。

红外发射的编码中,数据“0”和“1”是这样界说的:
高电平0.565ms,低电平0.56ms,周期1.125ms,表数据“0”;
高电平0.565ms,低电平1.685ms,周期2.25ms,表数据“1”;
***************************************************/
#include
#include
#include “lcd1602.h

sbit IR_GET = P3^2; //红外接纳头数据输入端
uchar hdata=0x10,ldata=0x10; //别离寄存显现的红外编码的高四位和低四位。
uchar RXDDATA[]={0x00,0x00,0x00,0x00};//寄存接纳到的四组红外编码

/************************************************************
约0.1ms延时函数
*************************************************************/
void delay(uchar x)
{
unsigned char i;
while(x–)
{
for (i = 0; i<10; i++);
}
}

/************************************************************
主函数
*************************************************************/
void main(void)
{
EA= 1; //答应总中止中止,
EX0= 1;//使能 INT0 外部中止
IT0 =1; //外中止0下降沿触发
IR_GET=1; //I/O口初始化
display_1602();

while(1)
{
hangwei(1,7);
if(ldata<0x09)
wdat_1602(ldata+0x30);
else
wdat_1602(ldata+0x40);
if(hdata<0x09)
wdat_1602(hdata+0x30);
else
wdat_1602(hdata+0x40);
wdat_1602(H); //H
}
}
/************************************************************
外部中止0服务函数
*************************************************************/
void intt_0() interrupt 0 //下降沿触发:接纳不到红外时OUT高电平,接纳到红外时OUT低电平。
{
uchar four,one,num=0;
EX0 = 0; //关中止0使能,避免处理过程中再接纳红外信号
delayms(2); //稍延时2ms,防搅扰
if (IR_GET) //再检测红外接纳脚(9ms的前导低电平),为高电平阐明是搅扰
{
EX0 =1; //使能中止0
return; //退出中止程序
}
while(!IR_GET); //等IR变为高电平,越过9ms的前导低电平信号。
while (IR_GET); //等 IR 变为低电平,越过4.5ms的前导高电平信号。
for (four=0;four<4;four++) //四组数据
{
for (one=0;one<8;one++) //每组数据8位
{
while (!IR_GET); //等 IR 变为高电平
while (IR_GET) //核算IR高电平时长(低电平时长是相同的,不用计)
{
delay(1); //计时
num++; //计时N次
if (num>=20)//20*0.1ms=2ms
{ //数据“1”的时长最长也就1.685ms,计数超越则数据过错,退出中止
EX0=1;//使能中止0
return;//退出中止
}
} //高电平计数完毕
RXDDATA[four]>>=1; //从低位读出,跟着one的循环8次刚好读出一字节
if(num>6&&num<20) // 20*0.1ms=2ms>1.685ms
RXDDATA[four]|=0x80; //数据“1”
num=0; //计时值清0,为下一位数据的计时做准备
}//一组数据接纳完毕
}//悉数四组数据接纳完毕
if (RXDDATA[2]!=~RXDDATA[3]) //检测接纳到的数据是否正确
{ //不正确则
EX0=1; //使能中止0
return; //退出中止
}
ldata=RXDDATA[2]&0x0F; //取键码的低四位
hdata=RXDDATA[2]>>4; //取键码的高四位
EX0 = 1; //处理完红外接纳,使能中止0,退出中止0
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/254862.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部