自己学着写的,手上没硬件,没法测试,请各位自行测试,不懂的问

芯片时钟手册

地址自动加1模式的数据发送格式

地址模式选择的寄存器值

字符存储寄存器地址

亮度寄存器的值

TM1640.c

/** TM1640.c**  Created on: Sep 28, 2022*      Author: 79482*/
#include "stm32l4xx_hal.h"
#include "TM1640.h"void DelayUs(uint8_t Us)
{uint8_t n = SystemCoreClock/1000000/8*Us;do{__NOP();}while(n--);
}void TM1640_GPIO_INIT(void)
{GPIO_InitTypeDef gpioinit;gpioinit.Pin = GPIO_PIN_0|GPIO_PIN_1;//GPIO_PIN_0 是连接 DIN 引脚、GPIO_PIN_1 是连接 SCLK 引脚gpioinit.Mode = GPIO_MODE_OUTPUT_OD; //选择开漏输出模式
//    gpioinit.Pull = GPIO_PULLUP;gpioinit.Speed = GPIO_SPEED_FREQ_VERY_HIGH;__HAL_RCC_GPIOA_CLK_ENABLE();HAL_GPIO_Init(GPIOA,&gpioinit);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0|GPIO_PIN_1,GPIO_PIN_SET);
}/**        数据发送函数*         由 GPIOA 的 GPIO_PIN_1 模拟发送时钟,由 GPIOA 的 GPIO_PIN_0 发送数据*       *pData:要发送的8位16进制数的指针或数组*        Len: 要发送的8位16进制数的数组长度*/
void TM1640_SendFrame(uint8_t *pData,uint8_t Len)
{HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);DelayUs(1);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);DelayUs(1);for(uint8_t Byte = 0;Byte < Len;Byte++){for(uint8_t Bit = 0;Bit < 8;Bit++){if((pData[Byte]&(0x01<<Bit))!=0){HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);}else{HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);}DelayUs(1);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);DelayUs(1);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);DelayUs(1);}}HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);DelayUs(1);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
}/**        地址模式选择函数*       Addr:指要发送的命令数据*            TM1640_ADDR_MODE_AUTO_INC 地址自动加1模式*             TM1640_ADDR_MODE_FIXED    固定地址模式*/
void TM1640_SendCommand1(uint8_t Addr)
{uint8_t SendAdd[1];SendAdd[0] = Addr;TM1640_SendFrame(SendAdd,sizeof(Addr));
}/**        数据首地址以及字符数据发送函数*        Addr:    数码管显示字符的首地址*        *pData:数字的8位16进制数据指针或数组*         Len:   数字数组的长度*/
void TM1640_SendCommand2(uint8_t Addr,uint8_t *pData,uint8_t Len)
{uint8_t Buffer[17];Buffer[0] = Addr|0xc0;for(uint8_t Byte = 0;Byte < Len;Byte++){Buffer[Byte+1] = pData[Byte];}TM1640_SendFrame(Buffer,Len+1);
}/**        数码管亮度调节函数*      BrightNess:亮度值*                  填写0~7,数字越大越亮*                    TM1640_PULSE_WIDTH_OFF关闭数码管*/
void TM1640_SendCommand3(uint8_t BrightNess)
{uint8_t Buffer[1];if(BrightNess == TM1640_PULSE_WIDTH_OFF){Buffer[0] = BrightNess;TM1640_SendFrame(Buffer,1);}else{Buffer[0] = BrightNess|0x88;TM1640_SendFrame(Buffer,1);}
}/**        数字显示函数*         Number:要显示的10进制数范围(0~65535)*       例如显示65:TM1640_ShowNumber(65);*/
void TM1640_ShowNumber(uint8_t Number)
{uint8_t NUM;uint8_t pData[5];uint8_t Buffer[10] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};for(uint8_t i=0;i<5;i++){NUM = Number%10;Number /= 10;pData[5-i] = Buffer[NUM];}TM1640_SendCommand1(TM1640_ADDR_MODE_AUTO_INC);TM1640_SendCommand2(0x00,pData,5);TM1640_SendCommand3(4);
}

TM1640.h

/** TM1640.h**  Created on: Sep 28, 2022*      Author: 79482*/#ifndef INC_TM1640_H_
#define INC_TM1640_H_#define TM1640_ADDR_MODE_AUTO_INC 0X40             //TM1640地址自动加1模式
#define TM1640_ADDR_MODE_FIXED 0x44                 //TM1640固定地址模式#define TM1640_PULSE_WIDTH_OFF 0x80                   //TM1640亮度关void TM1640_GPIO_INIT(void);                     //DIN引脚初始化;CLK引脚初始化
void DelayUs(uint8_t Us);                           //1us延时函数
void TM1640_SendFrame(uint8_t *pData,uint8_t Len);  //数据发送函数
void TM1640_SendCommand1(uint8_t Addr);             //第一部分数据发送函数(地址模式选择)
void TM1640_SendCommand2(uint8_t Addr,uint8_t *pData,uint8_t Len);//第二部分数据发送函数(显示数字的数据)
void TM1640_SendCommand3(uint8_t BrightNess);                     //第三部分数据发送函数(亮度控制)
void TM1640_ShowNumber(uint8_t Number);                           //显示函数,显示范围0~65535#endif /* INC_TM1640_H_ */

TM1640数码管控制器移植STM32HAL库相关推荐

  1. GD32移植STM32HAL库接口

    GD32移植STM32HAL库接口 串口接口 串口需要的延时 GPIO接口及中断设置接口 中断设置 配置端口输出例子 FLASH接口 Flash测试代码 看门狗非HAL接口 定时器部分接口 原工程使用 ...

  2. 关于TFT LCD屏ST7735S驱动移植STM32HAL库的部分问题总结

    项目场景: STM32L431RCT驱动1.44寸TFT屏(ST7735S)移植HAL库 1.问题描述: 移植成功后,有复位不显示的情况,意思是同一段代码,有时候能显示,有时候下载到板子上死活不显示, ...

  3. STM32HAL库-移植mbedtls开源库示例(一)

    目录 概述 一.使用方法 二.STM32CubeMx配置 三.Examples 四.运行结果 五.总结 概述 本篇文章介绍如何使用STM32HAL库,移植mbedtls开源库支持mqtt证书加密示例. ...

  4. STM32使用OLED移植U8g2库

    STM32使用OLED移植U8g2库 STM32CubeMX配置 硬件 STM32F103C8T6 I2C通信OLED 128*64 软件 System Core->RCC->HSE-&g ...

  5. WS2812灯珠(六)---移植WS2812FX库

    移植WS2812FX库 该库实现了比Adafruit_NeoPixel库更丰富的显示效果,且该库的实现是建立在Adafruit_NeoPixel库的基础上实现的.这里的移植是基于STM32 Keil ...

  6. STM32HAL库RS485-ModBus协议控制伺服电机

    STM32HAL库RS485-ModBus协议控制伺服电机 一个月前,接手了一个学长的毕设小车,小车采用rs485通信的modbus协议驱动轮毂电机,与往常我学习的pwm控制电机方法大相径庭,在这里以 ...

  7. STM32HAL库GPIO和EXTI

    STM32HAL库 GPIO STM32芯片最多拥有7组端口(GPIOA-GPIOG),每组端口最多有用16个引脚(Pin0-Pin15) STM32的每个I/O端口都可以自由编程,但I/O端口寄存器 ...

  8. stm32 lwip 如何发送不出_mbedtls | 移植mbedtls库到STM32裸机的两种方法

    一.mbedtls 开源库 1. mbedtls是什么 Mbed TLS是一个开源.可移植.易于使用.代码可读性高的SSL库.可实现加密原语,X.509证书操作以及SSL / TLS和 DTLS 协议 ...

  9. 嵌入式设备中支持国密算法的方法(三)——移植Openssl库的步骤说明

    本篇文章是介绍国密算法在嵌入式设备中应用方法系列文章的第三篇,介绍移植openssl库到嵌入式设备中的具体方法,当然最终的目的还是使我们的设备能支持国密算法.同上一篇文章中介绍的miracl密码库相比 ...

  10. 嵌入式设备中支持国密算法的方法——移植Miracl库的步骤说明

    上一篇文章中我们为大家介绍了嵌入式设备中支持国密算法的几种方法.本篇我们详细的介绍一下第一种方法:移植Miracl库的具体操作步骤. 第一步 获取源码 MIRACL密码库是开源软件,可以直接到官网下载 ...

最新文章

  1. 佩特来项目经验小集合(2)___组合查询存储过程,报错 quot;varchar JBID=#39;#39; 转换成数据类型 int 时失败quot;...
  2. Yii2 的小贴士用法
  3. webservice gsoap 小记
  4. Windows10 网络图标消失 连接不上网络 的解决方法
  5. python在知名公司的应用
  6. handbook/CentOS/使用免费SSL证书让网站支持HTTPS访问.md
  7. shell编程复习 第二次
  8. iptv组播和单播的区别
  9. 自学mysql还是sql好_如何自学SQL?
  10. JMeter中BeanShell的使用方法和常用语法
  11. 截止失真放大电路_一起学模电:6、放大电路静态与动态分析方法
  12. 公有云Docker镜像P2P加速之路:安全篇
  13. 南开大学张昊计算机,纽约南开校友会隆重举办纪念南开大学建校100周年庆典
  14. k8s 配置存储之 Configmap secret
  15. heaptargetutilization/heapmaxfree/heapminfree/heapstartsize/multiplier虚拟机参数的配置
  16. 西门子1200 plc与台达14ES plc之间modbus 通讯实战程序 西门子1200plc做主站,台达DVP plc做从站,进行数据交换
  17. idea连接mysql数据库下载驱动失败
  18. 自定义键盘KeyboardView如何添加点击音效
  19. HTML自动点名代码,js+html实现点名系统功能
  20. 常微分方程——非齐次线性微分方程与常数变易法

热门文章

  1. 计算机网络正掩码怎么计算器,计算机网络课设子网掩码计算器.doc
  2. 华为网络篇 传输文件-08
  3. 功能强大的NAS云存储
  4. 信用卡分期年化利率计算方法
  5. 《App后台开发运维和架构实践》勘误
  6. 微讲师录课软件下载、录屏软件下载
  7. matlab arma 仿真,基于Matlab的ARMA模型时间序列分析法仿真
  8. 浅谈SSM框架原理及使用
  9. pandas-综合练习
  10. RG Magic Bullet