单片机红外发射与接收源程序

发布者:LovingLife2023最新更新时间:2019-12-20 来源: 51hei关键字:单片机  红外发射  接收 手机看文章 扫描二维码
随时随地手机看文章

发送端单片机源程序如下:

#include "ir_send.h"


/*------------初始化IO------------*/

void ir_init(void)

{

        P2M0 = 0x80;                    //P2.7强推挽

        P2M1 = 0x00;

        TMOD = 0x01;                   //T0  16位 定时        

        IR   = 0;

}


/*-------发射数据 + 载波---------*/

void ir_t(bit BT , uint p)

{

        TH0 = p>>8;                    

        TL0 = p;

    TF0=0;                               

    TR0=1;                                                                                                   //启动定时器0

    if(BT == 0)                                                                                                   //BT=0时,不发射38KHz载波只延时;BT=1发射38KHz脉冲且延时

        {

                while(!TF0);

    }

        else while(1)                                                                                         //38KHz载波,(低电平)占空比5:26                        

            {

                  IR = 1;

                  if(TF0)break;if(TF0)break;

                  if(TF0)break;if(TF0)break;

                  if(TF0)break;if(TF0)break;

                  if(TF0)break;


                  IR = 0;

                if(TF0)break;if(TF0)break;

                 if(TF0)break;if(TF0)break;

                 if(TF0)break;if(TF0)break;

                 if(TF0)break;if(TF0)break;

                 if(TF0)break;if(TF0)break;

                if(TF0)break;if(TF0)break;

                 if(TF0)break;if(TF0)break;

                 if(TF0)break;if(TF0)break;

                 if(TF0)break;if(TF0)break;

                 if(TF0)break;if(TF0)break;

                if(TF0)break;if(TF0)break;

                 if(TF0)break;if(TF0)break;

                 if(TF0)break;if(TF0)break;

                 if(TF0)break;if(TF0)break;

                 if(TF0)break;if(TF0)break;

                }

    TR0=0;                                                                                                   //关闭定时器0

    TF0=0;                                                                                        

    IR =0;                                                                

}



/*-----------发送一帧数据-----------*/

void ir_send_byt(uchar temp)

  uchar i;

        for (i = 0; i < 8; i++ )                     //循环8次移位 

        {     

            ir_t( 1 , m_56 );                                   //高电平0.65mS                                  

                if( temp & 0x01 ) 

                ir_t( 0 , m1_6 );                                               //先发送最低位                

                else          

                ir_t( 0 , m_56 );                              

                temp >>= 1;                

        }    

}


/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

函数:NEC编码发送程序

┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/

void ir_send(uchar p)

{  

        ir_t( 1 , m9   );                               //高电平9mS

        ir_t( 0 , m4_5 );                    //低电平4.5mS


  /*┈ 发送4帧数据┈*/

        ir_send_byt( user_h );                              //用户码高8位                                                                                                               

        ir_send_byt( user_l );                           //用户码低8位

        ir_send_byt(  p  );                           //操作码

        ir_send_byt( ~p  );                           //操作码反码


  /*┈┈ 结束码 ┈┈*/

    ir_t( 1 , m_56 );

        ir_t( 0 , m40  );

/*┈┈ 重复码 ┈┈*/

        while(0)

        {

        ir_t( 1 , m9         );

        ir_t( 0 , m2_25 );


        ir_t( 1 , m_56        );

        ir_t( 0 , m40         );

                ir_t( 0 , m56         );                                  

    }                   

}


关键字:单片机  红外发射  接收 引用地址:单片机红外发射与接收源程序

上一篇:51单片机头文件reg51.h学习心得
下一篇:基于51单片机的停车场车位管理系统

推荐阅读最新更新时间:2024-11-11 03:51

STM32串口接收数据保存到数组——遇到问题及解决方法
遇到问题: PC端发送给stm32的字符串数据,只有最后一个字节被保存在数组的首地址,其他数据都丢失,而且数组中只有首地址有数据。 比如我用PC给stm32发送abcd,返回到PC串口助手的数据只有d,查看数组发现里面数据 。 解决方案: 错误的原因是,在中断服务函数中,每次来数据时,数组地址 t++ 的变量 t 被我定义成了局部变量,导致每次来中断时,t都被赋值为0,才导致只有数组首地址有数据,且之前的数据都被覆盖。 解决办法,把数组地址 t++ 的变量 t 定义为全局变量就ok了
[单片机]
STM32串口<font color='red'>接收</font>数据保存到数组——遇到问题及解决方法
基于51单片机的简易计算器1602显示
/*注:4 X4 矩阵接P3口*/ #include reg52.h #include stdio.h #include intrins.h #define uchar unsigned char #define uint unsigned int #define CHECK_BUSY sbit RS = P2^4; sbit RW = P2^5; sbit EN = P2^6; void DelayMs(int z) { int x,y; for (x=z;x 0;x--) for(y=110;y 0;y--); } /***********判忙函数***********/ bit LCD_Check_Busy(
[单片机]
STM32单片机UART发送配置的步骤及方法
字符发送的过程描述:在UART的发送过程中先将数据输入到发送数据寄存器中(TDR)此时(TXE)被硬件置1,之后TDR寄存器将数据串行移入到发送移位寄存器中,将数据在TX端口发送,此时(TC)被硬件置1。发送与接收是逆过程。 UART发送配置步骤: 1.通过USART_CR1寄存器上置位UE来激活USART。 2.编程USART_CR1的M位来定义字长。 3.在USART_CR2中编程停止位的位数。 4.如果采用多缓冲器通信,配置USART_CR3中的DMA使能位(DMAT)。按多缓冲器通信中的描述配置DMA寄存器。 5.利用USART_BRR寄存器选择要求的波特率。 6. 设置USART_CR1中的TE位,发送一个空闲帧作为
[单片机]
STM32<font color='red'>单片机</font>UART发送配置的步骤及方法
MCS-51系列单片机存储器结构
由于采用改进型哈佛架构,51单片机具备独立的程序存储器ROM、数据存储器RAM,两者地址空间独立,且独立编址,如下是单片机的存储器结构图。 程序存储器ROM,用于存储用户代码,由于程序计数器PC是16位的,因此系统具备64kB寻址能力,地址空间为0x0000 ~ 0xFFFF,厂商在单片机内部实现一部分程序存储器,例如4kB、8kB,剩余的根据用户需要可以外部扩展。访问程序存储器使用MOVC A, @A + DPTR,MOVC A, @A + PC指令,只能进行读取访问,无法写入。 数据存储器分为RAM和外部RAM,两者地址空间独立,且独立编址。以子系列52为例,由于具备256B寻址能力,编址空间为0x00~0xFF。RAM除
[单片机]
单片机串行通信中波特率的自动整定
  串行通信在波特率误差超过一定范围时,会产生错误。本节介绍的内容在51 单片机 上仅用软件就实现了波特率自动整定,最大程度地减小了波特率误差,因而可使串行通信的可靠性得到提高。      51单片机具有一个全双工的串行接口,提供了多机通信功能,可方便地构成多机系统(多机容错系统、集散型多级系统),为完成大型的控制任务提供了有效的手段。用51单片机组成的多机控制系统,国内已出现多例。在这样的系统中,可靠地实现多处理器间的信息交换(串行通信)是十分重要的。本节的研究发现,波特率作为串行通信的速率,同时对通信的可靠性有重要影响。 一、正常串行通信的实现条件      串行通信是按位传送数据的。每个数据有8或9个数据位,加上起始位和
[单片机]
<font color='red'>单片机</font>串行通信中波特率的自动整定
AVR单片机ATMEAG16L定时和计数器的应用方法解析
ATMEAG16L有两个8位定时/计数器(T/CO、T/C2)和一个16位定时/计数器(T/C1)。每一个计数器都支持PWM(脉冲宽度调制)输出功能。PWM输出在电机控制、开关电源、信号发生等领域有着广泛的应用。 ATMEAG16L的定时/计数器时钟是可以选择的。它的时钟部分包括预分频器和一个多路选择器。预分频器可被认为是一个有多级输出的分频器。ATMEAG16L用一个10位的计数器把输入时钟分为4种可选择的分频输出。多路选择器可设置使用某一个分频输出,或者不使用分频输出和使用外部引脚输入时钟,下图为预分频器的基本结构。 ATMEAG16L定时/计数器的时钟选择 1.使用系统时钟这种情况下使用系统时钟作为预分频器的输入,
[单片机]
AVR<font color='red'>单片机</font>ATMEAG16L定时和计数器的应用方法解析
自制51/avr单片机USB ISP 下载线
  如今呢是使用笔记本的人越来越多了,可是呢买了笔记本对于学习很多单片机比如说51或者avr就不方便了。因为大多数电脑都不带串并口了。但是呢新出的笔记本上的USB接口是足够用的。因而都想用USB转了串口或者并口就能方便单片机学习开发时的ISP编程或者JTAG仿真了。其实很多单片机开发商和销售商都早就有了USBisp的配套软件和硬件了的,只不过都比较昂贵,而且技术资料多是保密的,对于自己小本学习单片机的人而言不免都希望能与价廉物美的USBISP烧写器,而且也多想自己动手做一个了。   网上公开的比较流行的支持51和AVR的烧写器是用ATMEL公司的MAGE8单片机做的,其机理也就是通过软件编程的方式将USB接口信号转换为并口信号以
[单片机]
自制51/avr<font color='red'>单片机</font>USB ISP 下载线
51单片机“积木式”实验板原理
  本实验板由一块主控板和若干受控子实验板组成。主控板为一单片机最小系统,原理如图2。主控板上由三端稳压器7805和电容C4,C5组成稳压滤波电路,将外部9~l2V左右的直流电压稳压滤波后变成5V,给主控板51单片机IC芯片供电,并从主板CN2和CN5接线柱输出,给外接被控子实验板供电。主控板上按键S1、1OμF电容C1、1OKΩ电阻R1组成按键式复位电路。12MHz晶振X1和30PF电容C2、C3组成晶振电路,接在51单片机IC的18、19脚。40脚、31脚接5V电源,20脚接地。在40脚的IC插座上再加插一个双列锁紧式插座,便于芯片的卸装,同时也便于紧锁式插座损坏后更换。单片机的PO、P1、P2、P3端口通过CN1、CN3、C
[单片机]
51<font color='red'>单片机</font>“积木式”实验板原理
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved