「51单片机」红外接收、发射模块代码

一、简介

红外发射模块:电源3.3V或5V,通过发射管发射38KHz的红外信号,高电平驱动

红外接收模块:电源3.3V或5V,可接收红外信号,并解调成逻辑电平,低电平有效

二、电路图

红外发射电路图

红外接收电路图

三、红外发射模块代码

#include<reg51.h>
#include<intrins.h>

#define uchar unsigned char
#define uint  unsigned int

//管脚定义
sbit key = P2^0;
sbit out = P2^1;

//函数声明
void delayms(uchar aa);            //红外发射延时
void khz(uchar aa);                //发射38KHz
void IR_OUT(uchar num);            //红外发射
void keyScan();                    //读取键盘信息

//变量声明
uchar i, a, num1;

//-----------------------
//红外发射延时
//-----------------------
void delayms(uchar aa)
{
    for(a=aa; a>0; a--)
    {
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
    }
}

//-----------------------
//发射38KHz
//-----------------------
void khz(uchar aa)
{
    for(a=aa;a>0;a--)       //这个for语句可以得到准确的26.3波特率
    {
        out=0;
        i=7;
        while(i>0) i--;    //38kHZ
        out=1;
    }

}

//-----------------------
//红外发射
//-----------------------
void IR_OUT(uchar num)
{
    khz(116);            //发射3ms 38khz
    delayms(125);
    for(num1=8; num1>0; num1--)
    {
        khz(40);
        if(num&0x01)
            delayms(93); //delay 1.5ms
        else
            delayms(65); //delay 1ms
        num=num>>1;
    }
    khz(20);
}

//-----------------------
//读取键盘信息
//-----------------------
void keyScan()
{
    if(key==0)
    {
        _nop_(); _nop_(); _nop_();
        _nop_(); _nop_(); _nop_();
        if(key==0)
            IR_OUT(0xC0);     key = 1;
    }
}

//-----------------------
//主函数
//-----------------------
void main()
{
    key = 1;
    while(1)
    {
        keyScan();
    }
}

四、红外接收模块代码

#include<reg51.h>
#include<intrins.h>

#define uchar unsigned char
#define uint  unsigned int

//管脚定义
sbit in   = P3^2;        //红外中断接收
//P2接静态数码管

//函数声明
void init();            //初始化函数
void delayms(uchar j);  //延时函数

//变量声明
uchar i, num, a;
bit fleg;

//-----------------------
//初始化函数
//-----------------------
void init()
{
    fleg = 1;           //标志位
    in   = 1;           //红外接收
    EA   = 1;           //中断设置
    EX0  = 1;
    IT0  = 1;
}

//-----------------------
//延时函数
//-----------------------
void delayms(uchar j)
{
    for(i=j; i>0; i--)
    {
        _nop_(); _nop_(); _nop_();
        _nop_(); _nop_(); _nop_();
    }
}//-----------------------
//主函数
//-----------------------
void main()
{
    init();
    while(1);
}

//-----------------------
//接收中断
//-----------------------
void sieasdf() interrupt 0
{
    EX0 = 0;
    for(a=5; a>0; a--)
    {
        delayms(35);//延时0.5ms 判断5次  5*0.5=2.5ms
        if(in) fleg=0;
    }
    if(fleg)
    {
        delayms(72);//延时1ms  判断是不是高电平了
        if(in)
        {
            delayms(115);//延时让它超过2ms; 2.5+1+1.623=5.123ms  开始读数据
            delayms(118);//若偏移一位,可以去掉。
            for(a=8; a>0; a--)
            {
                while(!in);
                delayms(86);//延时1.188ms 判断IO高低,从而得0或1
                num = num>>1;
                if(in)
                    {
                        num = num|0x80;
                        delayms(31);//延时0.6ms 因为上面延时1.2ms+0.6 刚好跳过1.5ms
                    }
            }
            P2 = num;
        }
    }
    fleg = 1;
    EX0 = 1;
}
时间: 2024-10-16 14:21:03

「51单片机」红外接收、发射模块代码的相关文章

「51单片机」收发一体超声波测距模块分析+代码

我用的超声波型号是US-020,四个接口的超声波用法基本相同. 一.概述 US-020超声波模块测距范围:2cm~7m 供电电压5V,静态功耗低于3mA 二.实物图 尺寸:45mm*20mm*1.6mm 三.接口 1.VCC 电源,直流5V 2.Trig 向此管脚输入10us以上高电平,可触发模块测距 3.Echo 测距结束时会输出高电平,电平时长为超声波信号往返时间之和 4.GND 接地 四.测距工作原理 只要在Trig管脚输入10us以上高电平,系统会自动发出8个40KHz的超声波脉冲,然后

「51单片机」RS232串口通信代码分析

想来想去不知道要怎么样把232串口通信说清楚,想想还是直接把代码分析一遍吧... 重点是“常用波特率与定时器1的参数关系”这张表格!波特率的设置很重要! 一.串口初始化 void usart_init() { SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1 TMOD = 0x20; //定时器工作方式2 PCON = 0x00; TH1 = 0xFD; //波特率9600.数据位8.停止位1.效验位无 (11.0592M) TL1 = 0xFD; ES = 1; //开

「51单片机」蓝牙从机基本使用方法

HC-06从机模块基本使用方法 一.蓝牙和单片机怎么连接 如图,GND和VCC就接地和电源 RXD和TXD分别接单片机的RXD和TXD RXD:接收数据 Receive(rx) Data TXD:发送数据 Transmit(tx) Data 单片机的RXD和TXD在哪里呢?打开单片机的原理图 图示P3.0和P3.1就是RXD和TXD接口,把蓝牙的接口与它们连接好 这个时候蓝牙上面的指示灯是一闪一闪的(只要通电它就会一闪一闪) 一.用串口助手调试蓝牙(AT指令) 打开设备管理器,查看单片机与计算机

[51单片机] EEPROM 24c02 [I2C代码封装-保存实现流水灯]

这里把EEPROM 24c02封装起来,今后可以直接调用,其连线方式为:SDA-P2.1;SCL-P2.0;WP-VCC >_<:i2c.c 1 /*----------------------------------------------- 2 名称:IIC协议 3 内容:函数是采用软件延时的方法产生SCL脉冲,固对高晶振频率要作 一定的修改....(本例是1us机器 4 周期,即晶振频率要小于12MHZ) 5 ---------------------------------------

「学习笔记」3.31代码学习

3月的最后一天,我的代码也学了一阵子了,一点进展没有是不可能的,确实有感觉到进步,只不过如果自己更专心一点,应该进步会更大,三月的最后一天.四月开始加油!!! 这两天发现了杭电ACM的PPT,所以决定按照PPT的顺序来刷题了,所以今天练习的都比较简单. 1090 A+B for Input-Output Practice(II) #encoding:utf8 #1090 A+B for Input-Output Practice(II) n=int(raw_input()) l=[] lst=[

「ZigBee模块」协议栈-Z-Stack协议栈基础和数据传输实验

花了好久写的...感觉还不错的呢...如果看,请细看...Mua~ Z-Stack协议栈基础和数据传输实验 一.实验目的 终端节点将数据无线发送到协调器,协调器通过串口将数据发送到PC端,并在屏幕上显示出来.串口优化把有线串口传输改为无线蓝牙传输. 二.实验平台 硬件:2个zigbee节点,1个编译器,1根方口转USB数据线,一个蓝牙模块 软件:实验基于SampleApp工程进行. 三.实验步骤 串口初始化代码 发送部分代码 接收部分代码 四.协议栈基础 做实验之前先了解一点关于协议栈的基础知识

[51单片机] HC-SR04超声波测距仪 基础代码

>_<:超声波测距仪模块: >_<:51单片机,11.0592MHz晶振,将采集数据发送到串口的基础例子: >_<:代码: 1 /***********************************************************************************************************/ 2 //HC-SR04 超声波测距模块 DEMO 程序 3 //晶振:11.0592 4 //接线:模块TRIG接 P1.2

「速成应用」一键生成微信小程序平台 可视化制作开发无需代码

经历了频繁的更新迭代,小程序已经构建起了趋于完善的生态,与此同时,以「速成应用」为代表的小程序第三方开发平台也在推动着小程序市场的发展.为了更好地助力企业打造微信内电商生态闭环,实现线上线下引流,「速成应用」于近日进行了全功能的更新,通过对各类功能组件的优化,帮助企业实现商业模式的转型升级与营销突破. 「速成应用」根据商家反馈的问题,重点对小程序模块中的电商.外卖等功能进行优化升级,旨在帮助企业解决门店经营与小程序线上营销两大难题.在这次升级过程中同样也对辅助功能进行了优化.升级完成后,全线功能

单片机(simple chip microcomputer)概论、51单片机、MCS-51单片机、STM32、ARM

catalogue 1. 单片机概论 2. 51单片机 3. MCS-51单片机 4. QX-MINI51开发板(STC89C52芯片) 5. STM32单片机 6. stm32f103zet6开发板实验 1. 单片机概论 0x1: 仿真器 单片机应用系统的软硬件调试需要专门的开发工具,称为"单片机开发系统"或"仿真机".常用的开发方式是把开发系统(例如PC)中的CPU和RAM暂时出借给用户系统,利用开发系统对用户系统的软硬件进行调试(又称仿真),然后将调试好的程序