久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15538|回復: 9
打印 上一主題 下一主題
收起左側(cè)

STM32+TM1637驅(qū)動數(shù)碼管顯示程序源碼與原理圖資料(動態(tài)顯示學號)

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:412073 發(fā)表于 2018-10-19 08:39 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式


TM1637數(shù)碼管顯示模塊原理圖如下:


現(xiàn)象:顯示4444
要求:計算1-9的段碼,用16進制數(shù);
      顯示學號后四位
      動態(tài)顯示全部學號
      計數(shù):從0-9999

stm32單片機源程序如下:
  1. /* Includes ------------------------------------------------------------------*/
  2. #include "main.h"
  3. #include "stm32f1xx_hal.h"

  4. /* USER CODE BEGIN Includes */

  5. /* USER CODE END Includes */

  6. /* Private variables ---------------------------------------------------------*/

  7. /* USER CODE BEGIN PV */
  8. /* Private variables ---------------------------------------------------------*/

  9. static uint8_t fac_us=0;

  10. /* USER CODE END PV */

  11. /* Private function prototypes -----------------------------------------------*/
  12. void SystemClock_Config(void);
  13. void Error_Handler(void);
  14. static void MX_GPIO_Init(void);

  15. /* USER CODE BEGIN PFP */
  16. /* Private function prototypes -----------------------------------------------*/

  17. void ALIX_Delay_init(void);
  18. void ALIX_Delay_us(uint32_t nus);
  19. void TMserialstart(void);
  20. void TMserialstop(void);
  21. void TMserialask(void);
  22. void TMserialWrByte(uint8_t oneByte);
  23. void TMSegDisplay(uint8_t *DISCODE);

  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.         uint8_t NUM[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
  32.         uint8_t abc[]={0x00,0x00,0x00,0x00};
  33.         
  34. //                0     1    2    3    4    5    6    7    8    9     
  35.   /* USER CODE END 1 */

  36.   /* MCU Configuration----------------------------------------------------------*/

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

  39.   /* Configure the system clock */
  40.   SystemClock_Config();

  41.   /* Initialize all configured peripherals */
  42.   MX_GPIO_Init();

  43.   /* USER CODE BEGIN 2 */
  44.         ALIX_Delay_init();
  45.         int b=0;
  46.   /* USER CODE END 2 */

  47.   /* Infinite loop */
  48.   /* USER CODE BEGIN WHILE */
  49.   while (1)
  50.   {
  51.                 int c,d,e,f;
  52.   /* USER CODE END WHILE */

  53.   /* USER CODE BEGIN 3 */
  54.                 if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5)==0)
  55.                 {

  56.                 if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_5)==1)
  57.                 {
  58.                         b++;
  59.                         
  60.                         c=b%10;
  61.                         d=b/10%10;
  62.                         e=b/100%10;
  63.                         f=b/1000%10;
  64.                         abc[0]=NUM[f];
  65.                         abc[1]=NUM[e];
  66.                         abc[2]=NUM[d];
  67.                         abc[3]=NUM[c];
  68.                         TMSegDisplay(abc);
  69.                 HAL_GPIO_TogglePin(led_GPIO_Port,led_Pin);
  70.                 ALIX_Delay_us(90000);
  71.                         if(b==9999)
  72.                         {
  73.                         b=0;
  74.                         }
  75.                 }
  76.         }


  77.   }
  78.   /* USER CODE END 3 */

  79. }

  80. /** System Clock Configuration
  81. */
  82. void SystemClock_Config(void)
  83. {

  84.   RCC_OscInitTypeDef RCC_OscInitStruct;
  85.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  86.     /**Initializes the CPU, AHB and APB busses clocks
  87.     */
  88.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  89.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  90.   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  91.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  92.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  93.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  94.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  95.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  96.   {
  97.     Error_Handler();
  98.   }

  99.     /**Initializes the CPU, AHB and APB busses clocks
  100.     */
  101.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  102.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  103.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  104.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  105.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  106.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  107.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  108.   {
  109.     Error_Handler();
  110.   }

  111.     /**Configure the Systick interrupt time
  112.     */
  113.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  114.     /**Configure the Systick
  115.     */
  116.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  117.   /* SysTick_IRQn interrupt configuration */
  118.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  119. }

  120. /** Configure pins as
  121.         * Analog
  122.         * Input
  123.         * Output
  124.         * EVENT_OUT
  125.         * EXTI
  126. */
  127. static void MX_GPIO_Init(void)
  128. {

  129.   GPIO_InitTypeDef GPIO_InitStruct;

  130.   /* GPIO Ports Clock Enable */
  131.   __HAL_RCC_GPIOC_CLK_ENABLE();
  132.   __HAL_RCC_GPIOD_CLK_ENABLE();
  133.   __HAL_RCC_GPIOA_CLK_ENABLE();

  134.   /*Configure GPIO pin Output Level */
  135.   HAL_GPIO_WritePin(led_GPIO_Port, led_Pin, GPIO_PIN_SET);

  136.   /*Configure GPIO pin Output Level */
  137.   HAL_GPIO_WritePin(GPIOA, TM_DIO_Pin|TM_CLK_Pin, GPIO_PIN_SET);

  138.   /*Configure GPIO pin : led_Pin */
  139.   GPIO_InitStruct.Pin = led_Pin;
  140.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  141.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  142.   HAL_GPIO_Init(led_GPIO_Port, &GPIO_InitStruct);

  143.   /*Configure GPIO pins : TM_DIO_Pin TM_CLK_Pin */
  144.   GPIO_InitStruct.Pin = TM_DIO_Pin|TM_CLK_Pin;
  145.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  146.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  147.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  148.   /*Configure GPIO pin : PA2 */
  149.   GPIO_InitStruct.Pin = GPIO_PIN_2;
  150.   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  151.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  152.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  153.   /*Configure GPIO pin : PA5 */
  154.   GPIO_InitStruct.Pin = GPIO_PIN_5;
  155.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  156.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  157.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  158. }

  159. /* USER CODE BEGIN 4 */

  160. void ALIX_Delay_init()
  161. {

  162.         HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8);        
  163.         fac_us=SystemCoreClock/8000000;                                   

  164. }

  165. void ALIX_Delay_us(uint32_t nus)
  166. {               
  167.         uint32_t temp;                     
  168.         SysTick->LOAD=nus*fac_us;                                                                    
  169.         SysTick->VAL=0x00;                                                
  170.         SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;         
  171.         do
  172.         {
  173.                 temp=SysTick->CTRL;
  174.         }while((temp&0x01)&&!(temp&(1<<16)));                  
  175.         SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;        
  176.         SysTick->VAL =0X00;      
  177. }

  178. void TMserialstart(void)
  179. {
  180.         HAL_GPIO_WritePin(TM_CLK_GPIO_Port,TM_CLK_Pin,GPIO_PIN_SET); // CLK = 1
  181.         HAL_GPIO_WritePin(TM_DIO_GPIO_Port,TM_DIO_Pin,GPIO_PIN_SET); // DIO = 1
  182.         ALIX_Delay_us(2);
  183.         HAL_GPIO_WritePin(TM_DIO_GPIO_Port,TM_DIO_Pin,GPIO_PIN_RESET); // DIO = 0
  184. }

  185. void TMserialstop(void)
  186. {
  187.         HAL_GPIO_WritePin(TM_CLK_GPIO_Port,TM_CLK_Pin,GPIO_PIN_RESET); // CLK = 0
  188.         ALIX_Delay_us(2);
  189.         HAL_GPIO_WritePin(TM_DIO_GPIO_Port,TM_DIO_Pin,GPIO_PIN_RESET); // DIO = 0
  190.         ALIX_Delay_us(2);
  191.         HAL_GPIO_WritePin(TM_CLK_GPIO_Port,TM_CLK_Pin,GPIO_PIN_SET); // CLK = 1
  192.         ALIX_Delay_us(2);
  193.         HAL_GPIO_WritePin(TM_DIO_GPIO_Port,TM_DIO_Pin,GPIO_PIN_SET); // DIO = 1
  194. }

  195. void TMserialask(void)
  196. {
  197.         TM1637_DIO_IN();
  198.         HAL_GPIO_WritePin(TM_CLK_GPIO_Port,TM_CLK_Pin,GPIO_PIN_RESET); // CLK = 0
  199.         ALIX_Delay_us(5);
  200.         while(HAL_GPIO_ReadPin(TM_DIO_GPIO_Port,TM_DIO_Pin));
  201.         HAL_GPIO_WritePin(TM_CLK_GPIO_Port,TM_CLK_Pin,GPIO_PIN_SET); // CLK = 1
  202.         ALIX_Delay_us(2);
  203.         HAL_GPIO_WritePin(TM_CLK_GPIO_Port,TM_CLK_Pin,GPIO_PIN_RESET); // CLK = 0
  204.         TM1637_DIO_OUT();
  205. }

  206. void TMserialWrByte(uint8_t oneByte)
  207. {
  208.         uint8_t i;
  209.         for(i=0;i<8;i++)
  210.         {
  211.                 HAL_GPIO_WritePin(TM_CLK_GPIO_Port,TM_CLK_Pin,GPIO_PIN_RESET); // CLK = 0
  212.                 if(oneByte&0x01)
  213.                 {
  214.                         HAL_GPIO_WritePin(TM_DIO_GPIO_Port,TM_DIO_Pin,GPIO_PIN_SET); // DIO = 1
  215.                 }
  216.                 else
  217.                 {
  218.                         HAL_GPIO_WritePin(TM_DIO_GPIO_Port,TM_DIO_Pin,GPIO_PIN_RESET); // DIO = 0
  219.                 }
  220.                 ALIX_Delay_us(3);
  221.                 oneByte=oneByte>>1;
  222.                 HAL_GPIO_WritePin(TM_CLK_GPIO_Port,TM_CLK_Pin,GPIO_PIN_SET); // CLK = 1
  223.                 ALIX_Delay_us(3);
  224.         }
  225. }

  226. void TMSegDisplay(uint8_t *DISCODE)
  227. {
  228.         uint8_t i;
  229.         TMserialstart();
  230.         TMserialWrByte(0x40);
  231.         TMserialask();
  232.         TMserialstop();
  233.         TMserialstart();
  234.         TMserialWrByte(0xc0);
  235.         TMserialask();
  236.         for(i=0;i<4;i++)
  237.         {
  238.                 TMserialWrByte(*(DISCODE+i));
  239.                 TMserialask();
  240.         }
  241.         TMserialstop();
  242.         TMserialstart();
  243.         TMserialWrByte(0x8f);
  244.         TMserialask();
  245.         TMserialstop();
  246. }

  247. /* USER CODE END 4 */

  248. /**
  249.   * @brief  This function is executed in case of error occurrence.
  250.   * @param  None
  251.   * @retval None
  252.   */
  253. void Error_Handler(void)
  254. {
  255.   /* USER CODE BEGIN Error_Handler */
  256.   /* User can add his own implementation to report the HAL error return state */
  257.   while(1)
  258.   {
  259.   }
  260.   /* USER CODE END Error_Handler */
  261. }

  262. #ifdef USE_FULL_ASSERT

  263. /**
  264.    * @brief Reports the name of the source file and the source line number
  265.    * where the assert_param error has occurred.
  266.    * @param file: pointer to the source file name
  267.    * @param line: assert_param error line source number
  268.    * @retval None
  269.    */
  270. void assert_failed(uint8_t* file, uint32_t line)
  271. {
  272.   /* USER CODE BEGIN 6 */
  273.   /* User can add his own implementation to report the file name and line number,
  274.     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  275.   /* USER CODE END 6 */

  276. }

  277. #endif

  278. /**
  279.   * @}
  280.   */

  281. /**
  282.   * @}
  283. */

  284. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
復制代碼

所有資料51hei提供下載:
TM1637數(shù)碼管顯示模塊資料包.7z (1.66 MB, 下載次數(shù): 327)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:431814 發(fā)表于 2018-11-23 14:17 | 只看該作者
謝謝分享!看來這個網(wǎng)站的資料還是蠻多的呀
回復

使用道具 舉報

板凳
ID:157393 發(fā)表于 2018-11-24 16:16 | 只看該作者
路過學下看下!
回復

使用道具 舉報

地板
ID:23844 發(fā)表于 2018-11-25 20:21 | 只看該作者
好資料,下載一個回來學習一下。
回復

使用道具 舉報

5#
ID:189285 發(fā)表于 2019-5-11 11:24 | 只看該作者
沒看出用什么邏輯芯片
回復

使用道具 舉報

6#
ID:26288 發(fā)表于 2019-6-6 08:13 | 只看該作者
學習一下,多謝分享
回復

使用道具 舉報

7#
ID:571420 發(fā)表于 2019-6-25 09:17 | 只看該作者
好資料
回復

使用道具 舉報

8#
ID:478073 發(fā)表于 2019-6-25 09:43 | 只看該作者
這不是多次一舉嗎!I/O口都夠用,直接都能驅(qū)動的事,硬是要加個1637
回復

使用道具 舉報

9#
ID:569027 發(fā)表于 2019-9-18 09:27 | 只看該作者
謝謝分享
回復

使用道具 舉報

10#
ID:433638 發(fā)表于 2020-4-15 01:10 | 只看該作者
感謝分享!!!
回復

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 美女久久 | 国产精品久久久久久亚洲调教 | 欧美一区二区三区久久精品 | 欧美午夜一区 | 欧美精品一区二区三区在线 | 美日韩精品| 亚洲一区 中文字幕 | 97免费视频在线观看 | 国产精品中文在线 | 日韩精品久久久久久 | 国产精品久久久久久久久久久免费看 | 欧美日韩在线视频一区二区 | 精品国产99 | 日本成人免费观看 | 久久成人精品视频 | 久久区二区 | 中文字幕亚洲区一区二 | 成人精品久久 | 九色av | 91视频官网 | 亚洲精品电影在线观看 | 麻豆亚洲 | 麻豆久久久9性大片 | 91精品国产91久久久久福利 | 337p日本欧洲亚洲大胆 | 亚洲一区二区视频在线播放 | 精品视频一区二区三区四区 | 爱爱免费视频网站 | 美日韩免费 | 久久精品这里精品 | 亚洲综合在线视频 | 国产亚洲精品精品国产亚洲综合 | 日韩电影在线 | 国产成人精品一区二区在线 | 一级毛片免费完整视频 | 欧美日韩成人 | 欧美激情在线精品一区二区三区 | 欧美精品乱码久久久久久按摩 | 国产黄色在线 | 中文字幕 在线观看 | 久久中文视频 |