博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单片机红外通信c语言,用51单片机实现红外通讯源码
阅读量:5869 次
发布时间:2019-06-19

本文共 2859 字,大约阅读时间需要 9 分钟。

/**************************************************************************************

*                              红外通信实验                                                                                                  *

实现现象:        具体接线操作请参考视频

下载程序后,数码管显示红外遥控键值数据

注意事项:        红外遥控模块的短接片J1短接,

红外遥控器内的电池绝缘片一定要抽掉

***************************************************************************************/

#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;          //对数据类型进行声明定义

typedef unsigned char u8;

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

sbit IRIN=P3^2;

u8 IrValue[6];

u8 Time;

u8 DisplayData[8];

u8 code smgduan[17]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0X76};

//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F、H的显示码

/*******************************************************************************

* 函 数 名         : delay

* 函数功能                   : 延时函数,i=1时,大约延时10us

*******************************************************************************/

void delay(u16 i)

{

while(i--);

}

/*******************************************************************************

* 函数名         :DigDisplay()

* 函数功能                 :数码管显示函数

* 输入           : 无

* 输出                  : 无

*******************************************************************************/

void DigDisplay()

{

u8 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位

}

P0=DisplayData[i];//发送数据

delay(100); //间隔一段时间扫描

P0=0x00;//消隐

}

}

/*******************************************************************************

* 函数名         : IrInit()

* 函数功能                   : 初始化红外线接收

* 输入           : 无

* 输出                  : 无

*******************************************************************************/

void IrInit()

{

IT0=1;//下降沿触发

EX0=1;//打开中断0允许

EA=1;        //打开总中断

IRIN=1;//初始化端口

}

/*******************************************************************************

* 函 数 名       : main

* 函数功能                 : 主函数

* 输    入       : 无

* 输    出             : 无

*******************************************************************************/

void main()

{

IrInit();

while(1)

{

DisplayData[0] = smgduan[IrValue[2]/16];

DisplayData[1] = smgduan[IrValue[2]%16];

DisplayData[2] = smgduan[16];

DigDisplay();

}

}

/*******************************************************************************

* 函数名         : ReadIr()

* 函数功能                   : 读取红外数值的中断函数

* 输入           : 无

* 输出                  : 无

*******************************************************************************/

void ReadIr() interrupt 0

{

u8 j,k;

u16 err;

Time=0;

delay(700);        //7ms

if(IRIN==0)                //确认是否真的接收到正确的信号

{

err=1000;                                //1000*10us=10ms,超过说明接收到错误的信号

/*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时

侯,程序死在这里*/

while((IRIN==0)&&(err>0))        //等待前面9ms的低电平过去

{

delay(1);

err--;

}

if(IRIN==1)                        //如果正确等到9ms低电平

{

err=500;

while((IRIN==1)&&(err>0))                 //等待4.5ms的起始高电平过去

{

delay(1);

err--;

}

for(k=0;k<4;k++)                //共有4组数据

{

for(j=0;j<8;j++)        //接收一组数据

{

err=60;

while((IRIN==0)&&(err>0))//等待信号前面的560us低电平过去

{

delay(1);

err--;

}

err=500;

while((IRIN==1)&&(err>0))         //计算高电平的时间长度。

{

delay(10);         //0.1ms

Time++;

err--;

if(Time>30)

{

……………………

…………限于本文篇幅 余下代码请从51黑下载附件…………

转载地址:http://wdtnx.baihongyu.com/

你可能感兴趣的文章
linux下关系型数据库解释及mysql基本命令详解
查看>>
Linux的用户和组管理
查看>>
linux下文件属性drwxr-xr-x各是什么意思
查看>>
C语言的宏能干些什么
查看>>
组合模式
查看>>
css美化number类型输入框美化实现自定义+、-号点击按钮增减效果
查看>>
matlab-基础 isa 判断变量是否为指定类型
查看>>
关于Linux下snmpd.conf的一点说明
查看>>
sleep(), Sleep()
查看>>
DDL,DML和DCL
查看>>
缓存世界中的三大问题及解决方案
查看>>
[Java] ES获取数据部分字段值
查看>>
编辑器Ueditor找不到临时文件解决办法
查看>>
TurboGate邮件归档保护企业内部邮件安全
查看>>
《阿勇java建站教程》2.1-数据库
查看>>
使用java实现鱼刺图
查看>>
redis redis的两种持久化机制
查看>>
利用springcloud+Redis在分布式系统中实现分布式锁
查看>>
Hadoop基本操作命令
查看>>
java动态换行,转义字符的应用
查看>>