 
					
				 
					
				 
					
				 
					
				


驱动程序下载地址:http://share.eepw.com.cn/share/download/id/60556
 
					
				 
					
				 
					
				 
					
				      本实验是由4键无线遥控器,315MHz超再生接收模块和MCU-DIY开发板一起来完成的。其中:4键无线遥控器采用SC2262遥控编码电路,最多有12位三态编码;315MHz超再生接收模块通常与PT2272解码芯片配合来完成遥控器解码的。而本实验是由MCU-DIY开发板上的单片机直接对无线遥控接收软件模拟解码,而无需专用的解码芯片,解码效果如下:

解码程序:
/*******MCU-DIY开发板遥控解码程序*****/
#include <STC12C5A60S2.H> //STC头文件
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char display[4] = { 0x77, 0x7c, 0x39, 0x5e};//显示码数组
/*****控制口定义 *****/
sbit WUXIAN = P3^7;                      //遥控信号输入I/O口
#define _rlcar_(RX)  CY=RX&0X80          //RX带进位左移1位,数据放入ACC 
uchar bdata wx_data0,wx_data1,wx_data2;  //存储24位无线数据
uchar data wx_code0,wx_code1,wx_code2;
uchar data wx_count,wxcount_buf;         //低电平时间计数器
uchar data wx_bit;                       //无线码位数
bit tb_flag;        //同步码接收成功标志
bit wx_ok;          //无线码接收成功标志
bit wx_sta;         //无线信号输入脚的高低电平状态
//************单片机初始化************//
void mcu_initialize() 
{
// WDT_CONTR=0x00;       //关闭看门狗
 AUXR=0x00;               //定时器0和1设为传统8051速度,12分频
//TCON = 0x8E;           //  1 0 0 0 1 1 1 0
P3M1=0x80;P3M0=0x00;   //P1为准双向口
P3=0x00; 
 
 TR0=0;               //定时器T0停止
 TH0=0xA4;TL0=0xA4;      //100us中断一次  
 
 TMOD=0x22;       //设置T0为自动装入的8位定时器  
 ET0=1;           //允许T0中断
 EA=1;     //全局中断开启
 TR0=1;           //定时器T0启动
}
/*********************************************************************************************
函数名:毫秒级CPU延时函数
调  用:DELAY_MS (?);
参  数:1~65535(参数不可为0)
返回值:无
结  果:占用CPU方式延时与参数数值相同的毫秒时间
备  注:应用于1T单片机时i<600,应用于12T单片机时i<125
/*********************************************************************************************/
void DELAY_MS (uint a){
 uint i;
 while( a-- != 0){
  for(i = 0; i < 600; i++);
 }
}
/*********************************************************************************************/
void led_display(void){ //主程序 
uchar i;
   for(i=0;i<8;i++)
   {
 P2 = i; 
   }
}
/*********************************************************************************************/
//************解码程序************//
void decode() 
{
  if(WUXIAN)         //检测无线I/O口为高
  {           
    if(!wx_sta)  //无线信号输入脚的电平状态为低
    {
      wx_sta=1;  //无线信号状态从低变高
      wxcount_buf=wx_count;
      if(tb_flag)  //同步码标志为1
       {         
         if((0x03<wxcount_buf)&&(wxcount_buf<0x07))        //低电平脉宽范围在200us到800us之间 ------码1
      {           
          CY=1;
         }
         else if((0x0e<wxcount_buf)&&(wxcount_buf<0x12))   //低电平脉宽范围在1.3ms到2ms之间   ------码0
      {     
          CY=0;
         }
         else //干扰码
      {
       P0 = 0x00;        
       wx_count=0;
          wx_bit=0;
          wxcount_buf=0;
       tb_flag=0;
          return;
         }
        _rlcar_(wx_data0);      //移位寄存器,接收一位数据
        wx_data0=ACC;
        _rlcar_(wx_data1);
        wx_data1=ACC;
        _rlcar_(wx_data2);
        wx_data2=ACC;
      
        if(++wx_bit==24)   //接收完24位码,接收成功标志wx_ok置1
     {      
         tb_flag=0;
         wx_bit=0;
         wx_ok=1;      
         wx_code0=wx_data0;
      wx_code1=wx_data1;
      wx_code2=wx_data2;
        }
        }
        else 
     {
         if((0x64<wxcount_buf)&&(wxcount_buf<0xc8))  //低电平脉宽范围在13.5ms到20ms之间,把同步码标志置1
           tb_flag=1;  // 同步码标志
         else
           P0 = 0x00;
        }
      }
  }
  else                        //检测无线I/O口为<低>
  {
    if(wx_sta)             //无线信号输入脚的电平状态为<高>
     {
      wx_count=0;       //无线信号从高变低,清零低电平脉宽计数器
      wx_sta=0;
     }        
       else      //无线信号输入脚的电平状态为<低>
           wx_count++;        //无线信号为低电平,低电平脉宽计数器加1
   }
}
//************定时器0中断程序************//
void timer0_isr() interrupt 1 
{
    decode();
    switch(wx_code0)
    {
     case 0xc0: P0 = display[0];break;      
     case 0x30: P0 = display[1];break;             
     case 0x0c: P0 = display[2];break;     
     case 0x03: P0 = display[3];break;          
        default: break;
    }
}
//************主程序************//
void main() 
{
    mcu_initialize();
 P0 = 0x00;
    while(1)
 {
   led_display();
  }
}
回复
| 有奖活动 | |
|---|---|
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
| 送您一块开发板,2025年“我要开发板活动”又开始了! | |

 
			
			
			
						
			 
					
				 
					
				 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

