紅外遙控STM32程序_第1頁
紅外遙控STM32程序_第2頁
紅外遙控STM32程序_第3頁
紅外遙控STM32程序_第4頁
紅外遙控STM32程序_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、./* *       stm32F103VET6 紅外驅(qū)動【遙控器解碼實驗程序】 * *   遙控器 :42位編碼 * */ #include "stm32f10x.h" #include "exti.h" #include "beep.h" #include "SysTick.h"    #define  

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

3、ED4_0      GPIOD->BRR  = 0x00000800 #define    LED1_1      GPIOD->BSRR = 0x00000100     /LED高電平 #define    LED2_1      GPIOD->BSRR = 0x00000200 #define    L

4、ED3_1      GPIOD->BSRR = 0x00000400 #define    LED4_1      GPIOD->BSRR = 0x00000800   #define    IR_Hongwai_0         GPIOE->BRR  = 0x00000004   /紅外數(shù)據(jù)低電平 #define

5、    IR_Hongwai_1         GPIOE->BSRR = 0x00000004   /紅外數(shù)據(jù)高電平 #define    IR_Hongwai_x GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2)  /讀取紅外電平狀態(tài) unsigned char TimeByte; unsigned int IR_Tireafg4; unsigned int IR_xidw

6、rit8 = 0, 0, 0, 0, 0, 0 ,0, 0;   /* *   GPIO端口配置子函數(shù) */ void GPIO_InitStructReadtempCmd(void)  GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;  /配置GPIO管腳 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; 

7、0;/配置管腳為輸入上拉 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_Sp

8、eed = 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、;     /* *   配置外設(shè)時鐘子函數(shù) */ void RCC_APB2PeriphReadtempyCmd(void)  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  /打開GPIOB外設(shè)時鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);  /打開GPIOE外設(shè)時鐘 RCC_APB2Periph

10、ClockCmd(RCC_APB2Periph_GPIOD, ENABLE);  /打開GPIOD外設(shè)時鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE);  /打開AFIO復用功能外設(shè)時鐘 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);    /* * 計算低脈寬持續(xù)時間Count1 * 10us  */ unsigned int IR_Hongw

11、aiRead_LSB_Cmd()  unsigned int Count1 = 0;    /定義時間變量 IR_Hongwai_0;    /紅外數(shù)據(jù)低電平 do    /進入循環(huán)體  Count1+;    /時間變量加1 Delay_10us(1);    /延時10us   while(IR_Hongwai_x = 0);  /判斷條件如果讀出來的紅外數(shù)據(jù)為高電平跳出循

12、環(huán)體 return(Count1);    /返回時間變量積數(shù)  /* * 計算高脈寬持續(xù)時間Count2 * 10us  */ unsigned int IR_HongwaiRead_MSB_Cmd()  unsigned int Count2 = 0;    /定義時間變量 IR_Hongwai_1;    /紅外數(shù)據(jù)高電平 do    /進入循環(huán)體     &#

13、160;Count2+;    /時間變量加1 Delay_10us(1);    /延時10us   while(IR_Hongwai_x = 1);  /判斷條件如果讀出來的紅外數(shù)據(jù)為低電平跳出循環(huán)體 return(Count2);  /* *   函數(shù)主體 */ int main(void)  SystemInit();   /初始化系統(tǒng)時鐘進入72M主頻 SY

14、STICK_InitStructReadTCmd();   /初始化SysTick配置器寄存器 RCC_APB2PeriphReadtempyCmd();   /初始化外設(shè)時鐘配置寄存器 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; Countlin

16、e2 = IR_HongwaiRead_LSB_Cmd();  /低電平引導碼 9ms判斷 if(Countline2 < 850) | (Countline2 > 950) /小于8694us 大于9272us 一直循環(huán)否則跳出  return;    Countline2 = IR_HongwaiRead_MSB_Cmd();  /高電平引導碼 4.5ms判斷 if(Countline2 < 400) | (Countline2 > 450) /小于4195

17、us 大于4712us 一直循環(huán)否則跳出  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 一直循環(huán)否則跳出  retu

18、rn;  Countline2 = IR_HongwaiRead_MSB_Cmd();   /高電平延時0.56判斷 if(Countline2 < 40) | (Countline2 > 200)/小于425us 大于1793us 一直循環(huán)否則跳出  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(Count

20、line2 < 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 = Ti

22、meByte; 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 LED

26、1_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; 

27、case         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、60;/按鍵 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:   /

31、SLEEP鍵 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論