查看: 995|回复: 0

[评测分享] 【Telink-泰凌微电子 B91通用开发套件】+ 驱动LED数码管

[复制链接]
  • TA的每日心情
    开心
    2024-10-25 14:50
  • 签到天数: 1071 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2022-11-4 16:02:37 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 satoll 于 2022-11-4 17:02 编辑

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


        一、硬件电路

       1.1、LED模块部分
       模块图片


    20221104142940.png
       模块电路图


        20221104143424.png


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


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


        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





    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-11-22 22:41 , Processed in 0.116306 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.