找回密码
 立即注册

QQ登录

只需一步,快速开始

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

利用stm32单片机中断编写4*4矩阵键盘,识别按下哪个按键

[复制链接]
跳转到指定楼层
楼主
ID:331083 发表于 2018-5-17 19:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
利用外部IO口中断编写程序,识别4*4矩阵键盘中哪个按键被按下。
优点:快速
本程序使用stm32f103zet6编写,程序中没有进行手动延时,但经实测,识别效果出错率很小。

stm32单片机源程序:
  1. /* Includes ------------------------------------------------------------------*/
  2. #include "main.h"
  3. #include "stm32f1xx_hal.h"

  4. /* USER CODE BEGIN Includes */
  5. #include "lcd.h"
  6. /* USER CODE END Includes */

  7. /* Private variables ---------------------------------------------------------*/
  8. SRAM_HandleTypeDef hsram1;

  9. /* USER CODE BEGIN PV */
  10. /* Private variables ---------------------------------------------------------*/

  11. /* USER CODE END PV */

  12. /* Private function prototypes -----------------------------------------------*/
  13. void SystemClock_Config(void);
  14. static void MX_GPIO_Init(void);
  15. static void MX_FSMC_Init(void);
  16. static void MX_NVIC_Init(void);

  17. /* USER CODE BEGIN PFP */
  18. /* Private function prototypes -----------------------------------------------*/

  19. /* USER CODE END PFP */

  20. /* USER CODE BEGIN 0 */
  21. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  22. {
  23. //        HAL_Delay(10);
  24. //        LCD_ShowString(30,60,200,16,16,(uint8_t*)"OK");
  25.         //检测第一排
  26.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==0)
  27.   {if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5)==0)
  28.         {
  29.                 LCD_Clear(WHITE);
  30.                 LCD_ShowString(30,30,200,16,16,(uint8_t*)"E");
  31.         }
  32.         
  33.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6)==0)
  34. {
  35.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6)==0)
  36.         {
  37.                 LCD_Clear(WHITE);
  38.                 LCD_ShowString(30,30,200,16,16,(uint8_t*)"I");
  39.         }               
  40. }
  41. //        
  42.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_7)==0)
  43. {
  44.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_7)==0)
  45.         {
  46.                 LCD_Clear(WHITE);
  47.                 LCD_ShowString(30,30,200,16,16,(uint8_t*)"M");
  48.         }               
  49. }
  50. //        
  51.         if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_1)==0)
  52. {
  53.         if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_1)==0)
  54.         {
  55.                 LCD_Clear(WHITE);
  56.         LCD_ShowString(30,30,200,16,16,(uint8_t*)"A");
  57.         }               
  58. }
  59. }
  60. //检测第二排

  61. if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1)==0)
  62.   {if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5)==0)
  63.         {
  64.                 LCD_Clear(WHITE);
  65.                 LCD_ShowString(30,30,200,16,16,(uint8_t*)"B");
  66.         }
  67.         
  68.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6)==0)
  69. {
  70.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6)==0)
  71.         {
  72.                 LCD_Clear(WHITE);
  73.                 LCD_ShowString(30,30,200,16,16,(uint8_t*)"F");
  74.         }               
  75. }
  76. //        
  77.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_7)==0)
  78. {
  79.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_7)==0)
  80.         {
  81.                 LCD_Clear(WHITE);
  82.                 LCD_ShowString(30,30,200,16,16,(uint8_t*)"J");
  83.         }               
  84. }
  85. //        
  86.         if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_1)==0)
  87. {
  88.         if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_1)==0)
  89.         {
  90.                 LCD_Clear(WHITE);
  91.         LCD_ShowString(30,30,200,16,16,(uint8_t*)"N");
  92.         }               
  93. }
  94. }

  95. //检测第三排

  96. if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_2)==0)
  97.   {if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5)==0)
  98.         {
  99.                 LCD_Clear(WHITE);
  100.                 LCD_ShowString(30,30,200,16,16,(uint8_t*)"C");
  101.         }
  102.         
  103.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6)==0)
  104. {
  105.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6)==0)
  106.         {
  107.                 LCD_Clear(WHITE);
  108.                 LCD_ShowString(30,30,200,16,16,(uint8_t*)"G");
  109.         }               
  110. }
  111. //        
  112.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_7)==0)
  113. {
  114.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_7)==0)
  115.         {
  116.                 LCD_Clear(WHITE);
  117.                 LCD_ShowString(30,30,200,16,16,(uint8_t*)"K");
  118.         }               
  119. }
  120. //        
  121.         if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_1)==0)
  122. {
  123.         if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_1)==0)
  124.         {
  125.                 LCD_Clear(WHITE);
  126.         LCD_ShowString(30,30,200,16,16,(uint8_t*)"O");
  127.         }               
  128. }
  129. }

  130. //检测第四排

  131. if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_3)==0)
  132.   {if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5)==0)
  133.         {
  134.                 LCD_Clear(WHITE);
  135.                 LCD_ShowString(30,30,200,16,16,(uint8_t*)"D");
  136.         }
  137.         
  138.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6)==0)
  139. {
  140.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6)==0)
  141.         {
  142.                 LCD_Clear(WHITE);
  143.                 LCD_ShowString(30,30,200,16,16,(uint8_t*)"H");
  144.         }               
  145. }
  146. //        
  147.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_7)==0)
  148. {
  149.         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_7)==0)
  150.         {
  151.                 LCD_Clear(WHITE);
  152.                 LCD_ShowString(30,30,200,16,16,(uint8_t*)"L");
  153.         }               
  154. }
  155. //        
  156.         if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_1)==0)
  157. {
  158.         if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_1)==0)
  159.         {
  160.                 LCD_Clear(WHITE);
  161.         LCD_ShowString(30,30,200,16,16,(uint8_t*)"P");
  162.         }               
  163. }
  164. }





  165. }









  166. /* USER CODE END 0 */

  167. /**
  168.   * @brief  The application entry point.
  169.   *
  170.   * @retval None
  171.   */
  172. int main(void)
  173. {
  174.   /* USER CODE BEGIN 1 */

  175.   /* USER CODE END 1 */

  176.   /* MCU Configuration----------------------------------------------------------*/

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

  179.   /* USER CODE BEGIN Init */

  180.   /* USER CODE END Init */

  181.   /* Configure the system clock */
  182.   SystemClock_Config();

  183.   /* USER CODE BEGIN SysInit */

  184.   /* USER CODE END SysInit */

  185.   /* Initialize all configured peripherals */
  186.   MX_GPIO_Init();
  187.   MX_FSMC_Init();

  188.   /* Initialize interrupts */
  189.   MX_NVIC_Init();
  190.   /* USER CODE BEGIN 2 */
  191.   LCD_Init();

  192. POINT_COLOR=BLUE;

  193. ////检测第一排按键
  194. //HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,0);
  195. //HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,1);
  196. //HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,1);
  197. //HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,1);

  198.   /* USER CODE END 2 */

  199.   /* Infinite loop */
  200.   /* USER CODE BEGIN WHILE */
  201.   while (1)
  202.   {

  203.   /* USER CODE END WHILE */

  204.   /* USER CODE BEGIN 3 */
  205. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,0);
  206. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,1);
  207. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,1);
  208. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,1);
  209.                
  210. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,1);
  211. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,0);
  212. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,1);
  213. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,1);
  214.         
  215. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,1);
  216. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,1);
  217. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,0);
  218. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,1);
  219.         
  220. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,1);
  221. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,1);
  222. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,1);
  223. HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,0);
  224.         
  225.                
  226.                
  227.                
  228.                
  229.         
  230. //    HAL_Delay(500);
  231. //        LCD_ShowString(30,30,200,16,16,(uint8_t*)"A");
  232. //        
  233. //        //检测第一排
  234. //  if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==0)
  235. //        {
  236. //  
  237. //if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4)==0)
  238. //{
  239. //        if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4)==0)
  240. //        {
  241. //                LCD_Clear(WHITE);
  242. //                LCD_ShowString(30,30,200,16,16,(uint8_t*)"A");
  243. //        }               
  244. //}


  245. //if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5)==0)
  246. //{
  247. //        if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5)==0)
  248. //        {
  249. //                LCD_Clear(WHITE);
  250. //                LCD_ShowString(30,30,200,16,16,(uint8_t*)"E");
  251. //        }}

  252. //        
  253. //if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6)==0)
  254. //{
  255. //        if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_6)==0)
  256. //        {
  257. //                LCD_Clear(WHITE);
  258. //                LCD_ShowString(30,30,200,16,16,(uint8_t*)"I");
  259. //        }               
  260. //}


  261. //if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_7)==0)
  262. //{
  263. //        if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_7)==0)
  264. //        {
  265. //                LCD_Clear(WHITE);
  266. //                LCD_ShowString(30,30,200,16,16,(uint8_t*)"M");
  267. //        }               
  268. //}

  269. //               
  270. //        }
  271. //        
  272. //        //检测第二排
  273. //        
  274.         
  275.         
  276.         
  277.         
  278.         
  279.                
  280.                
  281.                
  282.                
  283.                
  284.                
  285.                
  286.                
  287.                
  288.                
  289.                
  290.                
  291.                
  292.   }
  293.   /* USER CODE END 3 */

  294. }

  295. /**
  296.   * @brief System Clock Configuration
  297.   * @retval None
  298.   */
  299. void SystemClock_Config(void)
  300. {

  301.   RCC_OscInitTypeDef RCC_OscInitStruct;
  302.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  303.     /**Initializes the CPU, AHB and APB busses clocks
  304.     */
  305.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  306.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  307.   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  308.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  309.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  310.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  311.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  312.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  313.   {
  314.     _Error_Handler(__FILE__, __LINE__);
  315.   }

  316.     /**Initializes the CPU, AHB and APB busses clocks
  317.     */
  318.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  319.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  320.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  321.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  322.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  323.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  324.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  325.   {
  326.     _Error_Handler(__FILE__, __LINE__);
  327.   }

  328.     /**Configure the Systick interrupt time
  329.     */
  330.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  331.     /**Configure the Systick
  332.     */
  333.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  334.   /* SysTick_IRQn interrupt configuration */
  335.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  336. }

  337. /**
  338.   * @brief NVIC Configuration.
  339.   * @retval None
  340.   */
  341. static void MX_NVIC_Init(void)
  342. {
  343.   /* EXTI9_5_IRQn interrupt configuration */
  344.   HAL_NVIC_SetPriority(EXTI9_5_IRQn, 0, 0);
  345.   HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);
  346.   /* EXTI1_IRQn interrupt configuration */
  347.   HAL_NVIC_SetPriority(EXTI1_IRQn, 0, 0);
  348.   HAL_NVIC_EnableIRQ(EXTI1_IRQn);
  349. }

  350. /** Configure pins as
  351.         * Analog
  352.         * Input
  353.         * Output
  354.         * EVENT_OUT
  355.         * EXTI
  356. */
  357. static void MX_GPIO_Init(void)
  358. {

  359.   GPIO_InitTypeDef GPIO_InitStruct;

  360.   /* GPIO Ports Clock Enable */
  361.   __HAL_RCC_GPIOC_CLK_ENABLE();
  362.   __HAL_RCC_GPIOA_CLK_ENABLE();
  363.   __HAL_RCC_GPIOB_CLK_ENABLE();
  364.   __HAL_RCC_GPIOG_CLK_ENABLE();
  365.   __HAL_RCC_GPIOE_CLK_ENABLE();
  366.   __HAL_RCC_GPIOD_CLK_ENABLE();

  367.   /*Configure GPIO pin Output Level */
  368.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, GPIO_PIN_RESET);

  369.   /*Configure GPIO pin Output Level */
  370.   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);

  371.   /*Configure GPIO pin : PC1 */
  372.   GPIO_InitStruct.Pin = GPIO_PIN_1;
  373.   GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
  374.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  375.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  376.   /*Configure GPIO pins : PA0 PA1 PA2 PA3 */
  377.   GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3;
  378.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  379.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  380.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  381.   /*Configure GPIO pins : two_Pin three_Pin four_Pin */
  382.   GPIO_InitStruct.Pin = two_Pin|three_Pin|four_Pin;
  383.   GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
  384.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  385.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  386.   /*Configure GPIO pin : PB0 */
  387.   GPIO_InitStruct.Pin = GPIO_PIN_0;
  388.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  389.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  390.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  391. }

  392. /* FSMC initialization function */
  393. static void MX_FSMC_Init(void)
  394. {
  395.   FSMC_NORSRAM_TimingTypeDef Timing;

  396.   /** Perform the SRAM1 memory initialization sequence
  397.   */
  398.   hsram1.Instance = FSMC_NORSRAM_DEVICE;
  399.   hsram1.Extended = FSMC_NORSRAM_EXTENDED_DEVICE;
  400.   /* hsram1.Init */
  401.   hsram1.Init.NSBank = FSMC_NORSRAM_BANK4;
  402.   hsram1.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE;
  403.   hsram1.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM;
  404.   hsram1.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16;
  405.   hsram1.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE;
  406.   hsram1.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW;
  407.   hsram1.Init.WrapMode = FSMC_WRAP_MODE_DISABLE;
  408.   hsram1.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS;
  409.   hsram1.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE;
  410.   hsram1.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE;
  411.   hsram1.Init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE;
  412.   hsram1.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE;
  413.   hsram1.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE;
  414.   /* Timing */
  415.   Timing.AddressSetupTime = 15;
  416.   Timing.AddressHoldTime = 15;
  417.   Timing.DataSetupTime = 255;
  418.   Timing.BusTurnAroundDuration = 15;
  419.   Timing.CLKDivision = 16;
  420.   Timing.DataLatency = 17;
  421.   Timing.AccessMode = FSMC_ACCESS_MODE_A;
  422.   /* ExtTiming */

  423.   if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK)
  424.   {
  425.     _Error_Handler(__FILE__, __LINE__);
  426.   }

  427.   /** Disconnect NADV
  428.   */

  429.   __HAL_AFIO_FSMCNADV_DISCONNECTED();

  430. }

  431. /* USER CODE BEGIN 4 */

  432. /* USER CODE END 4 */

  433. /**
  434.   * @brief  This function is executed in case of error occurrence.
  435.   * @param  file: The file name as string.
  436.   * @param  line: The line in file as a number.
  437.   * @retval None
  438.   */
  439. void _Error_Handler(char *file, int line)
  440. {
  441.   /* USER CODE BEGIN Error_Handler_Debug */
  442.   /* User can add his own implementation to report the HAL error return state */
  443.   while(1)
  444.   {
  445.   }
  446.   /* USER CODE END Error_Handler_Debug */
  447. }

  448. #ifdef  USE_FULL_ASSERT
  449. /**
  450.   * @brief  Reports the name of the source file and the source line number
  451.   *         where the assert_param error has occurred.
  452.   * @param  file: pointer to the source file name
  453.   * @param  line: assert_param error line source number
  454.   * @retval None
  455.   */
  456. void assert_failed(uint8_t* file, uint32_t line)
  457. {
  458.   /* USER CODE BEGIN 6 */
  459.   /* User can add his own implementation to report the file name and line number,
  460.      tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  461.   /* USER CODE END 6 */
  462. }
  463. #endif /* USE_FULL_ASSERT */

  464. /**
  465.   * @}
  466.   */

  467. /**
  468.   * @}
  469.   */

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

所有资料51hei提供下载:
代码.7z (2.91 MB, 下载次数: 74)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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