回答

收藏

【Telink-泰凌微电子 B91通用开发套件】+ 驱动LED数码管

泰凌微电子 泰凌微电子 1621 人阅读 | 0 人回复 | 2022-11-04

本帖最后由 satoll 于 2022-11-4 17:02 编辑

    下面测试使用GPIO驱动TM1638模块来显示LED数字。


    一、硬件电路

   1.1、LED模块部分
   模块图片



   模块电路图


   



    1.2、开发板部分
    驱动模块使用下面的引脚:
    使用到PD2、PD7和PC7引脚。
   



    二、程序部分
   
    2.1、在common目录下创建tm1638 驱动程序。
   



    2.2、tm1638.c
   
  1. /*
  2. * tm1638.c
  3. *
  4. *  Created on: Nov 4, 2022
  5. *      Author: hui
  6. */

  7. //#include "app_config.h"
  8. #include "driver.h"
  9. #include "tm1638.h"

  10. uint8_t const tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
  11. //writebyte

  12. void tm1638_WriteDat(uint8_t dat)
  13. {

  14.         uint8_t i;

  15.         for(i=0;i<8;i++)
  16.         {
  17.                 clk_l();
  18.                 if(dat&0X01)
  19.                 {
  20.                         dio_h();
  21.                 }
  22.                 else
  23.                 {
  24.                         dio_l();
  25.                 }
  26.                 dat>>=1;
  27.                 clk_h();
  28.         }
  29. }

  30. void tm1638_Write_cmd(uint8_t cmd)
  31. {
  32.         stb_l();
  33.         tm1638_WriteDat(cmd);
  34.         stb_h();
  35. }

  36. void tm1638_Write_Addr(uint8_t addr,uint8_t dat)
  37. {
  38.         tm1638_Write_cmd(0x44);
  39.         stb_l();
  40.         tm1638_WriteDat(0xc0|addr);
  41.         tm1638_WriteDat(dat);
  42.         stb_h();
  43. }

  44. void tm1638_Write_LED(uint8_t LED_flag)
  45. {

  46.         uint8_t i;
  47.         for(i=0;i<8;i++)
  48.         {
  49.                 if(LED_flag&(1<<i))
  50.                 {
  51.                         tm1638_Write_Addr(2*i+1,1);
  52.                 }
  53.                 else
  54.                         tm1638_Write_Addr(2*i+1,0);
  55.         }
  56. }

  57. void TM1638_GpioInit(void)
  58. {
  59.         gpio_function_en(STB);
  60.         gpio_function_en(CLK);
  61.         gpio_function_en(DIO);

  62.         gpio_output_en(STB);
  63.         gpio_output_en(CLK);
  64.         gpio_output_en(DIO);
  65. }

  66. //TM1638 INIT
  67. void TM1638_Init(void)
  68. {
  69.         uint8_t i;
  70.         TM1638_GpioInit();
  71.         tm1638_Write_cmd(0x8b);
  72.         tm1638_Write_cmd(0x40);
  73.         stb_l();
  74.         tm1638_WriteDat(0xc0);

  75.         for(i=0;i<16;i++)
  76.         {
  77.                         tm1638_WriteDat(0x00);
  78.         }
  79.         stb_h();
  80.         for(i=0;i<8;i++)
  81.         {
  82.         tm1638_Write_Addr(i<<1,tab[0]);
  83.         }
  84. }


  85. void disp_led(uint8_t *dat)
  86. {
  87.         uint8_t i;
  88.         for(i=0;i<8;i++)
  89.         {
  90.                         tm1638_Write_Addr(i<<1,tab[dat[i]]);
  91.         }
  92. }


复制代码

    2.3、tm1638.h
   
  1. /*
  2. * tm1638.h
  3. *
  4. *  Created on: Nov 4, 2022
  5. *      Author: hui
  6. */

  7. #ifndef COMMON_TM1638_H_
  8. #define COMMON_TM1638_H_

  9. #define STB                            GPIO_PD2
  10. #define CLK                            GPIO_PD7
  11. #define DIO                            GPIO_PC7



  12. #define dio_l()                gpio_set_low_level(DIO)
  13. #define dio_h()                gpio_set_high_level(DIO)

  14. #define clk_l()           gpio_set_low_level(CLK)
  15. #define clk_h()           gpio_set_high_level(CLK)

  16. #define stb_l()         gpio_set_low_level(STB)
  17. #define stb_h()          gpio_set_high_level(STB)

  18. void TM1638_Init(void);
  19. void disp_led(uint8_t *dat);
  20. void tm1638_Write_LED(uint8_t LED_flag);

  21. #endif /* COMMON_TM1638_H_ */
复制代码

    2.4、测试程序
   
  1. uint8_t dispdat[8];
  2. int js=0;
  3. uint8_t ldj=0;
  4. void leddisp_test(void)
  5. {
  6.         /*if(ldj>64)
  7.         {
  8.                 ldj=0;
  9.         }*/
  10.         ldj++;
  11.         if(js>9999)
  12.         {
  13.                 js=0;
  14.         }
  15.         js++;
  16.         dispdat[0]=0;
  17.         dispdat[1]=0;
  18.         dispdat[2]=0;
  19.         dispdat[3]=0;
  20.         dispdat[4]=js/1000;
  21.         dispdat[5]=(js%1000)/100;
  22.         dispdat[6]=((js%1000)%100)/10;
  23.         dispdat[7]=((js%1000)%100)%10;
  24.         disp_led(dispdat);
  25.         tm1638_Write_LED(ldj);
  26.         //delay_ms(200);
  27.         //gpio_toggle(LED1);
  28. }

  29. /////////////////////////////////////////////////////////////////////
  30. // main loop flow
  31. /////////////////////////////////////////////////////////////////////
  32. void main_loop (void)
  33. {
  34.         delay_ms(200);
  35.         //gpio_toggle(GPIO_PA2);
  36.         gpio_toggle(LED4);
  37.         gpio_toggle(LED1);
  38.         gpio_toggle(LED2);
  39.         gpio_toggle(LED3);
  40.         //delay_ms(200);
  41.         leddisp_test();

  42. }
复制代码
    三、运行视频
    https://v.youku.com/v_show/id_XNTkxNzQ4NzI0MA==.html





分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /2 下一条