15 Kasım 2018, 22:47:40

Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H


STM32F103C8 Kızılötesi Uzaktan Kumanda

Başlatan crazy, 04 Şubat 2018, 20:34:08

crazy


Kod Seç
#include "stm32f10x.h"                  // Device header
#define REMOTE_ID 0



void Remote_Init(void);
u8 Remote_Scan(void);

void Remote_Init(void)
{

  
RCC->APB2ENR   |= 0x00000010//PORTC clock
  
GPIOC->CRH     &= 0x00000000;
  
GPIOC->CRH     |= 0x00330000;
  
GPIOC->ODR     &= ~(<< 13);
  
  
RCC->APB1ENR   |= << 2//TIM4 clock
  
RCC->APB2ENR   |= << 3//PORTB clock

  
GPIOB->CRH     &= 0XFFFFFF0F;
  
GPIOB->CRH     |= 0X00000080// PB9  ir led giriş
  
GPIOB->ODR     |= << 9//PB9

  
TIM4->ARR      10000;    //10ms
  
TIM4->PSC      71;     //1us
  
TIM4->CCMR2   |= << 8//CC4S=01
  
TIM4->CCMR2   |= << 12//IC4F=0011
  
TIM4->CCMR2   |= << 10//IC4PS=00
  
TIM4->CCR4     0;
  
TIM4->CCER    |= << 13//CC4P=0
  
TIM4->CCER    |= << 12//CC4E=1
  
TIM4->DIER    |= << 4//CC4IE
  
TIM4->DIER    |= << 0;
  
NVIC->ISER[0] |= << 30;
  
TIM4->CR1     |= 0x01;
}

u8  RmtSta 0;
u16 Dval;
u32 RmtRec 0;
u8  RmtCnt 0;

void TIM4_IRQHandler(void)
{
  
u16 tsr;
  
tsr TIM4->SR;
  if (
tsr 0X01)
  {
    if (
RmtSta 0x80)
    {
      
RmtSta &= ~0X10;
      if ((
RmtSta 0X0F) == 0X00)RmtSta |= << 6;
      if ((
RmtSta 0X0F) < 14)RmtSta++;
      else
      {
        
RmtSta &= ~(<< 7);
        
RmtSta &= 0XF0;
      }
    }
  }
  if (
tsr 0x10)
  {
    if (
GPIOB->IDR 0x200)
    {
      
TIM4->CCER |= << 13;
      
TIM4->CNT 0;
      
RmtSta |= 0X10;
    } else
    {
      
Dval TIM4->CCR4;
      
TIM4->CCER &= ~(<< 13);
      if (
RmtSta 0X10)
      {
        if (
RmtSta 0X80)
        {

          if (
Dval 300 && Dval 800)
          {
            
RmtRec <<= 1;
            
RmtRec |= 0;
          } else if (
Dval 1400 && Dval 1800)
          {
            
RmtRec <<= 1;
            
RmtRec |= 1;
          } else if (
Dval 2200 && Dval 2600)
          {
            
RmtCnt++;
            
RmtSta &= 0XF0;
          }
        } else if (
Dval 4200 && Dval 4700)
        {
          
RmtSta |= << 7;
          
RmtCnt 0;
        }
      }
      
RmtSta &= ~(<< 4);
    }
  }
  
TIM4->SR 0;
}

u8 Remote_Scan(void)
{
  static 
u8 sta 0;
  static 
u8 t1t2;

  if (
RmtSta & (<< 6))
  {
    
t1 RmtRec >> 24;
    
t2 = (RmtRec >> 16) & 0xff;

   
// if ((t1 == (u8)~t2) || t1 == REMOTE_ID)
    
if(1)
    {
      
t1 RmtRec >> 8;
      
t2 RmtRec;


      if (
t1 == (u8)~t2)
        
sta t1;
    }
    if ((
sta == 0) || ((RmtSta 0X80) == 0))
    {
      
RmtSta &= ~(<< 6);
      
RmtCnt 0;
    }
  }
  return 
sta;
}

u8 key;
char *str;

int main()
{

  
Remote_Init();
  
  while (
1)
  {

    
key Remote_Scan();
    if (
key)
    {
      switch (
key)
      {
        case 
88:
          {
            
GPIOC->ODR &= ~(<< 13);
            
str "Led Yandi";
          }
          break;
        case 
18:
          {
            
GPIOC->ODR |= (<< 13);

            
str " Led Sondu";
          }
          break;
        case 
224:
          {
            
str "RIGHT";
          }
          break;
        case 
226:
          {
            
str "LEFT";
          }    
          break;

        case 
42:
          {
            
str "PLAY";
          }
          break;
        case 
19:
          {
            
str "RIGHT";
          }
          break;
        case 
168:
          {
            
str "LEFT";
          }
          break;
        case 
10:
          {
            
str "DOWN";
          }
          break;
        case 
72:
          {
            
str "VOL-";
          }
          break;
        case 
136:
          {
            
str "VOL+";
          }
          break;
        case 
50:
          {
            
str "1";
          }
          break;
        case 
112:
          {
            
str "2";
          }
          break;
        case 
176:
          {
            
str "3";
          }
          break;
        case 
210:
          {
            
str "4";
          }
          break;
        case 
242:
          {
            
str "5";
          }
          break;
        case 
144:
          {
            
str "6";
          }
          break;
        case 
60:
          {
            
str "7";
          }
          break;
        default:
          
str "0";
          break;
      }
    }
  }

}