[开发板与模块] 【ESK32-30519 + ESK32-21001测评】使用4位数码管显示数值

[复制链接]
 楼主| KING阿飞 发表于 2022-9-11 20:37 | 显示全部楼层 |阅读模式
<
本帖最后由 eltonchang2001 于 2022-11-9 13:53 编辑

【ESK32-30519 + ESK32-21001测评】使用4位数码管显示数值

  在ESK32-30519中自带了4位数码管,并且官方已经配置好了库,直接调用即可。

一、移植LEDC

$`0O6HKEAYKZ2RMFOARRH2M.png

我们的LEDC的文件存放在.\example\LEDC\7-SegmentDigitalDisplay。

  1. /*********************************************************************************************************//**
  2.   * [url=home.php?mod=space&uid=247401]@brief[/url]  Configure the LEDC.
  3.   * @retval None
  4.   ***********************************************************************************************************/
  5. void LEDC_Configuration(void)
  6. {
  7.   LEDC_InitTypeDef LEDC_InitStruct;

  8.   /* Turn on the APB clock of LEDC. */
  9.   CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}};
  10.   CKCUClock.Bit.LEDC       = 1;
  11.   CKCU_PeripClockConfig(CKCUClock, ENABLE);
  12.   CKCUClock.Bit.AFIO       = 1;
  13.   CKCU_PeripClockConfig(CKCUClock, ENABLE);

  14.   /* SEG0~7 */
  15.   AFIO_GPxConfig(HTCFG_LEDC_SEG0_GPIO_ID, HTCFG_LEDC_SEG0_AFIO_PIN, AFIO_FUN_LEDC);
  16.   AFIO_GPxConfig(HTCFG_LEDC_SEG1_GPIO_ID, HTCFG_LEDC_SEG1_AFIO_PIN, AFIO_FUN_LEDC);
  17.   AFIO_GPxConfig(HTCFG_LEDC_SEG2_GPIO_ID, HTCFG_LEDC_SEG2_AFIO_PIN, AFIO_FUN_LEDC);
  18.   AFIO_GPxConfig(HTCFG_LEDC_SEG3_GPIO_ID, HTCFG_LEDC_SEG3_AFIO_PIN, AFIO_FUN_LEDC);
  19.   AFIO_GPxConfig(HTCFG_LEDC_SEG4_GPIO_ID, HTCFG_LEDC_SEG4_AFIO_PIN, AFIO_FUN_LEDC);
  20.   AFIO_GPxConfig(HTCFG_LEDC_SEG5_GPIO_ID, HTCFG_LEDC_SEG5_AFIO_PIN, AFIO_FUN_LEDC);
  21.   AFIO_GPxConfig(HTCFG_LEDC_SEG6_GPIO_ID, HTCFG_LEDC_SEG6_AFIO_PIN, AFIO_FUN_LEDC);
  22.   AFIO_GPxConfig(HTCFG_LEDC_SEG7_GPIO_ID, HTCFG_LEDC_SEG7_AFIO_PIN, AFIO_FUN_LEDC);

  23.   /* COM0~4 */
  24.   AFIO_GPxConfig(HTCFG_LEDC_COM0_GPIO_ID, HTCFG_LEDC_COM0_AFIO_PIN, AFIO_FUN_LEDC);
  25.   AFIO_GPxConfig(HTCFG_LEDC_COM1_GPIO_ID, HTCFG_LEDC_COM1_AFIO_PIN, AFIO_FUN_LEDC);
  26.   AFIO_GPxConfig(HTCFG_LEDC_COM2_GPIO_ID, HTCFG_LEDC_COM2_AFIO_PIN, AFIO_FUN_LEDC);
  27.   AFIO_GPxConfig(HTCFG_LEDC_COM3_GPIO_ID, HTCFG_LEDC_COM3_AFIO_PIN, AFIO_FUN_LEDC);

  28.   /* Frame = fCK_LED / (LEDC_DutyClockNumber * COM Number) */
  29.   /*       = 1600 / (8*4)  =  50Hz */
  30.   //LEDC_InitStruct.LEDC_ClockSource    = LEDC_SRC_LSI;                    /* LSI = 32Khz */
  31.         LEDC_InitStruct.LEDC_ClockSource    = LEDC_SRC_PCLK;                                                                                /*PLL = 60Mhz*/
  32.   LEDC_InitStruct.LEDC_ClockPrescaler = HTCFG_LEDC_CLOCK_PRESCAL - 1;    /* fCK_LED =3MHz */
  33.   LEDC_InitStruct.LEDC_DutyClockNumber = HTCFG_LEDC_DUTY_CLOCK_NUMBER;   /* Duty CLock Number = 8 Clock */
  34.   LEDC_InitStruct.LEDC_COMxEN = HTCFG_LEDC_COM1EN | HTCFG_LEDC_COM2EN |\
  35.                                 HTCFG_LEDC_COM3EN | HTCFG_LEDC_COM4EN;   /* Enable COMx */

  36.   /* Change the brightness, the parameter range is 0~Duty (CLock Number-1.) */
  37.   /* 0: the brightest, 7: the darkest.                                      */
  38.   LEDC_InitStruct.LEDC_DeadTime = 0;
  39.   LEDC_Init(&LEDC_InitStruct);                                            /* LEC initialization. */

  40.   /* Set the LEDC mode to COMMON_CATHODE. */
  41.   LEDC_SetPolarityMode(HTCFG_LEDC_COM1POL | HTCFG_LEDC_COM2POL | HTCFG_LEDC_COM3POL | HTCFG_LEDC_COM4POL,
  42.                        LEDC_SEG0POL | LEDC_SEG1POL | LEDC_SEG2POL | LEDC_SEG3POL |\
  43.                        LEDC_SEG4POL | LEDC_SEG5POL | LEDC_SEG6POL | LEDC_SEG7POL,
  44.                        COMMON_CATHODE);

  45.   LEDC_IntConfig(ENABLE);                                                 /* Enable frame interrupt. */
  46.   NVIC_EnableIRQ(LEDC_IRQn); /* Enable LECD IRQ. */
  47.   LEDC_Cmd(ENABLE);          /* LEDC Start. */
  48. }

还有在ht32f5xxxxx_01_it.c中添加

  1. /* Global variables ----------------------------------------------------------------------------------------*/
  2. bool gIsUpdateChar;

  3. /* Private variables ---------------------------------------------------------------------------------------*/
  4. int gCounter = -1;
  5. /*********************************************************************************************************//**
  6. * [url=home.php?mod=space&uid=247401]@brief[/url]   This function handles LEDC Handler.
  7. * @retval  None
  8. ************************************************************************************************************/
  9. void LEDC_IRQHandler(void)
  10. {
  11.   if(LEDC_GetFlagStatus())
  12.     LEDC_ClearFlagStatus();
  13.   /* Frame = LSI_VALUE/HTCFG_LEDC_CLOCK_PRESCAL/_HTCFG_LEDC_CLOCK_NUMBER/4
  14.            = 32K / HTCFG_LEDC_CLOCK_PRESCAL/_HTCFG_LEDC_CLOCK_NUMBER/4
  15.            = 40 Hz*/
  16.   if(gCounter<(LSI_VALUE/HTCFG_LEDC_CLOCK_PRESCAL/_HTCFG_LEDC_CLOCK_NUMBER/4))
  17.   {
  18.     /* gCounter < 40*/
  19.     gCounter++;
  20.   }
  21.   else
  22.   {
  23.     /* gCounter >= 40, The "gCounter" greater than 40 means that the character has been displayed for 1 second,
  24.        and the new character will be replaced.*/
  25.     gCounter = 0;
  26.     gIsUpdateChar = TRUE;
  27.   }
  28. }
二、数据处理

  1. void Uint_List(u16 num,u8* dig1,u8* dig2,u8* dig3,u8* dig4)
  2. {
  3.         if(num>=9999)
  4.                 {
  5.                         *dig1=9;
  6.                         *dig2=9;
  7.                         *dig3=9;
  8.                         *dig4=9;
  9.                 }else{
  10.                         *dig1 = num/1000;
  11.                         *dig2 = num/100%10;
  12.                         *dig3 = num/10%10;
  13.                         *dig4 = num%10;
  14.                 }
  15. }

  16. void LEDC_Uint_Display(u16 num)
  17. {
  18.         u8 dig1=0,dig2=0,dig3=0,dig4=0,dp1=0,dp2=0,dp3=0,dp4=0;
  19.         if(gIsUpdateChar)
  20.         {
  21.                
  22.                 Uint_List(num,&dig1,&dig2,&dig3,&dig4);
  23.                
  24.                 LEDC_SetData(HTCFG_LEDC_COM_D1,  NumberChar[dig1]);
  25.     LEDC_SetData(HTCFG_LEDC_COM_D2,  NumberChar[dig2]);
  26.     LEDC_SetData(HTCFG_LEDC_COM_D3,  NumberChar[dig3]);
  27.           LEDC_SetData(HTCFG_LEDC_COM_D4,  NumberChar[dig4]);
  28.                
  29.                 gIsUpdateChar = FALSE;
  30.         }
  31. }

  32. void Float_List(float num,u8* dig1,u8* dig2,u8* dig3,u8* dig4,u8* dp1,u8* dp2,u8* dp3,u8* dp4)
  33. {
  34.         if(num>0.0f&&num<10.0f)
  35.         {
  36.                 *dp1=10;
  37.                 *dp2=11;
  38.                 *dp3=11;
  39.                 *dp4=11;
  40.                 *dig1 = (u8)num;
  41.                 *dig2 = (u8)(num*10)%10;
  42.                 *dig3 = (u8)((u16)(num*100)%10);
  43.                 *dig4 = (u8)((u16)(num*1000)%10);
  44.         }else if(num>=10.0f&&num<100.0f)
  45.         {
  46.                 *dp1=11;
  47.                 *dp2=10;
  48.                 *dp3=11;
  49.                 *dp4=11;
  50.                 *dig1 = (u8)num/10;
  51.                 *dig2 = (u8)(num)%10;
  52.                 *dig3 = (u8)((u16)(num*10)%10);
  53.                 *dig4 = (u8)((u16)(num*100)%10);
  54.         }else if(num>=100.0f&&num<1000.0f)
  55.         {
  56.                 *dp1=11;
  57.                 *dp2=11;
  58.                 *dp3=10;
  59.                 *dp4=11;
  60.                 *dig1 = (u8)num/100;
  61.                 *dig2 = (u8)(num)/10%10;
  62.                 *dig3 = (u8)((u16)(num)%10);
  63.                 *dig4 = (u8)((u16)(num*10)%10);
  64.         }else{
  65.                 *dp1=11;
  66.                 *dp2=11;
  67.                 *dp3=11;
  68.                 *dp4=10;
  69.                 Uint_List((u16)num,dig1,dig2,dig3,dig4);
  70.         }
  71.         
  72. }

  73. void LEDC_Float_Display(float num)
  74. {
  75.         u8 dig1=0,dig2=0,dig3=0,dig4=0,dp1=0,dp2=0,dp3=0,dp4=0;
  76.         if(gIsUpdateChar)
  77.         {
  78.                 Float_List(num,&dig1,&dig2,&dig3,&dig4,&dp1,&dp2,&dp3,&dp4);
  79.                
  80.                 LEDC_SetData(HTCFG_LEDC_COM_D1,  NumberChar[dig1]+NumberChar[dp1]);
  81.     LEDC_SetData(HTCFG_LEDC_COM_D2,  NumberChar[dig2]+NumberChar[dp2]);
  82.     LEDC_SetData(HTCFG_LEDC_COM_D3,  NumberChar[dig3]+NumberChar[dp3]);
  83.           LEDC_SetData(HTCFG_LEDC_COM_D4,  NumberChar[dig4]+NumberChar[dp4]);
  84.                
  85.                 gIsUpdateChar = FALSE;
  86.         }
  87. }
暂时还没有对负号进行处理

VID_20220911_202635_Trim.gif


gouguoccc 发表于 2022-9-11 23:27 来自手机 | 显示全部楼层
现在数码管用的很少了吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

18

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

4

主题

18

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部