单片机做的433遥控解码源程序,带学习功能可存8组遥控码

2020-07-30来源: 51hei关键字:单片机  433  遥控解码  遥控码

分享一个最近用STC89C52单片机做的433遥控解码程序,带学习功能的,可以存8组遥控码,如果不够可以自行增加。电路图如下:

单片机源程序如下:

1、EV1527/PT2262 按键解码输出,并有解码有效输出端。


2、程序采用中断嵌套结构,定时时间准确,可轻松集成到您现有程序中,解码精度不受其他程序块影响。


3、通过学习键可学习40个遥控器编码,使用芯片自带EEPROM,无需外挂存储。


4、提供keil5 c代码,有详细注释,提供网络技术支持。


该源码适合初学者研究,或想在原有产品中增加功能又缺乏此类经验的朋友。



!!!按一下学习键指示灯亮一下灭,松开,再按一下遥控器,学习指示灯闪一下,表示学习成功

学习成功后,才能接收此遥控器的数据,否则没反应!!!


!!!按下学习按键6秒之内松开,超过6秒后无效并清除以前存储的遥控器数据

*/




#include "main.h"




uint TMR0;



void system_init(void)   //上电初始化

{       


  

#if defined(SYS_CY_12T)  

// /*//12T

        AUXR &= 0x7F;                //定时器时钟12T模式

        TMOD &= 0xF0;                //设置定时器模式

        TMOD |= 0x01;                //设置定时器模式

        TL0 = 0x9C;                //设置定时初值

        TH0 = 0xFF;                //设置定时初值

        TF0 = 0;                //清除TF0标志

        TR0 = 1;                //定时器0开始计时

        ET0 = 1; //定时器0中断允许

  

        AUXR &= 0xBF;                //定时器时钟12T模式

        TMOD &= 0x0F;                //设置定时器模式

        TMOD |= 0x10;                //设置定时器模式

        TL1 = 0;                //设置定时初值

        TH1 = 0;                //设置定时初值

        TF1 = 0;                //清除TF1标志

        //TR1 = 1;                //定时器1开始计时

//        ET1 = 1;   

  //*/

#endif  

  


   LM_SEL=1;

   RF=1;

SET=1;

  

  EA = 1; //允许CPU中断     

  


}






void tm0_isr() interrupt 1 using 1

{

  rx_data();

}





void main()

{

system_init();

         

  while(1)

        {

    set_scan();

        }  

}



……………………


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

复制代码


rx.c源程序如下:

#include "main.h"



bit old_bit;           //保存上一次查询到的电平状态

bit tb_ok;             //接收到同步的马时置1   

bit rf_ok;            //接收到一个完整的遥控命令后置1,通知解码程序可以解码了

bit study;                                 //进入学习状态标志

bit bt_auto=0;     //自动设置遥控接收波特率标志

bit rf_ok1,rf_ok2;        //接收成功临时标志




uchar  hh_w,ll_w;           //高,低电平宽度

uchar  ma_n;                //接收到第几位编码了

uchar  bma1,bma2,bma3,bma4; //用于接收过程存放遥控编码

uchar  mma1,mma2,mma3,mma4; //第一次接收到的编码,用于解码过程

uchar  mmb1,mmb2,mmb3,mmb4; //第二次接收到的编码



uchar temp_T0;                        //t初值



uint s_tim;                //定时







#if 1


void rx_data()

   {          

     uchar x;   


     

                     if(!bt_auto)//自动设置遥控接收波特率标志

                    {

          TMR0=100;

                                    TMR00;

                    }

                        else

                                {

          TMR0=temp_T0;

                                        TMR00;               

                                }


                





   

     if (!RF) { ll_w++;old_bit=0; }  // 检测到低电平 低电平时间加1,记录本次电平状态  old_rc5=保存上一次查询到的电平状态

     

     

     


     else        // 检测到高电平

       {

         


         

               hh_w++;//记录高电平时间

         

         if (!old_bit)// 检测到从低到高的跳变,已检测到一个完整(高-低)电平周期

          {

      

            

           

            

           if (((hh_w>=2)&&(hh_w<=7))&&((ll_w>=50)&&(ll_w<=180)))          //判同步码          

               {                                                       //下面是同步码低电平判断

                                           if((ll_w>=100)&&(ll_w<=180))//4.7m电阻

                    {ma_n=0;tb_ok=1;bma1=0; bma2=0; bma3=0; bma4=0;bt_auto=0;//temp_T0=100;

                    }


                    

                }


               

               

           else if ((tb_ok)&&((ll_w>=10)&&(ll_w<=16)))         //数据低电平   

                                         {        

                                                 ma_n++;                                //已经接收到同步码,判为0

                                                 if(ma_n>23)

                                                         {

                                                           if(!rf_ok1)

                                                                   {

                                                                      mma1=bma1;mma2=bma2;mma3=bma3;mma4=bma4;//将接收到的编码复制到解码寄存器中                             

                            rf_ok1=1;

[1] [2] [3] [4] [5] [6]
关键字:单片机  433  遥控解码  遥控码 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic504837.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:单片机电子秒表时钟 数码管显示
下一篇:单片机风扇模拟控制系统设计

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

AVR第11课:如何对待我们的单片机
大家学习MCS51单片机和AVR单片机,又或者是PIC单片机,又或者是MSP430单片机之后,是否感觉自己可以成为一名工程师了呢?我在这里来说说我的看法吧。我们学习这些单片机的时候,先学习了理论知识,这个一般是书本上的理论知识,比如介绍单片机的发展、单片机的应用领域、单片机的原理等等。然后呢找一块开发板,对着视频教程学习,边看视屏边做实验,学习完之后呢,去做那么一两个小项目,比如“基于LabView和PWM的霍尔测速和控速的直流电机系统”,这个项目呢,相对来说综合要求能力比较高,如果一个人能够坐下来的话,你的能力就算不错了,相当不错了。从设计电路图、焊接电路板、写程序、调试等等下来,会有很大的提高。如果仅仅做了实验,我可以告诉
发表于 2020-07-25
AVR单片机控制发光二极管
点亮ARV单片机开发板上的一个LED灯原理图: 分析:上面的截图就是单片机和LED灯的连接原理图,其中J6是一个排阻,起到限流的作用,防止LED电流过大而烧坏。排阻的内部就是一组并联的电阻:bubuko.com,布布扣提示:算一下这个排阻的电阻的大小,二极管的工作电流是3mA,工作电压时1.7V,VCC的电压时5V。所以电阻上的电流是3mA,电压是3.3V,所以电阻的阻值是1.1KΩ。因为所有的二极管都是通过一个限流电阻共阳极的,所以只需要在Q端给一个低电平就能点亮这个发光二极管。Q端的电平通过一个573锁存器受控于D端的电平高低,也就是单片机的PB端口。这样我们就能通过写程序控制PB端口的高低电平来实现二极管的亮灭
发表于 2020-07-25
AVR<font color='red'>单片机</font>控制发光二极管
基于IAR环境下STM32F103单片机读取BME280程序
自己编写的基于IAR环境下STM32F103单片机读取BME280程序,没有太多的寄存器操作,简单易懂,可以直接调用,上电后只要对IO口初始化,调用函数Bme_ReadDigValue()读取校准寄存器参数并保存,再调用函数Bme_Init()初始化之后就可以用函数Bme_ReadStatus()读取传感器状态判断是否读取数据了,也可不判断传感器状态直接读取数据,读取数据直接调用函数ReadBme280()。单片机源程序:void ReadBme280(){        u32 value_ad;        double var1; 
发表于 2020-07-25
MSP430单片机定时器TA中断 程序
程序1#include  <msp430x41x.h>void main(void){  WDTCTL = WDTPW + WDTHOLD;                       // 停止看门狗  FLL_CTL0 |= XCAP18PF;                         // 配置晶振负载电容  P1DIR |
发表于 2020-07-25
第三章 硬件基础知识学习
通过上一课的学习,我们貌似成功的点亮了一个LED小灯,但是还有一些知识大家还没有彻底明白。单片机是根据硬件电路图的设计来写代码的,所以我们不仅仅要学习编程知识,还有硬件知识,也要进一步的学习,这节课我们就要来穿插介绍电路硬件知识。3.1 电磁干扰EMI第一个知识点,去耦电容的应用,那首先要介绍一下去耦电容的应用背景,这个背景就是电磁干扰,也就是传说中的EMI。1、冬天的时候,尤其是空气比较干燥的内陆城市,很多朋友都有这样的经历,手触碰到电脑外壳、铁柜子等物品的时候会被电击,实际上这就是“静电放电”现象,也称之为ESD。2、不知道有没有同学有这样的经历,早期我们使用电钻这种电机设备,并且同时在听收音机或者看电视
发表于 2020-07-25
第三章 硬件基础知识学习
第五章 定时器和数码管
通过上节课的实验,大家会发现,我们逐渐进入比较实质性的学习了,需要记住的内容也更多了,个别地方可能会感觉吃力。但是大家不要担心,要有信心。这个跟小孩学走路一样,刚开始走路不太稳,没关系,多走几步多练练。看视频的时候要注意专心,一遍看不懂,思考一下,再回头看第二遍和第三遍,没准一下就明白了。如果三遍还看不明白,那就把不懂的问题放一放,继续往下学两课再回头看一次,也可以到QQ群里或单片机论坛http://www.51hei.com/bbs/ 里多咨询一下其他的同学,讨论一下,可能就会茅塞顿开。1.1 基本数字逻辑门电路不管是数字电路,还是C语言,我们都会经常遇到逻辑运算和逻辑电路,在这里我介绍一下,大家先简单了解
发表于 2020-07-25
第五章 定时器和数码管
小广播
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved