找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4149|回复: 0
收起左侧

TTP224N触摸按键模块stm32例程源码

[复制链接]
ID:412790 发表于 2018-10-20 16:56 | 显示全部楼层 |阅读模式
实现功能为按1亮一个灯,按2两2个灯,以此类推,抬手熄灭。

单片机源程序如下:
  1. #include "main.h"
  2. #include "stm32f1xx_hal.h"
  3. #include "gpio.h"

  4. /* USER CODE BEGIN Includes */
  5. #define KEY1_PRES 1
  6. #define KEY2_PRES 2
  7. #define KEY3_PRES 3
  8. #define KEY4_PRES 4


  9. #define KEY1 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_3)
  10. #define KEY2 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_4)
  11. #define KEY3 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5)
  12. #define KEY4 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_6)

  13. /* USER CODE END Includes */

  14. /* Private variables ---------------------------------------------------------*/

  15. /* USER CODE BEGIN PV */
  16. /* Private variables ---------------------------------------------------------*/

  17. /* USER CODE END PV */

  18. /* Private function prototypes -----------------------------------------------*/
  19. void SystemClock_Config(void);
  20. void Error_Handler(void);

  21. /* USER CODE BEGIN PFP */
  22. /* Private function prototypes -----------------------------------------------*/

  23. uint8_t KEY_Scan(uint8_t mode);

  24. /* USER CODE END PFP */

  25. /* USER CODE BEGIN 0 */

  26. /* USER CODE END 0 */

  27. int main(void)
  28. {

  29.   /* USER CODE BEGIN 1 */
  30.        
  31.                
  32.         uint8_t i;

  33.   /* USER CODE END 1 */

  34.   /* MCU Configuration----------------------------------------------------------*/

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

  37.   /* Configure the system clock */
  38.   SystemClock_Config();

  39.   /* Initialize all configured peripherals */
  40.   MX_GPIO_Init();

  41.   /* USER CODE BEGIN 2 */

  42.   /* USER CODE END 2 */

  43.   /* Infinite loop */
  44.   /* USER CODE BEGIN WHILE */
  45.   while (1)
  46.   {
  47.   /* USER CODE END WHILE */

  48.   /* USER CODE BEGIN 3 */
  49.   /*  按1亮一个灯,按二亮两个灯,抬手熄灭 */
  50.                
  51.                         i=KEY_Scan(1);
  52.                
  53.                 switch(i)
  54.                 {
  55.                         case 0:
  56.                                   HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
  57.                             HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
  58.                             HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET);
  59.                             HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);
  60.                             //HAL_Delay(500);
  61.                             break;
  62.                                   
  63.                         case 1:  
  64.                                        
  65.                                         HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
  66.                             //HAL_Delay(500);
  67.                                   break;
  68.                         case 2:  
  69.                                         HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
  70.                             HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
  71.                             //HAL_Delay(500);
  72.                                   break;
  73.                         case 3:  
  74.                                        
  75.                                         HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
  76.                             HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
  77.                             HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET);
  78.                             //HAL_Delay(500);
  79.                                   break;
  80.                         case 4:  
  81.                                        
  82.                                   HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
  83.                             HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
  84.                             HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET);
  85.                             HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
  86.                             //HAL_Delay(500);
  87.                                   break;
  88.                        
  89.                         default:HAL_Delay(10);
  90.                 }
  91.                
  92.                

  93.   }
  94.   /* USER CODE END 3 */

  95. }

  96. /** System Clock Configuration
  97. */
  98. void SystemClock_Config(void)
  99. {

  100.   RCC_OscInitTypeDef RCC_OscInitStruct;
  101.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  102.     /**Initializes the CPU, AHB and APB busses clocks
  103.     */
  104.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  105.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  106.   RCC_OscInitStruct.HSICalibrationValue = 16;
  107.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  108.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  109.   {
  110.     Error_Handler();
  111.   }

  112.     /**Initializes the CPU, AHB and APB busses clocks
  113.     */
  114.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  115.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  116.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  117.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  118.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  119.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  120.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  121.   {
  122.     Error_Handler();
  123.   }

  124.     /**Configure the Systick interrupt time
  125.     */
  126.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  127.     /**Configure the Systick
  128.     */
  129.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  130.   /* SysTick_IRQn interrupt configuration */
  131.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  132. }

  133. /* USER CODE BEGIN 4 */
  134. uint8_t KEY_Scan(uint8_t mode)
  135. {
  136.                 static uint8_t key_up=1; //按键松开标志
  137.           if(mode) key_up=1;  //支持连按       
  138.                 if(key_up&&(KEY1==1||KEY2==1||KEY3==1||KEY4==1))
  139.             {
  140.                                         HAL_Delay(10);  //去抖动
  141.                                         key_up=0;
  142.                                         if(KEY1==1)return KEY1_PRES;
  143.                                         else if(KEY2==1)return KEY2_PRES;
  144.                                         else if(KEY3==1)return KEY3_PRES;
  145.                                         else if(KEY4==1)return KEY4_PRES;
  146.                  
  147.                         }else if(KEY1==0&&KEY2==0&&KEY3==0&&KEY4==0)key_up=1;              
  148.                 return 0;// 无按键按下

  149. }

  150. /* USER CODE END 4 */

  151. /**
  152.   * @brief  This function is executed in case of error occurrence.
  153.   * @param  None
  154.   * @retval None
  155.   */
  156. void Error_Handler(void)
  157. {
  158.   /* USER CODE BEGIN Error_Handler */
  159.   /* User can add his own implementation to report the HAL error return state */
  160.   while(1)
  161.   {
  162.   }
  163.   /* USER CODE END Error_Handler */
  164. }

  165. #ifdef USE_FULL_ASSERT

  166. /**
  167.    * @brief Reports the name of the source file and the source line number
  168.    * where the assert_param error has occurred.
  169.    * @param file: pointer to the source file name
  170.    * @param line: assert_param error line source number
  171.    * @retval None
  172.    */
  173. void assert_failed(uint8_t* file, uint32_t line)
  174. {
  175.   /* USER CODE BEGIN 6 */
  176.   /* User can add his own implementation to report the file name and line number,
  177.     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  178.   /* USER CODE END 6 */

  179. }

  180. #endif

  181. /**
  182.   * @}
  183.   */

  184. /**
  185.   * @}
  186. */

  187. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
复制代码

所有资料51hei提供下载:
KEY.rar (3.11 MB, 下载次数: 36)


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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