TA的每日心情 | 开心 2024-10-25 14:50 |
---|
签到天数: 1071 天 连续签到: 1 天 [LV.10]以坛为家III
|
本帖最后由 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
- /*
- * tm1638.c
- *
- * Created on: Nov 4, 2022
- * Author: hui
- */
- //#include "app_config.h"
- #include "driver.h"
- #include "tm1638.h"
- uint8_t const tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
- //writebyte
- void tm1638_WriteDat(uint8_t dat)
- {
- uint8_t i;
- for(i=0;i<8;i++)
- {
- clk_l();
- if(dat&0X01)
- {
- dio_h();
- }
- else
- {
- dio_l();
- }
- dat>>=1;
- clk_h();
- }
- }
- void tm1638_Write_cmd(uint8_t cmd)
- {
- stb_l();
- tm1638_WriteDat(cmd);
- stb_h();
- }
- void tm1638_Write_Addr(uint8_t addr,uint8_t dat)
- {
- tm1638_Write_cmd(0x44);
- stb_l();
- tm1638_WriteDat(0xc0|addr);
- tm1638_WriteDat(dat);
- stb_h();
- }
- void tm1638_Write_LED(uint8_t LED_flag)
- {
- uint8_t i;
- for(i=0;i<8;i++)
- {
- if(LED_flag&(1<<i))
- {
- tm1638_Write_Addr(2*i+1,1);
- }
- else
- tm1638_Write_Addr(2*i+1,0);
- }
- }
- void TM1638_GpioInit(void)
- {
- gpio_function_en(STB);
- gpio_function_en(CLK);
- gpio_function_en(DIO);
- gpio_output_en(STB);
- gpio_output_en(CLK);
- gpio_output_en(DIO);
- }
- //TM1638 INIT
- void TM1638_Init(void)
- {
- uint8_t i;
- TM1638_GpioInit();
- tm1638_Write_cmd(0x8b);
- tm1638_Write_cmd(0x40);
- stb_l();
- tm1638_WriteDat(0xc0);
- for(i=0;i<16;i++)
- {
- tm1638_WriteDat(0x00);
- }
- stb_h();
- for(i=0;i<8;i++)
- {
- tm1638_Write_Addr(i<<1,tab[0]);
- }
- }
- void disp_led(uint8_t *dat)
- {
- uint8_t i;
- for(i=0;i<8;i++)
- {
- tm1638_Write_Addr(i<<1,tab[dat[i]]);
- }
- }
复制代码
2.3、tm1638.h
- /*
- * tm1638.h
- *
- * Created on: Nov 4, 2022
- * Author: hui
- */
- #ifndef COMMON_TM1638_H_
- #define COMMON_TM1638_H_
- #define STB GPIO_PD2
- #define CLK GPIO_PD7
- #define DIO GPIO_PC7
- #define dio_l() gpio_set_low_level(DIO)
- #define dio_h() gpio_set_high_level(DIO)
- #define clk_l() gpio_set_low_level(CLK)
- #define clk_h() gpio_set_high_level(CLK)
- #define stb_l() gpio_set_low_level(STB)
- #define stb_h() gpio_set_high_level(STB)
- void TM1638_Init(void);
- void disp_led(uint8_t *dat);
- void tm1638_Write_LED(uint8_t LED_flag);
- #endif /* COMMON_TM1638_H_ */
复制代码
2.4、测试程序
- uint8_t dispdat[8];
- int js=0;
- uint8_t ldj=0;
- void leddisp_test(void)
- {
- /*if(ldj>64)
- {
- ldj=0;
- }*/
- ldj++;
- if(js>9999)
- {
- js=0;
- }
- js++;
- dispdat[0]=0;
- dispdat[1]=0;
- dispdat[2]=0;
- dispdat[3]=0;
- dispdat[4]=js/1000;
- dispdat[5]=(js%1000)/100;
- dispdat[6]=((js%1000)%100)/10;
- dispdat[7]=((js%1000)%100)%10;
- disp_led(dispdat);
- tm1638_Write_LED(ldj);
- //delay_ms(200);
- //gpio_toggle(LED1);
- }
- /////////////////////////////////////////////////////////////////////
- // main loop flow
- /////////////////////////////////////////////////////////////////////
- void main_loop (void)
- {
- delay_ms(200);
- //gpio_toggle(GPIO_PA2);
- gpio_toggle(LED4);
- gpio_toggle(LED1);
- gpio_toggle(LED2);
- gpio_toggle(LED3);
- //delay_ms(200);
- leddisp_test();
- }
复制代码 三、运行视频
https://v.youku.com/v_show/id_XNTkxNzQ4NzI0MA==.html
|
|