一、简介

TM1650 是一种带键盘扫描接口的 LED(发光二极管显示器)驱动控制专用电路。内部集成有 MCU 输入输出控制数字接口、数据锁存器、LED 驱动、键盘扫描、辉度调节等电路。TM1650 性能稳定、质量可靠、抗干扰能力强,可适用于 24 小时长期连续工作的应用场合。

  • 两种显示模式:8段×4位和7段×4位
  • 段驱动电流大于25mA,位驱动电流大于150mA
  • 提供8级亮度控制
  • 键盘扫描:7×4bit内部集成三极管驱动
  • 高速两线式串行接口
  • 内置时钟振荡电路
  • 内置上电复位电路
  • 支持2.8V-5.5V电源电压
  • 提供DIP16及SOP16封装

二、硬件连接

功能口 引脚
SCL PB.6
SDA PB.5

三、添加I2C驱动

查看 STM32F103学习笔记(1)——FreeRTOS下模拟I2C

四、移植文件

注意:以下出现缺失common.h文件错误,去除即可。uint8改为uint8_t或unsigned char或自己宏定义
链接:https://pan.baidu.com/s/1p0n8_7ynqQ7d5EqgODwKMA 提取码:47gn
board_i2c.cboard_i2c.hboard_tm1650.cboard_tm1650.h 四个文件加入到工程

4.1 board_tm1650.c

/********************************************************************** INCLUDES*/
#include "stdlib.h"
#include "stm32f10x.h"#include "board_i2c.h"
#include "board_tm1650.h"
#include "common.h"/********************************************************************** LOCAL VARIABLES*/
static uint8 s_7number[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};   // 7段显示方式0~9
static uint8 s_8number[10] = {0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF};   // 8段显示方式0~9/********************************************************************** PUBLIC FUNCTIONS*/
/**@brief 写显存@param addr -[in] 写入地址@param data -[in] 写入数据@return 无
*/
void TM1650_Write(uint8 addr, uint8 data)
{          IIC2_Start();                                                       // 发送起始信号IIC2_SendByte(addr);                                                // 写地址IIC2_WaitAck();                                                     // 等待应答IIC2_SendByte(data);                                                // 写入数据IIC2_Ack();                                                         // 发送应答IIC2_Stop();                                                        // 发送停止信号
}/**@brief 显示设置@param brightness -[in] 亮度1~8级@param mode -[in] 7/8段显示方式@param state -[in] 开启/关闭显示@return 无
*/
void TM1650_SetDisplay(uint8 brightness, uint8 mode, uint8 state)
{       if(state){if(mode == 7)                                                   // 7段显示方式{TM1650_Write(0x48, brightness*16 + 1*4 + 1);}else if(mode == 8)                                               // 8段显示方式{TM1650_Write(0x48, brightness*16 + 1);                      }}else{TM1650_Write(0x48, 0x00);                                       // 关闭显示}
}/**@brief 显示数字@param index -[in] 第几个数@param mode -[in] 7/8段显示方式@param num -[in] 显示数@return 无
*/
void TM1650_SetNumber(uint8 index, uint8 mode, uint8 num)
{uint8 indexAddr = 0;uint8 numValue = 0;if(index == 1){indexAddr = 0x68;}else if(index == 2){indexAddr = 0x6A;}else if(index == 3){indexAddr = 0x6C;}else if(index == 4){indexAddr = 0x6E;}if(mode == 7)                                                    // 7段显示方式{numValue = s_7number[num];}else if(mode == 8)                                                  // 8段显示方式{numValue = s_8number[num];                      }TM1650_Write(indexAddr, numValue);
}

4.2 board_tm1650.h

#ifndef _BOARD_TM1650_H_
#define _BOARD_TM1650_H_/********************************************************************** INCLUDES*/
#include "stm32f10x.h"#include "common.h"/********************************************************************** DEFINITIONS*//********************************************************************** API FUNCTIONS*/
void TM1650_Write(uint8 addr, uint8 data);
void TM1650_SetDisplay(uint8 brightness, uint8 mode, uint8 state);
void TM1650_SetNumber(uint8 index, uint8 mode, uint8 num);#endif /* _BOARD_TM1650_H_ */

五、API调用

需包含头文件 board_tm1650.h

TM1650_Write

功能 写显存
函数定义 void TM1650_Write(uint8 addr, uint8 data)
参数 addr:写入地址
data:写入数据
返回

TM1650_SetDisplay

功能 显示设置
函数定义 void TM1650_SetDisplay(uint8 brightness, uint8 mode, uint8 state)
参数 brightness:写入地址
mode:7/8段显示方式
state:开启/关闭显示
返回

TM1650_SetNumber

功能 显示数字
函数定义 void TM1650_SetNumber(uint8 index, uint8 mode, uint8 num)
参数 index:第几个数
mode:7/8段显示方式
num:显示数
返回

六、使用例子

6.1 显示104.3

uint8_t i2cDevice = IIC_CheckDevice(0x48);            // 初始化I2C,并检测是否有设备
if(!i2cDevice)
{printf("---- TM1650 OK ----\r\n");
}
else
{printf("---- TM1650 ERROR ----\r\n");
} TM1650_SetDisplay(3, 8, 1);
TM1650_SetNumber(1, 7, 1);
TM1650_SetNumber(2, 7, 0);
TM1650_SetNumber(3, 8, 4);
TM1650_SetNumber(4, 7, 3);

• 由 Leung 写于 2020 年 7 月 24 日

• 参考:STM32F030驱动TM1650点亮4联数码管

STM32F103学习笔记(5)——数码管驱动TM1650使用相关推荐

  1. ⑥ESP8266 开发学习笔记_By_GYC 【ESP8266 驱动 OLED屏幕】

    ⑥ESP8266 开发学习笔记_By_GYC [ESP8266 驱动 OLED屏幕] 目录 ⑥ESP8266 开发学习笔记_By_GYC [ESP8266 驱动 OLED屏幕] 适用范围 user_c ...

  2. STM32F103学习笔记四 时钟系统

    STM32F103学习笔记四 时钟系统 本文简述了自己学习时钟系统的一些框架,参照风水月 1. 单片机中时钟系统的理解 1.1 概述 时钟是单片机的脉搏,是单片机的驱动源 用任何一个外设都必须打开相应 ...

  3. STM32F103学习笔记(2)——收音机模块TEA5767使用

    一.简介 TEA5767是由菲利普公司推出的一款低功耗立体声收音机接收器芯片.频率范围从76-108MHz自动数字调谐.高灵敏度,高稳定性,低噪音,收音模块.一片低功耗电调谐调频立体声收音机电路,其内 ...

  4. Windows驱动开发学习笔记(二)—— 驱动调试内核编程基础

    Windows驱动开发学习笔记(二)-- 驱动调试&内核编程基础 基础知识 驱动调试 PDB(Program Debug Database) WinDbg 加载 PDB 实验:调试 .sys ...

  5. Kinect+OpenNI学习笔记之13(Kinect驱动类,OpenCV显示类和手部预分割类的设计)

    前言 为了减小以后项目的开发效率,本次实验将OpenNI底层驱动Kinect,OpenCV初步处理OpenNI获得的原始数据,以及手势识别中的分割(因为本系统最后是开发手势识别的)这3个部分的功能单独 ...

  6. ⑦ ESP8266 开发学习笔记_By_GYC 【ESP8266 驱动 DHT11 温湿度传感器】

    目录 一.准备材料 二.硬件连接 三.软件编程 1.修改工程名 2.添加组件 3.编程 4.反馈结果 5.核心代码 四.总结 ⑦ ESP8266 开发学习笔记_By_GYC [ESP8266 驱动 D ...

  7. ② ESP8266 开发学习笔记_By_GYC 【ESP8266 驱动 ws2812 三原色灯(spi方式 稳定灯光)】

    目录 ② ESP8266 开发学习笔记_By_GYC [ESP8266 驱动 ws2812 三原色灯(spi方式 稳定灯光)] 一.驱动ws2812遇到的问题 二.可能的方案 三.具体实现 四.测试程 ...

  8. AC620FPGA学习笔记——BCD数码管

    AC620FPGA学习笔记--BCD数码管 BCD数码管 硬件结构 整体框架 BCDDisplay模块 device_74hc595模块 代码部分 device_74hc595 BCDdecoder ...

  9. STM32F103学习笔记(3.0)——中断

    目录 中断定义 中断常见使用情景 1.外部中断EXTI 2.外设中断 优先级 1.优先级的规则: 2.中断向量表: NVIC 1.NVIC框图 2.配置NVIC代码 中断定义 中断装置和中断处理程序统 ...

最新文章

  1. 源码编译安装mysql,DDL数据定义语言的使用。
  2. SQL之inner join/left join/right join
  3. MySQL的日志管理
  4. springbot集成finereport后在web中使用iframe引用报表
  5. Java构造函数可以私有,我们可以在Java中使用私有的构造函数吗?
  6. springboot 找不到mapper问题
  7. 史上最全的ASP.NET MVC路由配置,以后RouteConfig再弄不懂神仙都难救你啦~
  8. 老板亲戚来公司实习,差点把公司的Tomcat搞崩了,就因为不会部署Java服务
  9. 第11章 樱花树(《C和C++游戏趣味编程》配套教学视频)
  10. Oracle RAC Failover机制分析
  11. 各厂商服务器存储默认管理口登录信息(默认IP、用户名、密码)收集
  12. yytextview 复制_Swift iOS : YYText显示微博@文字的方法
  13. phpstudy开机自启
  14. 在vue中修改数组某个元素,值变了,渲染不了
  15. 第二课 MC9S08DZ60之多功能时钟发生器S08MCGV1
  16. 系统清理维护与安全防护软件
  17. tensorflowpython32_Python tensorflow.python.framework.dtypes 模块,float32() 实例源码 - 编程字典...
  18. abaqus各种文件说明
  19. 使用Spring Boot + Resilience 4j实现断路器
  20. 计算机逻辑函数,逻辑函数

热门文章

  1. MySQL - 21查询分析器EXPLAIN
  2. html打开网页过场动画_网页制作设计基础知识
  3. kindeditor 自定义上传图片
  4. UDP Socket接收缓冲区与netstat Recv-Q
  5. 上确界和下确界的存在
  6. 三相桥式全控整流电路simulink仿真_可控硅整流器
  7. 一矢多穿:多目标排序在爱奇艺短视频推荐中的应用
  8. 用python-rtmidi捕获MIDI键盘的输入,并回放MIDI消息
  9. kindeditor自定义添加网络视频插件,修改批量图片上传方式flash为h5
  10. WuThreat身份安全云-TVD每日漏洞情报-2023-02-07