国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 7637|回復: 0
打印 上一主題 下一主題

分享STM32 紅外解碼電視遙控器程序

[復制鏈接]
跳轉到指定樓層
樓主
發表于 2012-11-20 13:52:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/**********************************************************************************
*       STM32F103VET6 紅外驅動【遙控器解碼實驗程序】
*
*   遙控器 :42位編碼
*
***********************************************************************************/
#include "stm32f10x.h"
#include "exti.h"
#include "beep.h"
#include "SysTick.h"
   
#define    LED1_0      GPIOD->BRR  = 0x00000100 //LED低電平
#define    LED2_0      GPIOD->BRR  = 0x00000200
#define    LED3_0      GPIOD->BRR  = 0x00000400
#define    LED4_0      GPIOD->BRR  = 0x00000800

#define    LED1_1      GPIOD->BSRR = 0x00000100     //LED高電平
#define    LED2_1      GPIOD->BSRR = 0x00000200
#define    LED3_1      GPIOD->BSRR = 0x00000400
#define    LED4_1      GPIOD->BSRR = 0x00000800   

#define    IR_Hongwai_0         GPIOE->BRR  = 0x00000004   //紅外數據低電平
#define    IR_Hongwai_1         GPIOE->BSRR = 0x00000004   //紅外數據高電平
#define    IR_Hongwai_x GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2)  //讀取紅外電平狀態

unsigned char TimeByte;
unsigned int IR_Tireafg[4];
unsigned int IR_xidwrit[8] = {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;  //配置管腳為輸入上拉
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_Speed = 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);
}
   
/*
*   配置外設時鐘子函數
*/
void RCC_APB2PeriphReadtempyCmd(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  //打開GPIOB外設時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);  //打開GPIOE外設時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);  //打開GPIOD外設時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE);  //打開AFIO復用功能外設時鐘
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);   
}

/*
* 計算低脈寬持續時間Count1 * 10us  
*/
unsigned int IR_HongwaiRead_LSB_Cmd()
{
unsigned int Count1 = 0;    //定義時間變量
IR_Hongwai_0;    //紅外數據低電平
do    //進入循環體
{
Count1++;    //時間變量加1
Delay_10us(1);    //延時10us
}  while(IR_Hongwai_x == 0);  //判斷條件如果讀出來的紅外數據為高電平跳出循環體

return(Count1);    //返回時間變量積數
}

/*
* 計算高脈寬持續時間Count2 * 10us  
*/
unsigned int IR_HongwaiRead_MSB_Cmd()
{
unsigned int Count2 = 0;    //定義時間變量
IR_Hongwai_1;    //紅外數據高電平
do    //進入循環體
{     
Count2++;    //時間變量加1
Delay_10us(1);    //延時10us
}  while(IR_Hongwai_x == 1);  //判斷條件如果讀出來的紅外數據為低電平跳出循環體
return(Count2);
}


/*
*   函數主體
*/
int main(void)
{
SystemInit();   //初始化系統時鐘進入72M主頻
SYSTICK_InitStructReadTCmd();   //初始化SysTick配置器寄存器
RCC_APB2PeriphReadtempyCmd();   //初始化外設時鐘配置寄存器
GPIO_InitStructReadtempCmd();   //初始化GPIO端口配置寄存器
EXTI_InitStructReadtempCmd();   //初始化EXTI外部線路寄存器
NVIC_InitStructReadtempCmd();   //初始化NVIC中斷配置寄存器

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;
Countline2 = 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)) //小于4195us 大于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 一直循環否則跳出
{
return;
}

Countline2 = IR_HongwaiRead_MSB_Cmd();   //高電平延時0.56判斷
if((Countline2 < 40) || (Countline2 > 200))//小于425us 大于1793us 一直循環否則跳出
{
return;
}
if( Countline2 > 130)  //高電平延時大于1300us寫1否則寫0
{
TimeByte |= 0x80;  //寫1
}
}
IR_Tireafg[0] = 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((Countline2 < 40) || (Countline2 > 200))
{
return;
}
if( Countline2 > 130)
{
TimeByte |= 0x80;
}
}
IR_Tireafg[1] = TimeByte;
TimeByte = 0;

for(i = 27; i < 35; i++)
{
TimeByte = TimeByte >> 1;
Countline2 = IR_HongwaiRead_LSB_Cmd();
if((Countline2 < 40) || (Countline2 > 85))
{
return;
}

Countline2 = IR_HongwaiRead_MSB_Cmd();
if((Countline2 < 40) && (Countline2 > 200))
{
return;
}
if( Countline2 > 130)
{
TimeByte |= 0x80;
}
}
IR_Tireafg[2] = TimeByte;
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) || (Countline2 > 200))
{
return;
}
if( Countline2 > 130)
{
TimeByte |= 0x80;
}
}
IR_Tireafg[3] = TimeByte;

//************************判斷用戶正碼和反碼***************************************//
do
{
if(IR_Tireafg[0] == 0x08 & IR_Tireafg[1] == 0xF7 )
{
flag = 0;   
}
} while(flag == 1);         
//************************判斷按鍵正碼和反碼***************************************//
/* do
{
if(IR_Tireafg[2] == ~IR_Tireafg[3])
{
flag1 = 0;
}
} while(flag1 == 0);        */

//************************按下鍵碼對應LED點亮**************************************//
switch  (IR_Tireafg[2])
{
case         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_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;

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:   //按鍵 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;
break;

case         0x15:   //靜音鍵
LED1_0; LED2_1; LED3_1; LED4_0;
break;

case         0x1C:   //開機鍵
LED1_1; LED2_0; LED3_0; LED4_1;
break;
  
case         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:   //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;
  
case         0x0C:   //GAME鍵
LED1_0; LED2_1; LED3_1; LED4_1;
break;
  
case         0x1E:   //V-鍵
LED1_1; LED2_1; LED3_1; LED4_0;
break;
  
case         0x1F:   //V+鍵
LED1_0; LED2_0; LED3_1; LED4_0;
break;
  
case         0x1B:   //P+鍵
LED1_0; LED2_0; LED3_0; LED4_1;
break;
  
case         0x1A:   //P-鍵
LED1_1; LED2_0; LED3_0; LED4_0;
break;
  
case         0x10:   //MENU鍵
LED1_0; LED2_1; LED3_0; LED4_0;
break;
  
  default  :     break;

}     
// Beep_lookCmd();     //蜂鳴器按鍵音
EXTI_ClearITPendingBit(EXTI_Line2); //清除EXTI2外部線路掛起位

}
  
/*******************************************END****************************************/



                     本人以前是搞51單片機的剛接手STM32沒有多久,本人喜歡結交單片機愛好者,共同學習有高手的也可以一起加入,QQ群100626882,我們可以在群里面交流和學習STM32

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久国产精品免费免费 | 精品无人区一区二区三区a 精品无人区麻豆乱码1区2区 | 午夜香蕉成视频人网站高清版 | 亚洲一区二区黄色 | 国产成人综合久久精品亚洲 | 国产成人在线免费观看 | 99re这里只有精品在线观看 | 欧美大香线蕉线伊人图片 | 亚洲欧美日韩在线精品一区二区 | 99精品国产兔费观看66 | 精品国产香蕉伊思人在线又爽又黄 | 99久9在线视频 | 久草中文网| 一级一级特黄女人精品毛片视频 | 日本a在线视频 | 日韩免费在线观看视频 | 久久人视频| 91久久精品视频 | 国产伦理片在线观看 | 欧美天堂在线观看 | 两个人高清在线观看www | 成人影片在线 | 一级福利片| 男女做a视频 | 日韩在线不卡视频 | 视频一区二区在线播放 | 香蕉在线精品视频在线观看2 | 免费观看黄色视屏 | 99精彩免费观看 | 黄色在线网页 | 中文成人在线 | 亚洲动漫在线观看 | 国产v综合v亚洲欧美 | 亚洲成人黄色网 | 91蜜桃| 日本特黄特色大片免费播放视频 | 肉大捧一进一出视频免费播放 | 亚洲最大福利网站 | 九九热在线视频 | 91麻豆精品福利在线观看 | 日本在线免费观看 |