18、红外

一、红外线工作原理

1、红外线系统的组成

红外线遥控器已被广泛使用在各种类型的家电产品上,它的出现给使用电器提供了很多的便利。红外线系统一般由红外发射装置和红外接收设备两大部分组成。红外发射装置又可由键盘电路、红外编码芯片、电源和红外发射电路组成。红外接收设备可由红外接收电路、红外解码芯片、电源和应用电路组成。通常为了使信号更好的被发射端发送出去,经常会将二进制数据信号调制成为脉冲信号,通过红外发射管发射。常用的有通过脉冲宽度来实现信号调制的脉宽调制(PWM)和通过脉冲串之间的时间间隔来实现信号调制的脉时调制(PPM)两种方法。

2、红外发射管

红外遥控发射装置,也就是通常我们说的红外遥控器是由键盘电路、红外编码电路、电源电路和红外发射电路组成。红外发射电路的主要元件为红外发光二极管。它实际上是一只特殊的发光二极管;由于其内部材料不同于普通发光二极管,因而在其两端施加一定电压时,它便发出的是红外线而不是可见光。目前大量的使用的红外发光二极管发出的红外线波长为940nm左右,外形与普通φ5发光二极管相同。

3、红外遥控器发射

通常红外遥控为了提高抗干扰性能和降低电源消耗,红外遥控器常用载波的方式传送二进制编码,常用的载波频率为38kHz,这是由发射端所使用的455kHz晶振来决定的。在发射端要对晶振进行整数分频,分频系数一般取12,所以455kHz÷12≈37.9kHz≈38kHz。也有一些遥控系统采用36kHz、40 kHz、56 kHz等,一般由发射端晶振的振荡频率来决定。所以,通常的红外遥控器是将遥控信号(二进制脉冲码)调制在38KHz的载波上,经缓冲放大后送至红外发光二极管,转化为红外信号发射出去的。

二进制脉冲码的形式有多种,其中最为常用的是PWM码(脉冲宽度调制码)和PPM码(脉冲位置调制码,脉冲串之间的时间间隔来实现信号调制)。如果要开发红外接收设备,一定要知道红外遥控器的编码方式和载波频率,我们才可以选取一体化红外接收头和制定解码方案。

4、红外线发射原理图

5、红外线接收

红外接收设备是由红外接收电路、红外解码、电源和应用电路组成。红外遥控接收器的主要作用是将遥控发射器发来的红外光信好转换成电信号,再放大、限幅、检波、整形,形成遥控指令脉冲,输出至遥控微处理器。近几年不论是业余制作还是正式产品,大多都采用成品红外接收头。成品红外接收头的封装大致有两种:一种采用铁皮屏蔽;一种是塑料封装。均有三只引脚,即电源正(VDD)、电源负(GND)和数据输出(VOUT)。在使用时注意成品红外接收头的载波频率,另外在遥控编码芯片输出的波形与接收头端收到的波形。

6、数据格式

数据格式包括了引导码、用户码、数据码和数据码反码,编码总占32位。数据反码是数据码反相后的编码,编码时可用于对数据的纠错。注意:第二段的用户码也可以在遥控应用电路中被设置成第一段用户码的反码。

7、位定义

用户码或数据码中的每一个位可以是位 ‘1’ ,也可以是位 ‘0’。区分 ‘0’和 ‘1’是利用脉冲的时间间隔来区分,这种编码方式称为脉冲位置调制方式,英文简写PPM

二、红外线接收

1、数据格式

数据格式包括了引导码、用户码、数据码和数据码反码,编码总占32位。数据反码是数据码反相后的编码,编码时可用于对数据的纠错。注意:第二段的用户码也可以在遥控应用电路中被设置成第一段用户码的反码。

2、位定义

用户码或数据码中的每一个位可以是位 ‘1’ ,也可以是位 ‘0’。区分 ‘0’和 ‘1’是利用脉冲的时间间隔来区分,这种编码方式称为脉冲位置调制方式,英文简写PPM

3、例程代码

  1 /*************************************************************************************************************************************
  2 *
  3 *  文件名称:main.c
  4 *  文件功能:主函数文件
  5 *
  6 ***************************************************************************************************************************************/
  7
  8 #include "pbdata.h"//调用自定义公共函数库
  9
 10
 11 /*********************************************************************************
 12 *
 13 * 初始化操作
 14 *
 15 *********************************************************************************/
 16 void RCC_Configuration(void);//系统时钟初始化函数声明
 17 void GPIO_Configuration(void);//GPIO初始化函数声明
 18 void NVIC_Configuration(void);//中断优先级配置函数声明
 19 void USART_Configuration(void);//串口配置函数声明
 20
 21 void  EXTI_Configuration_HW(void);//红外配置函数声明
 22
 23
 24
 25 /********************************************************************************
 26 *
 27 *  函数名称:main(void)
 28 *  函数功能:主函数
 29 *  函数说明:不能用void定义主函数
 30 *
 31 ********************************************************************************/
 32 int main(void)//void不能void定义主函数
 33 {
 34
 35     RCC_Configuration();    //系统时钟初始化
 36
 37     GPIO_Configuration();//端口初始化
 38
 39     USART_Configuration();//串口配置
 40
 41     NVIC_Configuration();//中断优先级配置
 42
 43     EXTI_Configuration_HW();//红外配置
 44
 45
 46     while(1)
 47     {
 48     if(hw_jsbz==1)//收到红外数据
 49     {
 50       hw_jsbz=0;//标志置0
 51       printf("hw_receive=%0.8X\r\n",hw_jsm);
 52
 53       hw_jsm=0;//清空
 54     }
 55
 56     delay_ms(1000);//延时1s
 57
 58     }
 59
 60 }
 61
 62
 63
 64
 65 /********************************************************************************
 66 *
 67 *  函数名称:RCC_Configuration(void)
 68 *  函数功能:系统时钟高初始化函数
 69 *
 70 ********************************************************************************/
 71     void RCC_Configuration(void)//系统时钟高初始化函数
 72   {
 73
 74     SystemInit();//系统初始化
 75     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//串口对应GPIO时钟使能
 76         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//红外对应GPIO时钟使能
 77         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//串口时钟使能
 78         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//引脚复用
 79
 80
 81     }
 82
 83
 84
 85 /*******************************************************************************
 86 *
 87 * 函数名称:GPIO_Configuration(void)
 88 * 函数功能:GPIO初始化函数
 89 *
 90 ********************************************************************************/
 91
 92     void GPIO_Configuration(void)//GPIO初始化函数
 93   {
 94
 95
 96 /*串口引脚配置*/
 97         GPIO_InitTypeDef GPIO_InitStructure;//定义一个GPIO设置的结构体变量
 98
 99 /*输出引脚配置*/
100         /*结构体变量赋值*/
101       GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;////引脚配置TX
102       GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//配置频率
103         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//发送要配置成复用推挽输出
104         /*对应的GPIO初始化*/
105       GPIO_Init(GPIOA,&GPIO_InitStructure);
106
107
108 /*输入引脚配置*/
109         /*结构体变量赋值*/
110       GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;////引脚配置RX
111         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//接收引脚配置成浮空输入
112         /*对应的GPIO初始化*/
113       GPIO_Init(GPIOA,&GPIO_InitStructure);
114
115
116
117 /*红外引脚配置*/
118     /*结构体变量赋值*/
119       GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;////红外接收引脚配置
120         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//发送要配置成上拉输入模式
121      /*对应的GPIO初始化*/
122       GPIO_Init(GPIOA,&GPIO_InitStructure);
123
124   }
125
126
127
128
129 /****************************************************************************
130 *
131 *  函数名称:NVIC_Configuration(void)
132 *  函数功能:配置中断优先级
133 *
134 ****************************************************************************/
135
136 void NVIC_Configuration(void)
137 {
138   NVIC_InitTypeDef NVIC_InitStructure; //定义一个优先级配置结构体变量
139
140   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//分组
141
142
143
144 /*串口中断优先级*/
145   NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
146   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢断优先级
147   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//响应优先级
148   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能
149
150
151
152 /*红外外部中断优先级*/
153     NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;//外部中断
154   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢断优先级
155   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//响应优先级
156   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能
157
158   NVIC_Init(&NVIC_InitStructure);//初始化
159
160
161
162
163 }
164
165
166 /*********************************************************************************
167 *
168 *  函数名称:
169 *  函数功能:串口配置函数
170 *
171 *********************************************************************************/
172 void USART_Configuration(void)
173 {
174 /*定义串口配置结构体变量*/
175         USART_InitTypeDef USART_InitStructure;//定义一个串口配置结构体变量
176
177
178 /*结构体变量赋值*/
179     USART_InitStructure.USART_BaudRate = 9600;//波特率9600
180     USART_InitStructure.USART_WordLength = USART_WordLength_8b;//位宽,8位
181     USART_InitStructure.USART_StopBits = USART_StopBits_1;//停止位1
182     USART_InitStructure.USART_Parity = USART_Parity_No;//不奇偶校验
183     USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//流控禁止
184     USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;//发送使能
185
186
187 /*发送串口配置初始化*/
188     USART_Init(USART1, &USART_InitStructure);
189
190
191 /*打开串口接收中断*/
192       USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//当接收到数据时,会产生中断
193
194
195 /*打开串口*/
196     USART_Cmd(USART1,ENABLE);//串口使能,打开
197
198 /*清空中断标志位*/
199     USART_ClearFlag(USART1,USART_FLAG_TC);
200 }
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236     

 1 #include "pbdata.h"
 2
 3
 4
 5
 6 /**********************************************
 7 *
 8 *  函数名称:EXTI_Configuration(void)
 9 *  函数功能:红外触发外部中断配置
10 *
11 **********************************************/
12
13 void  EXTI_Configuration_HW(void)
14 {
15      EXTI_InitTypeDef  EXTI_InitStructure;//定义一个中断配置的结构体变量
16
17      EXTI_ClearITPendingBit(EXTI_Line3);//使用前清除中断
18
19      GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource3);//选择GPIO管脚作为外部中断线路
20
21
22      EXTI_InitStructure.EXTI_Line = EXTI_Line3;
23      EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断模式
24      EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//触发方式,下降沿
25      EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中断使能
26
27
28      EXTI_Init(&EXTI_InitStructure);//初始化进行配置
29 }
30
31
32
33
34
35
36
37
38
39
40 u8  HW_jssj(void)
41 {
42     u8 t=0;
43     while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)==1)//说明是高电平
44     {
45        t++;
46        delay_us(20);
47
48        if(t>=250)//高电平最长450ms,250*20=5ms,超时溢出
49           return t;
50
51      }
52      return t;
53 }

 1 #ifndef  _HW_JS_H
 2 #define  _HW_JS_H
 3
 4 #include "pbdata.h"
 5
 6
 7 u8  HW_jssj(void);
 8
 9
10 void  EXTI_Configuration_HW(void);
11
12 #endif

  1 /****************************************************************************************************************
  2 *
  3 * 文件名称:pbdata.c
  4 * 文件功能:自定义函数或者全局变量的初始化
  5 *
  6 ****************************************************************************************************************/
  7
  8 /*头文件声明*/
  9 #include "pbdata.h"
 10
 11
 12
 13
 14 /********************************************************************************************
 15 *
 16 * 自定义全局变量
 17 *
 18 ********************************************************************************************/
 19 u8 dt=0;
 20
 21
 22 u32 hw_jsm=0;
 23 u8  hw_jsbz=0;
 24
 25
 26
 27
 28 /******************************************************************************************
 29 *
 30 * 自定义函数
 31 *
 32 ******************************************************************************************/
 33
 34
 35
 36 /**************************************************
 37 *
 38 *  函数名称:delay_us(u32 nus)
 39 *  函数功能:微秒延时函数
 40 *  输入参数:输入值为延时us
 41 *
 42 ***************************************************/
 43 void delay_us(u32 nus)
 44 {
 45     u32 temp;
 46     SysTick->LOAD = 9*nus;//载入初值,72M/8=9M,也就是1/9us,9*1/9us,所以是执行9次
 47     SysTick->VAL=0X00;//清空计数器,清空后,就自动设置自己设定的计数器的值
 48     SysTick->CTRL=0X01;//使能,减到零动作(不发生中断),采用外部时钟
 49
 50     do
 51     {
 52           temp=SysTick->CTRL;//标志位,等到一直减到0
 53          }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
 54
 55     SysTick->CTRL=0x00; //关闭计数器
 56     SysTick->VAL =0X00; //清空计数器
 57 }
 58
 59
 60
 61
 62
 63
 64
 65 /***************************************************
 66 *
 67 * 函数名称:delay_ms(u16 nms)
 68 * 函数功能:毫秒级延时
 69 * 输入参数:输入值位延时ms
 70 *
 71 ****************************************************/
 72 void delay_ms(u16 nms)
 73 {
 74     u32 temp;
 75     SysTick->LOAD = 9000*nms;//载入初值,72M/8=9M,也就是1/9us,9*1/9us,所以是执行9000次
 76     SysTick->VAL=0X00;//清空计数器,清空后,就自动设置自己设定的计数器的值
 77     SysTick->CTRL=0X01;//使能,减到零动作(不发生中断),采用外部时钟
 78
 79     do
 80     {
 81           temp=SysTick->CTRL;//标志位,等到一直减到0
 82          }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
 83
 84     SysTick->CTRL=0x00; //关闭计数器
 85     SysTick->VAL =0X00; //清空计数器
 86 }
 87
 88
 89
 90 /****************************************************
 91 *
 92 * 重定义printf函数部分
 93 *
 94 ****************************************************/
 95 int fputc(int ch,FILE *F)
 96 {
 97
 98     USART_SendData(USART1,(u8)ch);
 99
100     while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待发送完成,判断标志位
101
102     return ch;
103 }

 1 /*pbdata.h*/
 2 /***************************************************************************************************
 3 *
 4 * 文件名称:pbdata.h
 5 * 文件功能:自定义的函数和全局变量的声明头文件
 6 *
 7 ***************************************************************************************************/
 8
 9 #ifndef _pbdata_H
10 #define _pbdata_H
11
12
13
14
15
16 /********************************************************************
17 *
18 *  调用的头文件放在这里
19 *
20 ********************************************************************/
21 #include "stm32f10x.h"
22
23
24 #include "stm32f10x_rcc.h"
25 #include "stm32f10x_gpio.h"
26 #include "misc.h"
27 #include "stm32f10x_adc.h"
28 #include "stm32f10x_bkp.h"
29 #include "stm32f10x_can.h"
30 #include "stm32f10x_cec.h"
31 #include "stm32f10x_dac.h"
32 #include "stm32f10x_dbgmcu.h"
33 #include "stm32f10x_dma.h"
34 #include "stm32f10x_exti.h"
35 #include "stm32f10x_flash.h"
36 #include "stm32f10x_fsmc.h"
37 #include "stm32f10x_i2c.h"
38 #include "stm32f10x_iwdg.h"
39 #include "stm32f10x_pwr.h"
40 #include "stm32f10x_rtc.h"
41 #include "stm32f10x_sdio.h"
42 #include "stm32f10x_spi.h"
43 #include "stm32f10x_tim.h"
44 #include "stm32f10x_usart.h"
45 #include "stm32f10x_wwdg.h"
46
47
48 #include "stdio.h"
49
50
51 #include "hw_fs.h"
52
53 /********************************************************************
54 *
55 *  自定义全局变量声明
56 *
57 ********************************************************************/
58 extern u8 dt;
59
60 extern u8 flag;
61 extern  u16  js_count;
62
63
64
65 /********************************************************************
66 *
67 *  自定义全函数声明
68 *
69 ********************************************************************/
70 void delay(u32 nCount);
71 void delay_us(u32 nus);
72 void delay_ms(u16 nms);
73 int fputc(int ch,FILE *F);
74
75
76
77 #endif

  1 /**
  2   ******************************************************************************
  3   * @file GPIO/IOToggle/stm32f10x_it.c
  4   * @author  MCD Application Team
  5   * @version  V3.0.0
  6   * @date  04/06/2009
  7   * @brief  Main Interrupt Service Routines.
  8   *         This file provides template for all exceptions handler and
  9   *         peripherals interrupt service routine.
 10   ******************************************************************************
 11   * @copy
 12   *
 13   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 14   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 15   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 16   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 17   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 18   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 19   *
 20   * <h2><center>&copy; COPYRIGHT 2009 STMicroelectronics</center></h2>
 21   */
 22
 23 /* Includes ------------------------------------------------------------------*/
 24 #include "stm32f10x_it.h"
 25 #include "stm32f10x_exti.h"
 26 #include "stm32f10x_rcc.h"
 27 #include "stm32f10x_tim.h"
 28 #include "misc.h"
 29 #include "pbdata.h"
 30
 31 void NMI_Handler(void)
 32 {
 33 }
 34
 35
 36
 37 /**
 38   * @brief  This function handles Hard Fault exception.
 39   * @param  None
 40   * @retval : None
 41   */
 42 void HardFault_Handler(void)
 43 {
 44   /* Go to infinite loop when Hard Fault exception occurs */
 45   while (1)
 46   {
 47   }
 48 }
 49
 50 /**
 51   * @brief  This function handles Memory Manage exception.
 52   * @param  None
 53   * @retval : None
 54   */
 55 void MemManage_Handler(void)
 56 {
 57   /* Go to infinite loop when Memory Manage exception occurs */
 58   while (1)
 59   {
 60   }
 61 }
 62
 63 /**
 64   * @brief  This function handles Bus Fault exception.
 65   * @param  None
 66   * @retval : None
 67   */
 68 void BusFault_Handler(void)
 69 {
 70   /* Go to infinite loop when Bus Fault exception occurs */
 71   while (1)
 72   {
 73   }
 74 }
 75
 76 /**
 77   * @brief  This function handles Usage Fault exception.
 78   * @param  None
 79   * @retval : None
 80   */
 81 void UsageFault_Handler(void)
 82 {
 83   /* Go to infinite loop when Usage Fault exception occurs */
 84   while (1)
 85   {
 86   }
 87 }
 88
 89 /**
 90   * @brief  This function handles SVCall exception.
 91   * @param  None
 92   * @retval : None
 93   */
 94 void SVC_Handler(void)
 95 {
 96 }
 97
 98 /**
 99   * @brief  This function handles Debug Monitor exception.
100   * @param  None
101   * @retval : None
102   */
103 void DebugMon_Handler(void)
104 {
105 }
106
107 /**
108   * @brief  This function handles PendSV_Handler exception.
109   * @param  None
110   * @retval : None
111   */
112 void PendSV_Handler(void)
113 {
114 }
115
116 /**
117   * @brief  This function handles SysTick Handler.
118   * @param  None
119   * @retval : None
120   */
121 void SysTick_Handler(void)
122 {
123 }
124
125
126
127 /****************************************************************************
128 *
129 * 函数名称:void TIM3_IRQHandler(void)
130 * 外部中断处理函数
131 *
132 ****************************************************************************/
133
134
135 void TIM3_IRQHandler(void)
136 {
137
138 }
139
140
141
142
143 /****************************************************************************
144 *
145 * 函数名称:void EXTI9_5_IRQHandler(void)
146 * 外部中断处理函数
147 *
148 ****************************************************************************/
149
150 void EXTI9_5_IRQHandler(void)
151 {
152   if(EXTI_GetITStatus(EXTI_Line5)==SET)  //判断是否产生了中断
153   {
154        EXTI_ClearITPendingBit(EXTI_Line5);//中断清除
155
156       delay_ms(10);//延时消抖
157
158       if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==Bit_RESET) //再次判断,消抖
159       {
160           if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)==Bit_RESET)//如果LED是亮
161           {
162            GPIO_SetBits(GPIOB,GPIO_Pin_5);    //则熄灭
163           }
164           else
165           {
166               GPIO_ResetBits(GPIOB,GPIO_Pin_5);//如果是熄灭的,就亮
167           }
168       }
169   }
170 }
171
172
173
174
175
176
177
178
179
180 /****************************************************************************
181 * ?    ?úvoid EXTI1_IRQHandler(void)
182 * ?    ?úEXTI2???m??
183 * ????ú?
184 * ????ú?
185 * ?    ?ú
186 * ????ú?
187 ****************************************************************************/
188 void EXTI1_IRQHandler(void)
189 {
190
191 }
192
193 /****************************************************************************
194 * ?    ?úvoid EXTI2_IRQHandler(void)
195 * ?    ?úEXTI2???m??
196 * ????ú?
197 * ????ú?
198 * ?    ?ú
199 * ????ú?
200 ****************************************************************************/
201 void EXTI2_IRQHandler(void)
202 {
203
204 }
205
206 /****************************************************************************
207 *
208 * 函数名称:void EXTI3_IRQHandler(void)
209 * 函数功能:外部中断XTI3中断处理函数
210 *
211 ****************************************************************************/
212 void EXTI3_IRQHandler(void)
213 {
214    u8 Tim=0,ok=0,Num=0,Data=0;
215
216     while(1)
217     {
218        if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)==1)
219        {
220            Tim=HW_jssj();//获得高电平时间
221
222            if(Tim>=250)//超时,非法信号
223                   break;
224
225            if(Tim>=200 && Tim<250)//4ms-5ms之间,起始码
226            {
227               ok=1;//收到起始新号
228             }
229
230             else if(Tim>=60 && Tim<90)//1.2ms-1.8ms之间,数据1
231             {
232                Data=1;//收到数据1
233              }
234
235             else if(Tim>=10 && Tim<50)//0.2ms-1.0ms之间,数据0
236             {
237                Data=0;//收到数据0
238              }
239
240              if(ok==1)//收到起始信号,开始接收数据
241              {
242                  hw_jsm<<=1;
243                  hw_jsm+=Data;
244
245                  if(Num>=32)//接收完,共32位
246                  {
247                     hw_jsbz=1;//标志置1
248                     break;
249                   }
250
251                   Num++;
252                }
253           }
254
255        EXTI_ClearITPendingBit(EXTI_Line3);
256
257      }
258
259 }
260
261
262 /****************************************************************************
263 *
264 * 函数名称:USART1_IRQHandler(void)
265 * 函数功能:串口中断1处理函数
266 *
267 ****************************************************************************/
268 void USART1_IRQHandler(void)
269 {
270
271      if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)//判断是否发生了串口中断
272      {
273
274          USART_SendData(USART1,USART_ReceiveData(USART1));//从串口中读取数据,然后发送出去
275
276          while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待发送完成,判断标志位
277
278      }
279  }

4、工程下载:

http://download.csdn.net/detail/a1181803348/8777117

三、红外发送

1、红外线发射原理图

2、数据格式

数据格式包括了引导码、用户码、数据码和数据码反码,编码总占32位。数据反码是数据码反相后的编码,编码时可用于对数据的纠错。注意:第二段的用户码也可以在遥控应用电路中被设置成第一段用户码的反码。

3、位定义

用户码或数据码中的每一个位可以是位 ‘1’ ,也可以是位 ‘0’。区分 ‘0’和 ‘1’是利用脉冲的时间间隔来区分,这种编码方式称为脉冲位置调制方式,英文简写PPM

4、例程代码:

  1 /*************************************************************************************************************************************
  2 *
  3 *  文件名称:main.c
  4 *  文件功能:主函数文件
  5 *
  6 ***************************************************************************************************************************************/
  7
  8 #include "pbdata.h"//调用自定义公共函数库
  9
 10
 11 /*********************************************************************************
 12 *
 13 * 初始化操作
 14 *
 15 *********************************************************************************/
 16 void RCC_Configuration(void);//系统时钟初始化函数声明
 17 void GPIO_Configuration(void);//GPIO初始化函数声明
 18 void NVIC_Configuration(void);//中断优先级配置函数声明
 19 void USART_Configuration(void);//串口配置函数声明
 20
 21 void TIM2_Configuration(void);//定时器T2配置函数声明
 22 void   hw_fs(u32 dt);//红外线发射数据函数声明
 23
 24
 25 /********************************************************************************
 26 *
 27 *  函数名称:main(void)
 28 *  函数功能:主函数
 29 *  函数说明:不能用void定义主函数
 30 *
 31 ********************************************************************************/
 32 int main(void)//void不能void定义主函数
 33 {
 34     u32  dt=0x00FFD2AD;//红外线发射的数据
 35
 36     RCC_Configuration();    //系统时钟初始化
 37
 38     GPIO_Configuration();//端口初始化
 39
 40     USART_Configuration();//串口配置
 41
 42     NVIC_Configuration();//中断优先级配置
 43
 44     TIM2_Configuration();//定时器T2配置
 45
 46
 47     hw_fs(dt);//红外线发射数据
 48
 49
 50     while(1)
 51     {
 52         printf("fashe=%X\n",dt);
 53
 54         delay_ms(3000);
 55     }
 56
 57 }
 58
 59
 60
 61
 62 /********************************************************************************
 63 *
 64 *  函数名称:RCC_Configuration(void)
 65 *  函数功能:系统时钟高初始化函数
 66 *
 67 ********************************************************************************/
 68     void RCC_Configuration(void)//系统时钟高初始化函数
 69   {
 70
 71     SystemInit();//系统初始化
 72     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//串口对应GPIO时钟使能
 73         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);//红外发送对应GPIO时钟使能
 74         RCC_APB2PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//定时器T2时钟使能
 75         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//串口时钟使能
 76         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//引脚复用
 77
 78     }
 79
 80
 81
 82 /*******************************************************************************
 83 *
 84 * 函数名称:GPIO_Configuration(void)
 85 * 函数功能:GPIO初始化函数
 86 *
 87 ********************************************************************************/
 88
 89     void GPIO_Configuration(void)//GPIO初始化函数
 90   {
 91
 92
 93 /*串口引脚配置*/
 94         GPIO_InitTypeDef GPIO_InitStructure;//定义一个GPIO设置的结构体变量
 95
 96 /*输出引脚配置*/
 97         /*结构体变量赋值*/
 98       GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;////引脚配置TX
 99       GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//配置频率
100         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//发送要配置成复用推挽输出
101         /*对应的GPIO初始化*/
102       GPIO_Init(GPIOA,&GPIO_InitStructure);
103
104
105 /*输入引脚配置*/
106         /*结构体变量赋值*/
107       GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;////引脚配置RX
108         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//接收引脚配置成浮空输入
109         /*对应的GPIO初始化*/
110       GPIO_Init(GPIOA,&GPIO_InitStructure);
111
112
113   }
114
115
116 /****************************************************************************
117 *
118 *  函数名称:NVIC_Configuration(void)
119 *  函数功能:配置中断优先级
120 *
121 ****************************************************************************/
122
123 void NVIC_Configuration(void)
124 {
125   NVIC_InitTypeDef NVIC_InitStructure; //定义一个优先级配置结构体变量
126
127   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//分组
128
129   NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
130   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢断优先级
131   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//响应优先级
132   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能
133
134   NVIC_Init(&NVIC_InitStructure);//初始化
135 }
136
137
138 /*********************************************************************************
139 *
140 *  函数名称:
141 *  函数功能:串口配置函数
142 *
143 *********************************************************************************/
144 void USART_Configuration(void)
145 {
146 /*定义串口配置结构体变量*/
147         USART_InitTypeDef USART_InitStructure;//定义一个串口配置结构体变量
148
149
150 /*结构体变量赋值*/
151     USART_InitStructure.USART_BaudRate = 9600;//波特率9600
152     USART_InitStructure.USART_WordLength = USART_WordLength_8b;//位宽,8位
153     USART_InitStructure.USART_StopBits = USART_StopBits_1;//停止位1
154     USART_InitStructure.USART_Parity = USART_Parity_No;//不奇偶校验
155     USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//流控禁止
156     USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;//发送使能
157
158
159 /*发送串口配置初始化*/
160     USART_Init(USART1, &USART_InitStructure);
161
162
163 /*打开串口接收中断*/
164       USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//当接收到数据时,会产生中断
165
166
167 /*打开串口*/
168     USART_Cmd(USART1,ENABLE);//串口使能,打开
169
170 /*清空中断标志位*/
171     USART_ClearFlag(USART1,USART_FLAG_TC);
172 }
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208     

 1 #include "pbdata.h"
 2
 3
 4
 5
 6 /**********************************************
 7 *
 8 *  函数名称:TIM2_Configuration(void)
 9 *  函数功能:配置定时器
10 *
11 ***********************************************/
12 void TIM2_Configuration(void)
13 {
14     TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//定义一个结构体配置变量
15
16     TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//使用前清空标志位
17
18
19
20 /*38k,周期26.316us,一个中断13.16us时间;CPU72M,一个周期1/72us*/
21    TIM_TimeBaseStructure.TIM_Period = 947;//初值:26.316/(1/72)=947个周期产生一次中断,初值为947
22    TIM_TimeBaseStructure.TIM_Prescaler = 0;//预分频
23    TIM_TimeBaseStructure.TIM_ClockDivision = 0;//时钟
24    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//模式
25
26    TIM_TimeBaseInit(TIM3, & TIM_TimeBaseStructure);//初始化配置
27
28    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//打开中断(中断方式)
29
30    TIM_Cmd(TIM3,ENABLE);//打开定时器
31 }
32
33
34
35
36 void   hw_fs(u32 dt)
37 {
38      u8 i=0;
39    flag=0;//初始化管脚
40    js_count=683;//起始信号持续9ms低电平,9ms/13.16us=683
41    flag=1;//管脚高电平
42    while(js_count);//一直到等于0
43
44    js_count=341;//持续4.5ms高电平,4.5ms/13.16us=341
45    flag=0;//初始化管脚
46    while(js_count);//一直到等于0
47
48 /*发送数据*/
49    for(i=0;i<32;i++)
50    {
51       js_count=42;//持续0.56ms低电平,0.56ms/13.16us=42
52       flag=1;//管脚高电平
53       while(js_count);//一直到等于0
54
55       if((dt & 0x80000000)==0)//如果dt最高位为0,发射0
56       {
57          js_count=43;//持续0.565ms,0.565ms/13.16us=43
58        }
59        else//dt最高位为1,发射1
60        {
61           js_count=128;//持续1.69ms,1.69ms/13.16us=128
62
63         }
64
65        flag=0;
66        while(js_count);//一直到等于0
67
68        dt<<=1;//依次从高到低发送,总共32位
69      }
70
71      js_count=20;//0.263ms
72      flag=1;
73      while(js_count);//一直到等于0
74      flag=0;//恢复管脚状态
75 }

 1 #ifndef   _HW_FS_H
 2 #define   _HW_FS_H
 3
 4 #include "pbdata.h"
 5
 6 void TIM2_Configuration(void);
 7 void   hw_fs(u32 dt);
 8
 9
10 #endif

  1 /**
  2   ******************************************************************************
  3   * @file GPIO/IOToggle/stm32f10x_it.c
  4   * @author  MCD Application Team
  5   * @version  V3.0.0
  6   * @date  04/06/2009
  7   * @brief  Main Interrupt Service Routines.
  8   *         This file provides template for all exceptions handler and
  9   *         peripherals interrupt service routine.
 10   ******************************************************************************
 11   * @copy
 12   *
 13   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 14   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 15   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 16   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 17   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 18   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 19   *
 20   * <h2><center>&copy; COPYRIGHT 2009 STMicroelectronics</center></h2>
 21   */
 22
 23 /* Includes ------------------------------------------------------------------*/
 24 #include "stm32f10x_it.h"
 25 #include "stm32f10x_exti.h"
 26 #include "stm32f10x_rcc.h"
 27 #include "stm32f10x_tim.h"
 28 #include "misc.h"
 29 #include "pbdata.h"
 30
 31 void NMI_Handler(void)
 32 {
 33 }
 34
 35
 36
 37 /**
 38   * @brief  This function handles Hard Fault exception.
 39   * @param  None
 40   * @retval : None
 41   */
 42 void HardFault_Handler(void)
 43 {
 44   /* Go to infinite loop when Hard Fault exception occurs */
 45   while (1)
 46   {
 47   }
 48 }
 49
 50 /**
 51   * @brief  This function handles Memory Manage exception.
 52   * @param  None
 53   * @retval : None
 54   */
 55 void MemManage_Handler(void)
 56 {
 57   /* Go to infinite loop when Memory Manage exception occurs */
 58   while (1)
 59   {
 60   }
 61 }
 62
 63 /**
 64   * @brief  This function handles Bus Fault exception.
 65   * @param  None
 66   * @retval : None
 67   */
 68 void BusFault_Handler(void)
 69 {
 70   /* Go to infinite loop when Bus Fault exception occurs */
 71   while (1)
 72   {
 73   }
 74 }
 75
 76 /**
 77   * @brief  This function handles Usage Fault exception.
 78   * @param  None
 79   * @retval : None
 80   */
 81 void UsageFault_Handler(void)
 82 {
 83   /* Go to infinite loop when Usage Fault exception occurs */
 84   while (1)
 85   {
 86   }
 87 }
 88
 89 /**
 90   * @brief  This function handles SVCall exception.
 91   * @param  None
 92   * @retval : None
 93   */
 94 void SVC_Handler(void)
 95 {
 96 }
 97
 98 /**
 99   * @brief  This function handles Debug Monitor exception.
100   * @param  None
101   * @retval : None
102   */
103 void DebugMon_Handler(void)
104 {
105 }
106
107 /**
108   * @brief  This function handles PendSV_Handler exception.
109   * @param  None
110   * @retval : None
111   */
112 void PendSV_Handler(void)
113 {
114 }
115
116 /**
117   * @brief  This function handles SysTick Handler.
118   * @param  None
119   * @retval : None
120   */
121 void SysTick_Handler(void)
122 {
123 }
124
125
126
127 /****************************************************************************
128 *
129 * 函数名称:void TIM3_IRQHandler(void)
130 * 外部中断处理函数
131 *
132 ****************************************************************************/
133
134
135 void TIM3_IRQHandler(void)
136 {
137     TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
138
139     if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==Bit_RESET)
140     {
141         if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)==Bit_RESET)
142         {
143             //LED 熄灭
144            GPIO_SetBits(GPIOB,GPIO_Pin_5);
145         }
146         else
147         {
148            //LED 发光
149            GPIO_ResetBits(GPIOB,GPIO_Pin_5);
150         }
151     }
152
153 }
154
155
156
157
158 /****************************************************************************
159 *
160 * 函数名称:void EXTI9_5_IRQHandler(void)
161 * 外部中断处理函数
162 *
163 ****************************************************************************/
164 void EXTI9_5_IRQHandler(void)
165 {
166   if(EXTI_GetITStatus(EXTI_Line5)==SET)  //判断是否产生了中断
167   {
168        EXTI_ClearITPendingBit(EXTI_Line5);//中断清除
169
170       delay_ms(10);//延时消抖
171
172       if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==Bit_RESET) //再次判断,消抖
173       {
174           if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)==Bit_RESET)//如果LED是亮
175           {
176            GPIO_SetBits(GPIOB,GPIO_Pin_5);    //则熄灭
177           }
178           else
179           {
180               GPIO_ResetBits(GPIOB,GPIO_Pin_5);//如果是熄灭的,就亮
181           }
182       }
183   }
184 }
185
186
187
188
189
190
191
192
193
194 /****************************************************************************
195 * ?    ?úvoid EXTI1_IRQHandler(void)
196 * ?    ?úEXTI2???m??
197 * ????ú?
198 * ????ú?
199 * ?    ?ú
200 * ????ú?
201 ****************************************************************************/
202 void EXTI1_IRQHandler(void)
203 {
204
205 }
206
207 /****************************************************************************
208 * ?    ?úvoid EXTI2_IRQHandler(void)
209 * ?    ?úEXTI2???m??
210 * ????ú?
211 * ????ú?
212 * ?    ?ú
213 * ????ú?
214 ****************************************************************************/
215 void EXTI2_IRQHandler(void)
216 {
217
218 }
219
220 /****************************************************************************
221 *
222 * 函数名称:void EXTI3_IRQHandler(void)
223 * 函数功能:外部中断XTI3中断处理函数
224 *
225 ****************************************************************************/
226 void EXTI3_IRQHandler(void)
227 {
228
229
230 }
231
232
233 /****************************************************************************
234 *
235 * 函数名称:USART1_IRQHandler(void)
236 * 函数功能:串口中断1处理函数
237 *
238 ****************************************************************************/
239 void USART1_IRQHandler(void)
240 {
241
242      if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)//判断是否发生了串口中断
243      {
244
245          USART_SendData(USART1,USART_ReceiveData(USART1));//从串口中读取数据,然后发送出去
246
247          while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待发送完成,判断标志位
248
249      }
250  }
251
252
253 /****************************************************************************
254 *
255 * 函数名称:void TIM2_IRQHandler(void)
256 * 定时器T2中断处理函数
257 *
258 ****************************************************************************/
259
260
261 void TIM2_IRQHandler(void)
262 {
263    if(flag==1)//发送载波频率
264    {
265         GPIO_WriteBit(GPIOD,GPIO_Pin_12,(BitAction)((1-GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_12))));//进入中断,管脚置反
266     }
267     else
268     {
269         GPIO_ResetBits(GPIOD,GPIO_Pin_12);
270      }
271
272     TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清中断
273
274 }

  1 /****************************************************************************************************************
  2 *
  3 * 文件名称:pbdata.c
  4 * 文件功能:自定义函数或者全局变量的初始化
  5 *
  6 ****************************************************************************************************************/
  7
  8 /*头文件声明*/
  9 #include "pbdata.h"
 10
 11
 12
 13
 14 /********************************************************************************************
 15 *
 16 * 自定义全局变量
 17 *
 18 ********************************************************************************************/
 19 u8 dt=0;
 20 u8 flag=0;
 21 u16  js_count=0;
 22
 23
 24
 25 /******************************************************************************************
 26 *
 27 * 自定义函数
 28 *
 29 ******************************************************************************************/
 30
 31
 32
 33 /**************************************************
 34 *
 35 *  函数名称:delay_us(u32 nus)
 36 *  函数功能:微秒延时函数
 37 *  输入参数:输入值为延时us
 38 *
 39 ***************************************************/
 40 void delay_us(u32 nus)
 41 {
 42     u32 temp;
 43     SysTick->LOAD = 9*nus;//载入初值,72M/8=9M,也就是1/9us,9*1/9us,所以是执行9次
 44     SysTick->VAL=0X00;//清空计数器,清空后,就自动设置自己设定的计数器的值
 45     SysTick->CTRL=0X01;//使能,减到零动作(不发生中断),采用外部时钟
 46
 47     do
 48     {
 49           temp=SysTick->CTRL;//标志位,等到一直减到0
 50          }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
 51
 52     SysTick->CTRL=0x00; //关闭计数器
 53     SysTick->VAL =0X00; //清空计数器
 54 }
 55
 56
 57
 58
 59
 60
 61
 62 /***************************************************
 63 *
 64 * 函数名称:delay_ms(u16 nms)
 65 * 函数功能:毫秒级延时
 66 * 输入参数:输入值位延时ms
 67 *
 68 ****************************************************/
 69 void delay_ms(u16 nms)
 70 {
 71     u32 temp;
 72     SysTick->LOAD = 9000*nms;//载入初值,72M/8=9M,也就是1/9us,9*1/9us,所以是执行9000次
 73     SysTick->VAL=0X00;//清空计数器,清空后,就自动设置自己设定的计数器的值
 74     SysTick->CTRL=0X01;//使能,减到零动作(不发生中断),采用外部时钟
 75
 76     do
 77     {
 78           temp=SysTick->CTRL;//标志位,等到一直减到0
 79          }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
 80
 81     SysTick->CTRL=0x00; //关闭计数器
 82     SysTick->VAL =0X00; //清空计数器
 83 }
 84
 85
 86
 87 /****************************************************
 88 *
 89 * 重定义printf函数部分
 90 *
 91 ****************************************************/
 92 int fputc(int ch,FILE *F)
 93 {
 94
 95     USART_SendData(USART1,(u8)ch);
 96
 97     while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待发送完成,判断标志位
 98
 99     return ch;
100 }

 1 /*pbdata.h*/
 2 /***************************************************************************************************
 3 *
 4 * 文件名称:pbdata.h
 5 * 文件功能:自定义的函数和全局变量的声明头文件
 6 *
 7 ***************************************************************************************************/
 8
 9 #ifndef _pbdata_H
10 #define _pbdata_H
11
12
13
14
15
16 /********************************************************************
17 *
18 *  调用的头文件放在这里
19 *
20 ********************************************************************/
21 #include "stm32f10x.h"
22
23
24 #include "stm32f10x_rcc.h"
25 #include "stm32f10x_gpio.h"
26 #include "misc.h"
27 #include "stm32f10x_adc.h"
28 #include "stm32f10x_bkp.h"
29 #include "stm32f10x_can.h"
30 #include "stm32f10x_cec.h"
31 #include "stm32f10x_dac.h"
32 #include "stm32f10x_dbgmcu.h"
33 #include "stm32f10x_dma.h"
34 #include "stm32f10x_exti.h"
35 #include "stm32f10x_flash.h"
36 #include "stm32f10x_fsmc.h"
37 #include "stm32f10x_i2c.h"
38 #include "stm32f10x_iwdg.h"
39 #include "stm32f10x_pwr.h"
40 #include "stm32f10x_rtc.h"
41 #include "stm32f10x_sdio.h"
42 #include "stm32f10x_spi.h"
43 #include "stm32f10x_tim.h"
44 #include "stm32f10x_usart.h"
45 #include "stm32f10x_wwdg.h"
46
47
48 #include "stdio.h"
49
50
51 #include "hw_fs.h"
52
53 /********************************************************************
54 *
55 *  自定义全局变量声明
56 *
57 ********************************************************************/
58 extern u8 dt;
59
60 extern u8 flag;
61 extern  u16  js_count;
62
63
64
65 /********************************************************************
66 *
67 *  自定义全函数声明
68 *
69 ********************************************************************/
70 void delay(u32 nCount);
71 void delay_us(u32 nus);
72 void delay_ms(u16 nms);
73 int fputc(int ch,FILE *F);
74
75
76
77 #endif

5、工程下载:

http://download.csdn.net/detail/a1181803348/8777119

时间: 2024-08-01 22:41:08

18、红外的相关文章

IRM3800 红外遥控器解码 linux驱动

这一次还是接在 Cemera 上.用 中断引脚 EINT20 也就是 GPG12. 之前焊的 51 板子上有一个红外接收器. 请注意了,是 标准的 NEC 码规范:首次发送的是9ms的高电平脉冲,其后是4.5ms的低电平,接下来就是8bit的地址码(从低有效位开始发),而后是8bit的地址码的反码(主要是用于校验是否出错).然后是8bit 的命令码(也是从低有效位开始发),而后也是8bit 的命令码的反码.其"0"为载波发射0.56ms,不发射0.565ms,其"1"

树莓派 LED+蜂鸣+声音传感器+红外模块组合打造声控/红外控制LED

昨天搞了控制LED,玩了第一个,剩下的就感觉很简单了,这里记录一下 先来几张照片 玩了蜂蜜模块才发现规律,一般这种模块,都会有三个针脚,VCC(3.3V或5V供电输出针脚).GNC(对应GPIO针脚的GNC).OUT/(I/O)(对应GPIO编号的针脚),如果是需要向树莓派发送信息的,这个模块上标识的是OUT,例如这里用的声音传感器和人体红外传感器,这两个都是需要向树莓派发送侦测的信息,如果不需要向树莓派发送消息的,则标识的是I/O,比如我这个蜂鸣模块,这只是我用这三个传感器发现的,可能不正确

Android 手机红外遥控器实现(转)

源:http://www.cnblogs.com/xiaochao1234/p/3615467.html 经过连续几天的编制,安卓手机代码终于完成了,目前已经将我宿舍,家里,集控室的红外遥控电气设备完好的遥控了,另外还遥控了我的D7000相机,不错终于完工了. 代码分为二类: 各种电视.相机.等等遥控编码最简单,只要将按键的编码复制下来,直接变成手机发射码就可以了.(这种编码单个按键只发射单个信息) 最难的是空调编码,由于空调编码是将单个按键要发射所有控制信息,如增加一度温度,同时要将控制模式.

STC12C5A60S2 12M 红外发射

/* STC12C5A60S2 11.0592M  从串口获取数据,红外发射 串口发送请用16进制的格式 这里采用1T周期的STC12C5A60S2单片机,11.0592MHZ 正电源→红外LED→P0.0脚. 串口1默认选T1作为波特率发生器 TO用于中断 */ #include <STC12C5A60S2.H> #include <INTRINS.h> sbit  ISR_LED = P0^0; static bit wave;                   //载波标志

【最终版】STC12C5A60S2 12M 导线代替 红外发射

/* 项目名称:机顶盒频道锁定 日期:2016年1月31日  23:33 版本:2.0 设计:chunli 博客:http://990487026.blog.51cto.com/ 邮箱:[email protected] 编码环境:GBK2312简体中文 μVision 版本:4.72.9.0  代码类型:C语言 功能:用导线的方式实现红外控制功能 更新说明: 1, 废弃弃原来模拟按键的方式去控制机顶盒的频道,因为这种方式不稳定. 2,采用红外控制的思想,用导线代替红外发射,频道锁定迅速 为什么

红外权值拟合

不同的算法适应不同的场合,而好的算法都是从以前的经验中提取出来的,只有理论没有实践的算法是闭门造车,从实践中归纳出来的解决问题的办法往往具有便捷性. 大一跟着学长做机器人省赛的时候拼的是时间,因为大一什么都不懂,而我们有的就是时间比较闲,学长做我们看,用俗话说就是跟着学长打酱油:等到大二自己真正动手做的时候,也是用的学长搭好的框架然后自己去在里面添加东西,没有太多思考自己的东西:大三会过来再看的时候突然发现就会时不时的出现一些新的想法,有时候就会产生一些思路去解决问题,这大概就是一个过程吧. 等

arduino红外控制led(发射与接收)

网上有关红外接收的帖子不少,但是关于使用arduino自制红外发射器的帖子却很少,经过网上搜索和自己摸索,给大家发个有arduino自制红外发射器控制led亮灭的例子.关于本例我使用了两块arduino板,一块用于发射,一块用于接收. 一.红外发射(开发板一) 1 /* 2 * 发射红外线讯号 3 * 注意! 红外线发射器(IR LED)必须接到 pin 3, 不能接其它脚位,头文件已经定义,所以下面不用设置pin3口的状态 4 */ 5 #include <IRremote.h> // 引用

红外解码编码学习----verilog

在设计中运用红外遥控器可以很好的解决按键缺少的问题,还可以方便的控制产品. 红外发射部分: 红外发射管: 判断红外发射管的好坏 : 电路原理图: 接收部分: 传输的NEC协议: 本实验电路: verilog 程序: 发送程序: /********************************Copyright************************************** **----------------------------File information---------

国内从事红外热成像的公司

1.上海巨哥电子科技有限公司 http://www.magnity.com.cn/  安防红外机芯.手持测温.无人机载红外相机 2.深圳保千里电子有限公司 http://www.bqlnv.com.cn/index.html?PHPSESSID=3c38111e8b2b9024a5a5aaafcd777a2c 车载红外夜视 3.武汉高德红外股份有限公司 http://www.wuhan-guide.com/ 车载红外.红外机芯.手持测温.军工 4.浙江大立科技有限公司 http://www.da