STM32F103学习笔记(5)——数码管驱动TM1650使用
一、简介
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.c、board_i2c.h、board_tm1650.c 、 board_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使用相关推荐
- ⑥ESP8266 开发学习笔记_By_GYC 【ESP8266 驱动 OLED屏幕】
⑥ESP8266 开发学习笔记_By_GYC [ESP8266 驱动 OLED屏幕] 目录 ⑥ESP8266 开发学习笔记_By_GYC [ESP8266 驱动 OLED屏幕] 适用范围 user_c ...
- STM32F103学习笔记四 时钟系统
STM32F103学习笔记四 时钟系统 本文简述了自己学习时钟系统的一些框架,参照风水月 1. 单片机中时钟系统的理解 1.1 概述 时钟是单片机的脉搏,是单片机的驱动源 用任何一个外设都必须打开相应 ...
- STM32F103学习笔记(2)——收音机模块TEA5767使用
一.简介 TEA5767是由菲利普公司推出的一款低功耗立体声收音机接收器芯片.频率范围从76-108MHz自动数字调谐.高灵敏度,高稳定性,低噪音,收音模块.一片低功耗电调谐调频立体声收音机电路,其内 ...
- Windows驱动开发学习笔记(二)—— 驱动调试内核编程基础
Windows驱动开发学习笔记(二)-- 驱动调试&内核编程基础 基础知识 驱动调试 PDB(Program Debug Database) WinDbg 加载 PDB 实验:调试 .sys ...
- Kinect+OpenNI学习笔记之13(Kinect驱动类,OpenCV显示类和手部预分割类的设计)
前言 为了减小以后项目的开发效率,本次实验将OpenNI底层驱动Kinect,OpenCV初步处理OpenNI获得的原始数据,以及手势识别中的分割(因为本系统最后是开发手势识别的)这3个部分的功能单独 ...
- ⑦ ESP8266 开发学习笔记_By_GYC 【ESP8266 驱动 DHT11 温湿度传感器】
目录 一.准备材料 二.硬件连接 三.软件编程 1.修改工程名 2.添加组件 3.编程 4.反馈结果 5.核心代码 四.总结 ⑦ ESP8266 开发学习笔记_By_GYC [ESP8266 驱动 D ...
- ② ESP8266 开发学习笔记_By_GYC 【ESP8266 驱动 ws2812 三原色灯(spi方式 稳定灯光)】
目录 ② ESP8266 开发学习笔记_By_GYC [ESP8266 驱动 ws2812 三原色灯(spi方式 稳定灯光)] 一.驱动ws2812遇到的问题 二.可能的方案 三.具体实现 四.测试程 ...
- AC620FPGA学习笔记——BCD数码管
AC620FPGA学习笔记--BCD数码管 BCD数码管 硬件结构 整体框架 BCDDisplay模块 device_74hc595模块 代码部分 device_74hc595 BCDdecoder ...
- STM32F103学习笔记(3.0)——中断
目录 中断定义 中断常见使用情景 1.外部中断EXTI 2.外设中断 优先级 1.优先级的规则: 2.中断向量表: NVIC 1.NVIC框图 2.配置NVIC代码 中断定义 中断装置和中断处理程序统 ...
最新文章
- 源码编译安装mysql,DDL数据定义语言的使用。
- SQL之inner join/left join/right join
- MySQL的日志管理
- springbot集成finereport后在web中使用iframe引用报表
- Java构造函数可以私有,我们可以在Java中使用私有的构造函数吗?
- springboot 找不到mapper问题
- 史上最全的ASP.NET MVC路由配置,以后RouteConfig再弄不懂神仙都难救你啦~
- 老板亲戚来公司实习,差点把公司的Tomcat搞崩了,就因为不会部署Java服务
- 第11章 樱花树(《C和C++游戏趣味编程》配套教学视频)
- Oracle RAC Failover机制分析
- 各厂商服务器存储默认管理口登录信息(默认IP、用户名、密码)收集
- yytextview 复制_Swift iOS : YYText显示微博@文字的方法
- phpstudy开机自启
- 在vue中修改数组某个元素,值变了,渲染不了
- 第二课 MC9S08DZ60之多功能时钟发生器S08MCGV1
- 系统清理维护与安全防护软件
- tensorflowpython32_Python tensorflow.python.framework.dtypes 模块,float32() 实例源码 - 编程字典...
- abaqus各种文件说明
- 使用Spring Boot + Resilience 4j实现断路器
- 计算机逻辑函数,逻辑函数