辜渝傧

13037102709

027-87870986

教学实训

您当前的位置:首页 > 教学资源 > 实训方案 >

无线传感网络实训|实验4.5 万能红外实验

发布者:唯众    布时间:2020-12-01 14:11:46    点击量:

        唯众万能红外模块,外形如图所示,共有4个红外发射头,其中有一个是发射学习一体的,红外学习的时候一定要对准发射学习一体的头子。万能红外模块是使用串口跟CC2530单片机通信的。CC2530通过串口给模块发送“0x88 0x01 0x00 0x00 XX”则模块进入学习模式;发送“0x86 0x01 0x00 0x00 XX”则模块进入执行模式。各个字段的含义Byte1表示命令,Byte2表示键值,Byte3和Byte4预留,XX表示前4个自己的异或和。  

万能红外实验

        该可以通过 UART 发送命令进入休眠省电模式无需****** EEPROM 等存储芯片,实现万能空调遥控采用UART方式控制万能空调遥控器IC的参数设置,初始化和信号发射。UART串口通信:波特率:9600bps,数据位:8 位,停止位:1 位,校验位:无。内部完成载波调制和编码任务复位电路简单可靠,只需要1个电阻即可,复位电路好,无死机学习功能,采用载波学习型,能学习到不同载波频率,任意的编码格式。学习精度: 学习还原精准度非常高。

1.实验目的

1)、通过实验掌握CC2530芯片串口使用方法
2)、掌握唯众外能红外模块的使用方法

2.实验设备

硬件:PC机1台、ZIGBEE节点板1套(底板、核心板、仿真器、USB 线)、唯众万能红外模块1个
软件:2000/XP/win7 系统,IAR 8.10 集成开发环境

3.实验相关电路图

万能红外实验

4.实验相关寄存器

5.源码分析

#include "main.h"
 
//*-------------------------------------------------------------
//*功能说明:      定时器3,可用于系统定时器,System1MsCnt毫秒计时器
//*全局参数:      System1MsCnt--毫秒计数器
//*-------------------------------------------------------------
unsigned long System1MsCnt=0;
void Timer3Init(void)
{    
    T3CTL |= 0x08 ;          //开溢出中断    
    T3IE = 1;                //开总中断和T3中断
    T3CTL &= ~0x03;          //自动重装00->0xff
    T3CTL |= 0x10;           //启动
    EA = 1;                  //开总中断
}
#pragma vector = T3_VECTOR
__interrupt void T3_ISR(void)
{
       static unsigned char cnt=0;
    IRCON = 0x00;            //清中断标志, 也可由硬件自动完成
    if(cnt++ > 51)             //1ms 示波器观察1.02ms
    {                        //经过示波器测量确保精确
        cnt = 0;                  //计数清零
              System1MsCnt++;
    }
}
 
void clock_setup(void)
{
       CLKCONCMD &= ~0x40;           //设置系统时钟源为32MHZ晶振
    while(CLKCONSTA & 0x40);    //等待晶振稳定
    CLKCONCMD &= ~0x47;         //设置系统主时钟频率为32MHZ
      
    Delay_ms(500);             //让设备稳定
       Timer3Init();                    //可选项,系统1ms计数器
}
 
void InitBuzzer(void)
{
       P1DIR |= 0x08;                        //P1_3 定义为输出
       BUZZER = 0;                             //BUZZER 初始化关闭
}
 
void init_sensor_io(void)
{
       //1.设置IO为普通IO
       P0SEL  |= 0xC0;
       P1SEL  |= 0x07;
      
       //2.设置编码口为输入
       P0DIR &= ~0xC0;
       P1DIR &= ~0x07;
}
 
uchar get_sensor_id(void)
{            
       volatile uchar temp = P0_6<<4|P0_7<<3|P1_0<<2|P1_1<<1|P1_2;    
       return temp;
}
 
void InitKey(void)
{
       P2DIR &= ~0x01;                                                  //P20定义为输入
       KEY = 1;
}
 
uchar CheckKey(void)
{
       uint i=0;
       if(KEY == 0)
       {
              do{
                     i++;
                     Delay_ms(10);
              }while(KEY==0);
             
              if(i>1 && i<50){
                     return 1;
              }
              if(i>100 && i<300){
                     return 2;
              }
       }
       return 0;
}
 
void InitIrCmd(uchar* ieBuf,uchar d0,uchar d1,uchar d2,uchar d3)
{
       ieBuf[0] = d0;
       ieBuf[1] = d1;
       ieBuf[2] = d2;
       ieBuf[3] = d3;
      
       ieBuf[4] = d0^d1^d2^d3;
}
 
void main(void)
{   
       uchar mode=0,temp8=0,key=0;
       uchar irCmd[5];
      
       clock_setup();                         //系统时钟设置,精确延时必须要设置
      
       port_init();
       initial_lcd(); 
       InitBuzzer();
      
       InitUart(9600);
      
       clear_screen();                                                            //清屏
       disp_string_8x16_16x16(1,1,"武汉唯众智创科技");       //显示字符串,括号里的参数分别为(PAGE,列,字符串指针)
       disp_string_8x16_16x16(3,1,"----实验3.4-----");
       Delay_ms(1000);
       clear_screen();
       disp_string_8x16_16x16(1,1,"----执行模式----");      //默认进入执行模式
    while(1)
    {               
              Delay_ms(10);
              temp8 = get_sensor_id();
              if(temp8!=10){                               
                     disp_string_8x16_16x16(1,1,"请插万能红外模块");
                     disp_string_8x16_16x16(3,1,"----实验3.4-----");
                     Delay_ms(1000);
                     continue;
              }     
              key = CheckKey();
              if(key==1){                                //短按--触发执行或者学习功能
                     clear_vertical(2);
                     InitIrCmd(irCmd,mode+0x86,1,0,0);     //0x86--执行 0x88--学习
                     UartSendBytes(irCmd,5);
                     UartRecvBytes(&temp8,1,50);
                     if(temp8 == 0x89){
                            disp_string_8x16_16x16(3,1,"成功");
                     }                   
              }else if(key==2){                //长按--切换执行和学习
                     clear_screen();   
                     mode = mode==0?2:0;            
                     if(mode==0){                     //默认执行模式
                            disp_string_8x16_16x16(1,1,"----执行模式----");
                     }else{                                 //长按后进入学习模式
                            disp_string_8x16_16x16(1,1,"----学习模式----");
                     }     
              }     
    }
}

6.实验现象

       默认处于执行模式,长按按键3秒进入学习模式,OLED液晶显示学习模式,然后使用配套遥控器对准外能红外模块的接收头按下需要学习的键,学习成功,红外模块指示灯闪烁3下。再长按按键3秒回到执行模式,OLED液晶显示执行模式,此时按下按键后松开,执行成功,红外模块指示灯闪烁一下。如图所示:

万能红外实验万能红外实验


上一篇:无线传感网络实训|实验4.4 电量仪实验

下一篇:无线传感网络实训|第五章 实验5.1 BasicRF点对点通信实验