本帖最后由 lilijin1995 于 2022-9-17 17:51 编辑
#申请原创#
@21小跑堂
TM1640 是一种LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器、LED 驱动等电路。我们目标是实现TM1640点亮16位数码管,显示“0~F”数字;
1 硬件设计GPIO初始化配置 SCL(PB6) SDA(PB7);开漏输出,通过IO模拟驱动TM1640,TM1640IC驱动有点类似于I2C;
我们程序采样的是自动地址的方式去驱动,1次刷16个数据;可以看到cmd1~cm3分半是设置数据、设置地址、控制显示的命令; 然后命令格式如下
在软件设计中我们将实现这个自动地址驱动时序 2 软件设计首先是TM1640初始化TM1640_GPIO_INIT,设置为开漏极输出,如下:
- /*********************************************************************
- * @fn TM1640_GPIO_INIT
- *
- * [url=home.php?mod=space&uid=247401]@brief[/url] Initializes GPIOB.6 GPIOB.7
- *
- * [url=home.php?mod=space&uid=266161]@return[/url] none
- */
- void TM1640_GPIO_INIT(void) {
-
- GPIO_InitTypeDef GPIO_InitStructure = { 0 };
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_SetBits(GPIOB, GPIO_Pin_6);//SCL
- GPIO_SetBits(GPIOB, GPIO_Pin_7);//SDA
- }
接着设置TM1640,并写入段码
- void TM1640_Handle(void)
- {
- u8 i;
- TM1640_Generate_START();
- TM1640_WriteData(0x40);//数据命令设置:普通模式,地址自动加一
- TM1640_Generate_STOP();
-
- TM1640_Generate_START();
- TM1640_WriteData(0xC0);////地址命令设置:初始地址00H
- for(i=0;i<16;i++) //发送16位显示数据
- {
- TM1640_WriteData(CODE);
- }
- TM1640_Generate_STOP();
-
- TM1640_Generate_START();
- TM1640_WriteData(0x8c); //显示控制:显示开,脉冲宽度设为11/16
- TM1640_Generate_STOP();
- Delay_Ms(10);
-
- }
3 下载验证显示"0~F";
演示视频链接:
4. 为了方便大家理解,另有视频对代码进行见解
如下:
https://www.bilibili.com/video/BV1SG4y1z7yh/?spm_id_from=333.788&vd_source=2bbde87de845d5220b1d8ba075c12fb0
附件是代码:
|