找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1368|回复: 0
打印 上一主题 下一主题
收起左侧

IR-Remote code STM32

[复制链接]
跳转到指定楼层
楼主
ID:810909 发表于 2020-8-3 17:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /* USER CODE END Header */

  2. /* Includes ------------------------------------------------------------------*/
  3. #include "main.h"

  4. /* Private includes ----------------------------------------------------------*/
  5. /* USER CODE BEGIN Includes */
  6. #include "dwt_stm32_delay.h"
  7. #include "i2c-lcd.h"
  8. /* USER CODE END Includes */

  9. /* Private typedef -----------------------------------------------------------*/
  10. /* USER CODE BEGIN PTD */

  11. /* USER CODE END PTD */

  12. /* Private define ------------------------------------------------------------*/
  13. /* USER CODE BEGIN PD */

  14. /* USER CODE END PD */

  15. /* Private macro -------------------------------------------------------------*/
  16. /* USER CODE BEGIN PM */

  17. /* USER CODE END PM */

  18. /* Private variables ---------------------------------------------------------*/
  19. I2C_HandleTypeDef hi2c1;

  20. /* USER CODE BEGIN PV */

  21. /* USER CODE END PV */

  22. /* Private function prototypes -----------------------------------------------*/
  23. void SystemClock_Config(void);
  24. static void MX_GPIO_Init(void);
  25. static void MX_I2C1_Init(void);
  26. /* USER CODE BEGIN PFP */

  27. /* USER CODE END PFP */

  28. /* Private user code ---------------------------------------------------------*/
  29. /* USER CODE BEGIN 0 */

  30. uint32_t data;
  31. uint8_t count;
  32.                
  33. uint32_t receive_data (void)
  34. {
  35.         uint32_t code=0;
  36.        
  37.                   /* The START Sequence begin here
  38.            * there will be a pulse of 9ms LOW and
  39.            * than 4.5 ms space (HIGH)
  40.            */
  41.           while (!(HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_1)));  // wait for the pin to go high.. 9ms LOW

  42.           while ((HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_1)));  // wait for the pin to go low.. 4.5ms HIGH

  43.           /* START of FRAME ends here*/

  44.           /* DATA Reception
  45.            * We are only going to check the SPACE after 562.5us pulse
  46.            * if the space is 562.5us, the bit indicates '0'
  47.            * if the space is around 1.6ms, the bit is '1'
  48.            */

  49.           for (int i=0; i<32; i++)
  50.           {
  51.                   count=0;

  52.                   while (!(HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_1))); // wait for pin to go high.. this is 562.5us LOW

  53.                   while ((HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_1)))  // count the space length while the pin is high
  54.                   {
  55.                           count++;
  56.                           DWT_Delay_us(100);
  57.                   }

  58.                   if (count > 12) // if the space is more than 1.2 ms
  59.                   {
  60.                           code |= (1UL << (31-i));   // write 1
  61.                   }

  62.                   else code &= ~(1UL << (31-i));  // write 0
  63.           }
  64.                
  65.                 return code;
  66. }

  67. void convert_code (uint32_t code)
  68. {
  69.                 switch (code)
  70.                 {
  71.                         case (0xFFA25D):
  72.                                 lcd_send_cmd (0x86);
  73.                                 lcd_send_data ('1');
  74.                                 break;
  75.                        
  76.                         case (0xFF629D):
  77.                                 lcd_send_cmd (0x86);
  78.                                 lcd_send_data ('2');
  79.                                 break;                       

  80.                         case (0xFFE21D):
  81.                                 lcd_send_cmd (0x86);
  82.                                 lcd_send_data ('3');
  83.                                 break;

  84.                         case (0xFF22DD):
  85.                                 lcd_send_cmd (0x86);
  86.                                 lcd_send_data ('4');
  87.                                 break;

  88.                         case (0xFF02FD):
  89.                                 lcd_send_cmd (0x86);
  90.                                 lcd_send_data ('5');
  91.                                 break;

  92.                         case (0xFFC23D):
  93.                                 lcd_send_cmd (0x86);
  94.                                 lcd_send_data ('6');
  95.                                 break;

  96.                         case (0xFFE01F):
  97.                                 lcd_send_cmd (0x86);
  98.                                 lcd_send_data ('7');
  99.                                 break;

  100.                         case (0xFFA857):
  101.                                 lcd_send_cmd (0x86);
  102.                                 lcd_send_data ('8');
  103.                                 break;

  104.                         case (0xFF906F):
  105.                                 lcd_send_cmd (0x86);
  106.                                 lcd_send_data ('9');
  107.                                 break;

  108.                         case (0xFFB04F):
  109.                                 lcd_send_cmd (0x86);
  110.                                 lcd_send_data ('#');
  111.                                 break;

  112.                         case (0XFF6897):
  113.                                 lcd_send_cmd (0x86);
  114.                                 lcd_send_data ('*');
  115.                                 break;                       
  116.                                                
  117.                         case (0xFF9867):
  118.                                 lcd_send_cmd (0x86);
  119.                                 lcd_send_data ('0');
  120.                                 break;

  121.                         case (0xFF38C7):
  122.                                 lcd_send_cmd (0x86);
  123.                                 lcd_send_data ('K');
  124.                                 break;

  125.                         case (0xFF18E7):
  126.                                 lcd_send_cmd (0x86);
  127.                                 lcd_send_data ('^');
  128.                                 break;
  129.                        
  130.                         case (0xFF10EF):
  131.                                 lcd_send_cmd (0x86);
  132.                                 lcd_send_data ('<');
  133.                                 break;                       

  134.                         case (0xFF5AA5):
  135.                                 lcd_send_cmd (0x86);
  136.                                 lcd_send_data ('>');
  137.                                 break;
  138.                        
  139.                         case (0xFF4AB5):
  140.                                 lcd_send_cmd (0x86);
  141.                                 lcd_send_data ('u');
  142.                                 break;
  143.                        
  144.                         default :
  145.                                 break;
  146.                 }
  147. }

  148. /* USER CODE END 0 */

  149. /**
  150.   * @brief  The application entry point.
  151.   * @retval int
  152.   */
  153. int main(void)
  154. {
  155.   /* USER CODE BEGIN 1 */

  156.   /* USER CODE END 1 */

  157.   /* MCU Configuration--------------------------------------------------------*/

  158.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  159.   HAL_Init();

  160.   /* USER CODE BEGIN Init */

  161.   /* USER CODE END Init */

  162.   /* Configure the system clock */
  163.   SystemClock_Config();

  164.   /* USER CODE BEGIN SysInit */

  165.   /* USER CODE END SysInit */

  166.   /* Initialize all configured peripherals */
  167.   MX_GPIO_Init();
  168.   MX_I2C1_Init();
  169.   /* USER CODE BEGIN 2 */

  170.         DWT_Delay_Init ();
  171.         lcd_init ();
  172.   /* USER CODE END 2 */

  173.   /* Infinite loop */
  174.   /* USER CODE BEGIN WHILE */
  175.   while (1)
  176.   {
  177.     /* USER CODE END WHILE */

  178.     /* USER CODE BEGIN 3 */
  179.           

  180.           while (HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_1));   // wait for the pin to go low
  181.                
  182.                 data = receive_data ();
  183.                
  184.                 convert_code (data);

  185.                 HAL_Delay (200);
  186.                
  187.   }
  188.   /* USER CODE END 3 */
  189. }

  190. /**
  191.   * @brief System Clock Configuration
  192.   * @retval None
  193.   */
  194. void SystemClock_Config(void)
  195. {
  196.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  197.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  198.   /**Initializes the CPU, AHB and APB busses clocks
  199.   */
  200.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  201.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  202.   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  203.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  204.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  205.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  206.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  207.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  208.   {
  209.     Error_Handler();
  210.   }
  211.   /**Initializes the CPU, AHB and APB busses clocks
  212.   */
  213.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  214.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  215.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  216.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  217.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  218.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  219.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  220.   {
  221.     Error_Handler();
  222.   }
  223. }

  224. /**
  225.   * @brief I2C1 Initialization Function
  226.   * @param None
  227.   * @retval None
  228.   */
  229. static void MX_I2C1_Init(void)
  230. {

  231.   /* USER CODE BEGIN I2C1_Init 0 */

  232.   /* USER CODE END I2C1_Init 0 */

  233.   /* USER CODE BEGIN I2C1_Init 1 */

  234.   /* USER CODE END I2C1_Init 1 */
  235.   hi2c1.Instance = I2C1;
  236.   hi2c1.Init.ClockSpeed = 100000;
  237.   hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
  238.   hi2c1.Init.OwnAddress1 = 0;
  239.   hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  240.   hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  241.   hi2c1.Init.OwnAddress2 = 0;
  242.   hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  243.   hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  244.   if (HAL_I2C_Init(&hi2c1) != HAL_OK)
  245.   {
  246.     Error_Handler();
  247.   }
  248.   /* USER CODE BEGIN I2C1_Init 2 */

  249.   /* USER CODE END I2C1_Init 2 */

  250. }

  251. /**
  252.   * @brief GPIO Initialization Function
  253.   * @param None
  254.   * @retval None
  255.   */
  256. static void MX_GPIO_Init(void)
  257. {
  258.   GPIO_InitTypeDef GPIO_InitStruct = {0};

  259.   /* GPIO Ports Clock Enable */
  260.   __HAL_RCC_GPIOD_CLK_ENABLE();
  261.   __HAL_RCC_GPIOA_CLK_ENABLE();
  262.   __HAL_RCC_GPIOB_CLK_ENABLE();

  263.   /*Configure GPIO pin : PA1 */
  264.   GPIO_InitStruct.Pin = GPIO_PIN_1;
  265. ……………………

  266. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码


ir-remote.7z

2.89 MB, 下载次数: 6, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表