红外遥控STM程序_第1页
红外遥控STM程序_第2页
红外遥控STM程序_第3页
红外遥控STM程序_第4页
红外遥控STM程序_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/* *       stm32F103VET6 红外驱动【遥控器解码实验程序】 * *   遥控器 :42位编码 * */ #include "stm32f10x.h" #include "exti.h" #include "beep.h" #include "SysTick.h"    #define   

2、; LED1_0      GPIOD->BRR  = 0x00000100 /LED低电平 #define    LED2_0      GPIOD->BRR  = 0x00000200 #define    LED3_0      GPIOD->BRR  = 0x00000400 #define    LE

3、D4_0      GPIOD->BRR  = 0x00000800 #define    LED1_1      GPIOD->BSRR = 0x00000100     /LED高电平 #define    LED2_1      GPIOD->BSRR = 0x00000200 #define    LE

4、D3_1      GPIOD->BSRR = 0x00000400 #define    LED4_1      GPIOD->BSRR = 0x00000800   #define    IR_Hongwai_0         GPIOE->BRR  = 0x00000004   /红外数据低电平 #define&

5、#160;   IR_Hongwai_1         GPIOE->BSRR = 0x00000004   /红外数据高电平 #define    IR_Hongwai_x GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2)  /读取红外电平状态 unsigned char TimeByte; unsigned int IR_Tireafg4; unsigned int IR_xidwr

6、it8 = 0, 0, 0, 0, 0, 0 ,0, 0;   /* *   GPIO端口配置子函数 */ void GPIO_InitStructReadtempCmd(void)  GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;  /配置GPIO管脚 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;  

7、;/配置管脚为输入上拉 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  /配置管脚速率50MHZ GPIO_Init(GPIOE, &GPIO_InitStruct);  /初始化指定端口 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;  /配置管脚陪推挽式输出 GPIO_InitStruct.GPIO_Spe

8、ed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStruct);

9、     /* *   配置外设时钟子函数 */ void RCC_APB2PeriphReadtempyCmd(void)  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  /打开GPIOB外设时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);  /打开GPIOE外设时钟 RCC_APB2PeriphC

10、lockCmd(RCC_APB2Periph_GPIOD, ENABLE);  /打开GPIOD外设时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE);  /打开AFIO复用功能外设时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);    /* * 计算低脉宽持续时间Count1 * 10us  */ unsigned int IR_Hongwa

11、iRead_LSB_Cmd()  unsigned int Count1 = 0;    /定义时间变量 IR_Hongwai_0;    /红外数据低电平 do    /进入循环体  Count1+;    /时间变量加1 Delay_10us(1);    /延时10us   while(IR_Hongwai_x = 0);  /判断条件如果读出来的红外数据为高电平跳出循环

12、体 return(Count1);    /返回时间变量积数  /* * 计算高脉宽持续时间Count2 * 10us  */ unsigned int IR_HongwaiRead_MSB_Cmd()  unsigned int Count2 = 0;    /定义时间变量 IR_Hongwai_1;    /红外数据高电平 do    /进入循环体     

13、60;Count2+;    /时间变量加1 Delay_10us(1);    /延时10us   while(IR_Hongwai_x = 1);  /判断条件如果读出来的红外数据为低电平跳出循环体 return(Count2);  /* *   函数主体 */ int main(void)  SystemInit();   /初始化系统时钟进入72M主频 SYS

14、TICK_InitStructReadTCmd();   /初始化SysTick配置器寄存器 RCC_APB2PeriphReadtempyCmd();   /初始化外设时钟配置寄存器 GPIO_InitStructReadtempCmd();   /初始化GPIO端口配置寄存器 EXTI_InitStructReadtempCmd();   /初始化EXTI外部线路寄存器 NVIC_InitStructReadtempCmd();   /初始化NVIC中

15、断配置寄存器 while(1)      /* *   EXTI外部中断线服务程序 */ void EXTI2_IRQHandler(void)  unsigned char i = 0;  unsigned char flag = 1; / unsigned char flag1 = 1;  unsigned int Countline2 = 0; IR_Hongwai_1; Countline

16、2 = IR_HongwaiRead_LSB_Cmd();  /低电平引导码 9ms判断 if(Countline2 < 850) | (Countline2 > 950) /小于8694us 大于9272us 一直循环否则跳出  return;    Countline2 = IR_HongwaiRead_MSB_Cmd();  /高电平引导码 4.5ms判断 if(Countline2 < 400) | (Countline2 > 450) /小于4195u

17、s 大于4712us 一直循环否则跳出  return;  TimeByte = 0; for(i = 1; i < 14; i+)  TimeByte = TimeByte >> 1; Countline2 = IR_HongwaiRead_LSB_Cmd();   /低电平延时0.56 判断 if(Countline2 < 40) | (Countline2 > 85)/小于425us 大于851us 一直循环否则跳出  retur

18、n;  Countline2 = IR_HongwaiRead_MSB_Cmd();   /高电平延时0.56判断 if(Countline2 < 40) | (Countline2 > 200)/小于425us 大于1793us 一直循环否则跳出  return;  if( Countline2 > 130)  /高电平延时大于1300us写1否则写0  TimeByte |= 0x80;  /写1  &#

19、160;IR_Tireafg0 = TimeByte; TimeByte = 0; for(i = 14; i < 27; i+)  TimeByte = TimeByte >> 1; Countline2 = IR_HongwaiRead_LSB_Cmd(); if(Countline2 < 40) | (Countline2 > 85)  return;  Countline2 = IR_HongwaiRead_MSB_Cmd(); if(Countl

20、ine2 < 40) | (Countline2 > 200)  return;  if( Countline2 > 130)  TimeByte |= 0x80;   IR_Tireafg1 = TimeByte; TimeByte = 0; for(i = 27; i < 35; i+)  TimeByte = TimeByte >> 1; Countline2 = IR_HongwaiRead_LSB_Cmd();

21、 if(Countline2 < 40) | (Countline2 > 85)  return;  Countline2 = IR_HongwaiRead_MSB_Cmd(); if(Countline2 < 40) && (Countline2 > 200)  return;  if( Countline2 > 130)  TimeByte |= 0x80;   IR_Tireafg2 = Tim

22、eByte; TimeByte = 0; for(i = 35; i < 43; i+)  TimeByte = TimeByte >> 1; Countline2 = IR_HongwaiRead_LSB_Cmd(); while(Countline2 < 40) | (Countline2 > 85)  return;  Countline2 = IR_HongwaiRead_MSB_Cmd(); while(Countline2 < 40) |

23、 (Countline2 > 200)  return;  if( Countline2 > 130)  TimeByte |= 0x80;   IR_Tireafg3 = TimeByte; /*判断用户正码和反码*/ do  if(IR_Tireafg0 = 0x08 & IR_Tireafg1 = 0xF7 )  flag = 0;     while(flag = 1);  &#

24、160;      /*判断按键正码和反码*/ /* do  if(IR_Tireafg2 = IR_Tireafg3)  flag1 = 0;   while(flag1 = 0);        */ /*按下键码对应LED点亮*/ switch  (IR_Tireafg2)  case         

25、0x00:   /按键 0 LED1_1; LED2_0; LED3_0; LED4_0; break;   case         0x01:    /按键 1 LED1_0; LED2_1; LED3_0; LED4_0; break;   case         0x02:   /按键 2 LED1

26、_0; LED2_0; LED3_1; LED4_0; break;   case         0x03:   /按键 3 LED1_0; LED2_0; LED3_0; LED4_1; break; case         0x04:   /按键 4 LED1_0; LED2_0; LED3_1; LED4_0; break; c

27、ase         0x05:   /按键 5 LED1_0; LED2_1; LED3_0; LED4_0; break; case         0x06:   /按键 6 LED1_1; LED2_0; LED3_0; LED4_0; break; case         0x07:  

28、0;/按键 7 LED1_1; LED2_0; LED3_1; LED4_0; break; case         0x08:   /按键 8 LED1_0; LED2_0; LED3_0; LED4_0; break;   case         0x09:   /按键 9 LED1_0; LED2_1; LED3_0; LED4_1;&#

29、160;break; case         0x15:   /静音键 LED1_0; LED2_1; LED3_1; LED4_0; break; case         0x1C:   /开机键 LED1_1; LED2_0; LED3_0; LED4_1; break;   case      &#

30、160;  0x14:   /OSD键 LED1_1; LED2_1; LED3_0; LED4_0; break;   case         0x0E:   /RECALL键 LED1_0; LED2_0; LED3_1; LED4_1; break;   case         0x19:   /S

31、LEEP键 LED1_1; LED2_1; LED3_1; LED4_0; break;   case         0x0A:   /A/C键 LED1_0; LED2_1; LED3_1; LED4_1; break;   case         0x0F:   /TV/AV键 LED1_1; LED2_1; LED3_1; LED4_1; break;   case         0x13:   /PP键 LED1_1; LED2_0; LED3_1; LED4_0; break;&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论