ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

51单片机学习之红外通信

2019-09-05 19:38:32  阅读:276  来源: 互联网

标签:uchar 脉冲 51 sbit 单片机 红外 date 调制


红外通信

简单介绍

红外线遥控器已被广泛使用在各种类型的家电产品上,它的出现给使用电器提供了很多的便利。红外线系统一般由红外发射装置红外接收设备两大部分组成。红外发射装置又可由键盘电路、红外编码芯片、电源和红外发射电路组成。红外接收设备可由红外接收电路、红外解码芯片、电源和应用电路组成。通常为了使信号更好的被发射端发送出去,经常会将二进制数据信号调制成为脉冲信号,通过红外发射管发射。常用的有通过脉冲宽度来实现信号调制的脉宽调制(PWM)和通过脉冲串之间的时间间隔来实现信号调制的脉时调制(PPM)两种方法。

本次采用的是PPM。

数据格式

image.png
思想:利用中断系统,收到起始码就进入判断环节。

image.png

  • 用户码或数据码中的每一个位可以是位 ‘1’ ,也可以是位 ‘0’。区分 ‘0’和 ‘1’是利用脉冲的时间间隔来区分,这种编码方式称为脉冲位置调制方式,英文简写PPM。
    一般来说是取中间时间,1ms来判断0/1
    代码如下:
#include <REGX52.H>
typedef unsigned char uchar;
typedef unsigned int uint;

sbit io=P3^2;

void start()
{
	EA=1;
	EX0=1;
	IT0=1;
	io=1;
}
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

uchar code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
					0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x76};//显示0~F的值
uchar sj[3];
uchar date[4];
void delay(uint i)
{
	while(i--);	
}
void DigDisplay()
{
	uchar i;
	for(i=0;i<3;i++)
	{
		switch(i)	 //位选,选择点亮的数码管,
		{
			case(0):
				LSA=0;LSB=0;LSC=0; break;//显示第0位
			case(1):
				LSA=1;LSB=0;LSC=0; break;//显示第1位
			case(2):
				LSA=0;LSB=1;LSC=0; break;//显示第2位
//			case(3):
//				LSA=1;LSB=1;LSC=0; break;//显示第3位
//			case(4):
//				LSA=0;LSB=0;LSC=1; break;//显示第4位
//			case(5):
//				LSA=1;LSB=0;LSC=1; break;//显示第5位
//			case(6):
//				LSA=0;LSB=1;LSC=1; break;//显示第6位
//			case(7):
//				LSA=1;LSB=1;LSC=1; break;//显示第7位	
		}
		P0=smgduan[sj[i]];//发送段码
		delay(100); //间隔一段时间扫描	
		P0=0x00;//消隐
	}
}
void sjproc()
{
	sj[0]=date[2]/16;
	sj[1]=date[2]%16;
	sj[2]=16;
}
void main()
{
	start();
	while(1)
	{
		sjproc();
		DigDisplay();	
	}
}
void int0() interrupt 0
{
	uchar i,j;
	uint time=0,err;
	delay(700);
	if(io==0)
	{
		err=1000;
		while(!io&&err)
		{
			delay(1);
			err--;
		}
		if(err==0)
		return;
		else  if(io==1)
		{
			err=500;
			while(io&&err)
			{
				delay(1);
				err--;
			}
			for(i=0;i<4;i++)
				for(j=0;j<8;j++)
				{
					err=56;
					while(!io&&err)
					{
						delay(1);
						err--;
					}
					err=300;
					while(io&&err)
					{
						delay(10);
						time++;
						err--;
						if(time>30)
						return ;
					}
					date[i]>>=1;
					if(time>10)
					date[i]=date[i]|0x80;


				}
				time=0;
		}
		if(date[2]!=~date[3])
		return ;
	}

}

标签:uchar,脉冲,51,sbit,单片机,红外,date,调制
来源: https://blog.csdn.net/qq_44266648/article/details/100563269

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有