/*
* 文件名:ir.c
* ------------
* 该文件为ir.h文件中所定义的红外收发接口程序包的实现。
*/
#include <pic.h>
#include "ir.h"
#include "delay.h"
/*
* 函数名:ir_init
* ---------------
* 该函数按如下步骤初始化红外收发接口程序包:
* 1. 初始化PUT引脚为数字输出口;
* 2. 初始化GET引脚为数字输入口。
*/
void ir_init(void)
{
ADPUT = 0;
TRISPUT = 0;
PUT = 0;
ADGET = 0;
TRISGET = 1;
}
/*
* 函数名:transmit_head
* ---------------------
* 该函数按如下方式输出1.3ms引导码:
* 依次输出50个38kHz红外脉冲。
*/
void transmit_head(void)
{
unsigned char i;
for(i = 0; i < 50; i++)
{
PUT = 1;
delayus(4);
NOP();
NOP();
NOP();
NOP();
NOP();
PUT = 0;
delayus(1);
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
}
}
/*
* 函数名:transmit_data
* ---------------------
* 该函数按如下步骤从低位到高位依次输出8bit数据:
* 1. 输出低电平0.26ms;
* 2. 若输出0,则再输出0.26ms低电平,若需输出1,则不论;
* 3. 输出10个38kHz红外脉冲信号,记0.26ms时长;
* 4. 若未输出完则跳到步骤1输出下一个数据位。
*/
void transmit_data(unsigned char data)
{
unsigned char i, j;
for(j = 0; j < 8; j++)
{
PUT = 0;
delayus(128);
if((data & 0x01) == 0)
{
delayus(128);
}
for(i = 0; i < 10; i++)
{
PUT = 1;
delayus(4);
NOP();
NOP();
NOP();
NOP();
NOP();
PUT = 0;
delayus(1);
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
}
data = (data >> 1);
}
}
/*
* 函数名:transmit
* ----------------
* 该函数按如下步骤发送一个8bit数据到指定地址的设备:
* 1. 输出1.3ms引导码;
* 2. 输出8bit地址码;
* 3. 输出8bit数据码。
*/
void transmit(unsigned char add, unsigned char data)
{
transmit_head();
transmit_add(add);
transmit_data(data);
}
/*
* 函数名:receive
* ---------------
* 该函数按如下步骤接收红外信号:
* 1. 接收到红外信号后,判断1.3ms引导码是否完整,不完整则为干扰信号,退出接收程序,返回错误代码0xFF;
* 2. 若引导码完整,则接收地址码,判断地址是否与本机地址匹配,不匹配则不接受数据码,并退出接收程序,返回错误代码0xFE;
* 3. 若地址匹配,则接受数据码,并返回其值到调用程序。
*/
unsigned char receive(void)
{
unsigned char i, add = 0x00, data = 0x00;
i = 0;
while(i < 255)
{
if(GET)
{
return 0xFF;
}
i++;
}
while(!GET);
for(i = 0; i < 8; i++)
{
delayus(20);
delayus(128);
if(!GET)
{
add = (add >> 1);
add = (add | 0x80);
while(!GET);
}
else
{
add = (add >> 1);
while(GET);
delayus(20);
while(!GET);
}
}
if(add != ADD)
{
return 0xFE;
}
for(i = 0; i < 8; i++)
{
delayus(20);
delayus(128);
if(!GET)
{
data = (data >> 1);
data = (data | 0x80);
while(!GET);
}
else
{
data = (data >> 1);
while(GET);
delayus(20);
while(!GET);
}
}
return data;
}
ir.rar_ir pic
版权申诉
46 浏览量
2022-09-14
16:51:01
上传
评论
收藏 2KB RAR 举报
邓凌佳
- 粉丝: 65
- 资源: 1万+
最新资源
- 卡方数据.sav
- Python实现基于Django框架的二手物品购物网站设计源码+数据库.zip
- 基于Python和Django的二手物品购物网站设计源码+数据库脚本.zip
- 【计算机毕业设计】基于h5的移动网赚项目小程序【源码+lw+部署文档+讲解】
- 【计算机毕业设计】基于ssm-vue的oa系统设计与实现【源码+lw+部署文档+讲解】
- 基于pytorch实现的YOLOV5+SORT的车辆行人目标识别及追踪系统源码.zip
- 【计算机毕业设计】基于servlet+jdbc的在线选房系统设计与实现【源码+lw+部署文档+讲解】
- 投身科技创新,勇担时代先锋.pptx
- 【计算机毕业设计】基于SSM的仿微博系统的设计与实现【源码+lw+部署文档+讲解】
- 使用 Web Components 实现,遵循 Material You 设计规范的 Web 前端组件库
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈