Proteus8仿真:51单片机IrLink红外发送加接受模块的使用

news2024/11/16 15:29:15

51单片机IrLink红外的使用

  • 元器件
  • 原理图部分
  • 代码
    • 单片机1发送main.c
    • 单片机2接受main.c
  • 工程文件

元器件

元器件名称
51单片机AT89C51
红外收发IRLINK
按键BUTTON
发光二极管LED-RED
时钟激励源DCLOCK
与门74LS08
示波器

原理图部分

在这里插入图片描述
关于IRLINK的使用:
在Proteus上就是一个红外的发射接受一体的一个模块,另外在该模块红外接受上有一个解调的功能。如下图,1区域就是红外的发射区域,2区域就是红外的接受区域,3区域就是红外接受后进行解调的区域。
在这里插入图片描述

然后关于载波的频率,在IRLINK是可以选择对载波频率的要求的,双击元件。默认是40KHz。
在这里插入图片描述
这里频率采用的是Proteus激励源然后与单片机发出的信号经过们与门调制出来。下图是示波器观察信号的结果。
在这里插入图片描述
关于的发射的协议采用的网上说索尼的SonySIRC协议。本次实验采用类似的,以2.4ms的高电平加600us低电平为起始信号,600us为间隔,600us为高电平表示0,1200us为间隔,600us为高电平表示1,数据帧为:帧头为0x80,数据帧为0x40,帧尾为0x20,如果接受到0x40,且帧头帧尾不错误就点灯。本次irlink载波频率为20kHz。

代码

本次实验由单片机通过按键控制IrLink红外来进行通信点灯。

单片机1发送main.c

代码如下:

#include "reg51.h"
#include "intrins.h"

typedef unsigned char uint_8;
typedef unsigned int uint_16;

sbit TX=P2^0;
sbit KEY=P1^0;

//600us
#define High_Low_Wide_H 0XFD 
#define High_Low_Wide_L 0xA8 

//600us
#define Low_Gap_H 0XFD
#define Low_Gap_L 0xA8

//1200us
#define High_Gap_H 0xFB
#define High_Gap_L 0x50

//2400us
#define Start_High_H 0xF6
#define Start_High_L 0xA0

void scan_Key(void); //按键扫描函数
void Ir_Send_Bit(uint_16 us_h,uint_16 us_l,bit Status);
void Ir_Send_Data(uint_8 Data);
void TimerInit(void);
void main(void)
{
	bit key=0;
	TimerInit();TX = 0;
	while(1)
	{
		scan_Key();
	}
}

//按键扫描函数
void scan_Key(void)
{
	if(KEY==0)
	{
		TX = 0;
		Ir_Send_Bit(Start_High_H,Start_High_L,1); //起始信号2.4ms
		Ir_Send_Bit(Low_Gap_H,Low_Gap_L,0); //间隔输出0.6ms
		Ir_Send_Data(0x80);//起始帧0x80
		Ir_Send_Data(0x40); //数据
		Ir_Send_Data(0x20);//终止帧
	}
}

//一位发送
void Ir_Send_Bit(uint_16 us_h,uint_16 us_l,bit Status) 
{
	TH0 = us_h;		//设置定时初值
	TL0 = us_l;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	if(Status==1)
	{
		TX = 1;
		while(TF0==0);
	}
	else if(Status==0)
  {
		TX = 0;
		while(TF0==0);
	}
	TF0 = 0;
	TR0 = 0;  //关闭定时器
	TX = 0;
}

//八位发送 从最低位往高位发送
void Ir_Send_Data(uint_8 Data)
{
	uint_8 i=0;
	for(i=0;i<8;i++)
	{
		if(Data&0x01) //高电平
		{
			Ir_Send_Bit(High_Low_Wide_H,High_Low_Wide_L,1); //脉宽输出
			Ir_Send_Bit(High_Gap_H,High_Gap_L,0); //间隔输出
		}
		else
		{
			Ir_Send_Bit(High_Low_Wide_H,High_Low_Wide_L,1); //脉宽输出
			Ir_Send_Bit(Low_Gap_H,Low_Gap_L,0); //间隔输出			
		}
		Data >>=1;
	}
}

void TimerInit(void)		//12微秒@12.000MHz
{
	TMOD=0X01;		//设置定时器模式
}

单片机2接受main.c

#include "reg51.h"
#include "intrins.h"

typedef unsigned char uint_8;
typedef unsigned int uint_16;

sbit RX=P2^1;
sbit LED=P1^0;

void Ir_Receive(void);
uint_8 Ir_Receive_8Bit(void);
void TimerInit(void);
uint_8 All_Data[3]={0,0,0};
uint_16 time=0;

void main(void)
{
	TimerInit();
	while(1)
	{	
		if((All_Data[1]==0x40)&&(All_Data[0]==0x80)&&(All_Data[2]==0x20))LED=1;
		else LED=0;
		Ir_Receive();
	}
}


//接受数据
void Ir_Receive(void) 
{
	uint_8 i=0;
	if(RX==0)
	{
		time=0;
		TR0 = 1;		//定时器0开始计时
		while(RX==0);
		time=TH0*256+TL0; //计算时间
		TR0 = 0;
		
		if((time>2000)&&(time<3000)) 
		{
			
			TH0=0;TL0=0;	
			time=0;
			TR0 = 1;		//定时器0开始计时
			while(RX==1);
			time=TH0*256+TL0; //计算时间			
			TR0 = 0;
			
			if((time>300)&&(time<1000)) 
			{
				
				time=0;
				while(i<3)
				{
					All_Data[i]=Ir_Receive_8Bit();
					i++;
				}
			}
		}
	}
}

//8位接受
uint_8 Ir_Receive_8Bit(void)
{
	uint_8 Data=0;
	uint_8 i=0;
	while(i<8)
	{
		if(RX==1)
		{
			TH0=0;TL0=0;	
			time=0;
			TR0=1;
			while(RX==1);
			time=TH0*256+TL0; //计算时间
			TR0 = 0;
			
			TF0=0;
				
			if((time>300)&&(time<1000)) Data>>=1;
			else if(time>1000) Data |=0x80;
			i+=1;
		}
	}
	return Data;
}

void TimerInit(void)		//12微秒@12.000MHz
{
	TMOD=0X01;		//设置定时器模式
	TH0=TL0=0;
	TR0 = 0;
}

运行效果如图,led被正常点亮:
在这里插入图片描述

工程文件

工程文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/107943.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据中台选型前必读(七):解读数据服务的四大关键技术

在前面的文章中&#xff0c;我们介绍了“数据服务”对于“数据中台”的重要性&#xff0c;并讲解了数据服务解决的问题及其核心功能&#xff0c;在这个系列的最终篇我们展开聊聊数据服务的四大关键技术&#xff0c;然后总结一下数据服务架构的三大关键点&#xff0c;希望对大家…

JSP ssh培训管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 JSP ssh 培训管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Mye…

校园打架行为识别检测 yolov7

校园打架行为识别检测系统基于python基于yolov7深度学习框架边缘分析技术&#xff0c;自动对校园、广场等区域进行实时监测&#xff0c;当监测到有人打架斗殴时&#xff0c;系统立即抓拍存档语音提醒&#xff0c;并将打架行为回传给学校后台&#xff0c;提醒及时处理打架情况。…

Word控件Spire.Doc 【超链接】教程(7):在 C#、VB.NET 中的 Word 中创建图像超链接

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

你一定要会的JavaFile

File对象就表示一个路径&#xff0c;可以是文件的路径&#xff0c;也可以是文件夹的路径这个路径可以是存在的&#xff0c;也允许是不存在的File的构造 方法名称说明public File(String pathname)根据文件路径创建文件对象public File(String parent,String child)根据父路径名…

第4章 角色Api控件器的实现与调试

1 自定义管道中间件 1.1 WebApi.Middleware.CorsMiddleware namespace WebApi.Middleware { /// <summary> /// 【跨域访问中间件--类】 /// <remarks> /// 摘要&#xff1a; /// 该管道中间件类主要为了解决在由vue/uni-app前端项目(Cors)访问当前后端项…

你的期待薪资是多少?为什么?

很多人去面试的时候&#xff0c;就像打游戏&#xff0c;过五关斩六将&#xff0c;终于到最后一关了&#xff0c;但是谈薪资的难度堪比打游戏中搞定终级 boss 的难度&#xff0c;真的是太「南」了&#xff0c;好多人都是因为这个问题让自己五味杂陈呀。报高了怕好 offer 失之交臂…

【Call for papers】SIGIR-2023(CCF-A/内容检索/2023年1月31日截稿)

The 46th International ACM SIGIR Conference on Research and Development in Information Retrieval will be held from 23-27 July, 2023 in Taipei. 文章目录1.会议信息2.时间节点3.论文主题1.会议信息 会议介绍&#xff1a; SIGIR是展示新研究成果和展示信息检索新系统和…

Postgresql INDEX HOT 原理与更好的 “玩转” INDEX

随着问问题的同学越来越多&#xff0c;公众号内部私信回答问题已经很困难了&#xff0c;所以建立了一个群&#xff0c;关于各种数据库的问题都可以&#xff0c;目前主要是 POSTGRESQL, MYSQL ,MONGODB ,POLARDB ,REDIS&#xff0c;SQL SERVER 等&#xff0c;期待你的加入&#…

[洛谷]P1996 约瑟夫问题

[洛谷]P1996 约瑟夫问题一、问题描述题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示二、思路分析1、算法标签&#xff1a;2、算法分析&#xff1a;三、代码实现1、环形链表2、队列一、问题描述 [洛谷]P1996 约瑟夫问题 题目描述 nnn 个人围成一圈&#xff0c;从…

3.Spark 操作

基于centos7 ,hadoop2.7.3, spark-2.4.4-bin-hadoop2.7.tgz 目录: 一.spark shell二. 读取hdfs文件三.Idea中编写wordcount一.spark shell 在spark shell中编写wordcount程序读取本地文件 1、准备数据源(创建目录,创建文件) 2.代码: --注意修改文件地址-- sc.textF…

【QT开发笔记-基础篇】| 第五章 绘图QPainter | 5.8 画刷设置

本节对应的视频讲解&#xff1a;B_站_视_频 https://www.bilibili.com/video/BV1A44y1Z7vz 本节讲解画刷的设置&#xff0c;包括画刷的颜色和样式 画刷设置完后&#xff0c;就可以把该画刷设置给 QPainter 了 1. 相关 API 1.1 画刷颜色 // 获取和设置画刷的颜色 const QCo…

新冠阳性的第三篇博客,使用Swagger管理API

新冠阳性的第三篇博客&#xff0c;使用Swagger管理API1.Swagger简介2.在项目中使用Swagger3.配置swagger4.swagger配置扫描接口5.配置API文档的分组6.swagger的实体类扫描7.给Controller加文档注释今天是新冠确诊的第二天&#xff0c;得了新冠也不要忘记学习啊&#xff01;&…

一文读懂自动驾驶汽车:软硬结合 造就未来出行体验(上篇)

在 GTC 2022 秋季大会上&#xff0c;NVIDIA 汽车部门营销经理 Katie Burke Washabaugh&#xff0c;面向想要了解自动驾驶汽车、并有志于投身自动驾驶行业的观众&#xff0c;介绍了自动驾驶汽车的历史、工作原理、相关技术以及发展前景。本文对此次分享的精华内容进行了汇总和整…

基于蒙特卡诺的电动汽车对电网影响(数据+Matlab代码)

目录 0 知识回顾 1 电网没考虑电动汽车时 1.1 案例1&#xff08;4kw&#xff09; 1.2 案例2&#xff08;7kw&#xff09; 31.3 案例3&#xff08;20kw&#xff09; 2 静态测试 2.1 收敛的最优结果 2.2 改变电动汽车数量的影响 2.3 收敛的最优结果 3 动态测试 4 一…

图结构

图结构 从哥尼斯堡的七桥问题开始 ▪ 18世纪初普鲁士的哥斯尼堡,有一条河穿过,河上有两个小岛,有七座桥把两个小岛与河岸联系起来 ▪ 问题:一个步行者怎样才能不重复、不遗漏地一次走完七座桥&#xff0c;最后回到出发点。 ▪ 难点&#xff1a;可能的走法----7&#xff01;5…

苹果给出 AirTag 固件更新日志,苹果Find My功能越来越完善

自 11 月以来&#xff0c;苹果已经为其 AirTag 物品追踪器发布了两个固件更新。然而&#xff0c;该公司此前并没有详细说明这些更新带来了什么变化。不过有网友发现&#xff0c;苹果终于分享了最新 AirTag 固件更新的更新内容。 以下是 AirTag 固件更新 2.0.24 和 2.0.36 带来…

[力扣c++实现]85. 最大矩形

85. 最大矩形 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面积。 示例 1&#xff1a; 输入&#xff1a;matrix [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”…

2022最新最全的Java面试八股文小抄开源!带你摸熟 20+ 互联网公司面试考点

2022真是多变的一年&#xff0c;相对往年我们会发现今年猎头电话少了&#xff0c;大部分企业年终奖缩水&#xff0c;加薪幅度也不如往年&#xff0c;选择好 offer 就要趁早&#xff0c;现在开始准备吧&#xff0c;刷一波 Java 面试题&#xff0c;能回答 70%就去 BATJTMD 大胆试…

基于SSM实现的网上手机商城项目(附源码)

基于SpringSpring MVCMyBatisLayui框架 项目完整源码下载 https://download.csdn.net/download/DeepLearning_/87327169 功能&#xff1a; 前台 登录、注册、注销查看商品、商品评论、热销商品收藏、取消收藏商品加入购物车购物车增、删、改、查购买商品、确认收货、删除已…