一珍坊、簡(jiǎn)介
TM1650 是一種帶鍵盤(pán)掃描接口的 LED(發(fā)光二極管顯示器)驅(qū)動(dòng)控制專用電路红符。內(nèi)部集成有 MCU 輸入輸出控制數(shù)字接口、數(shù)據(jù)鎖存器拴测、LED 驅(qū)動(dòng)乓旗、鍵盤(pán)掃描、輝度調(diào)節(jié)等電路集索。TM1650 性能穩(wěn)定屿愚、質(zhì)量可靠、抗干擾能力強(qiáng)务荆,可適用于 24 小時(shí)長(zhǎng)期連續(xù)工作的應(yīng)用場(chǎng)合妆距。
- 兩種顯示模式:8段×4位和7段×4位
- 段驅(qū)動(dòng)電流大于25mA,位驅(qū)動(dòng)電流大于150mA
- 提供8級(jí)亮度控制
- 鍵盤(pán)掃描:7×4bit內(nèi)部集成三極管驅(qū)動(dòng)
- 高速兩線式串行接口
- 內(nèi)置時(shí)鐘振蕩電路
- 內(nèi)置上電復(fù)位電路
- 支持2.8V-5.5V電源電壓
- 提供DIP16及SOP16封裝
二函匕、硬件連接
功能口 | 引腳 |
---|---|
SCL | PB.6 |
SDA | PB.5 |
三娱据、添加I2C驅(qū)動(dòng)
查看 STM32F103學(xué)習(xí)筆記(1)——FreeRTOS下模擬I2C
四、移植文件
注意:以下出現(xiàn)缺失common.h文件錯(cuò)誤盅惜,去除即可中剩。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 四個(gè)文件加入到工程
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 寫(xiě)顯存
@param addr -[in] 寫(xiě)入地址
@param data -[in] 寫(xiě)入數(shù)據(jù)
@return 無(wú)
*/
void TM1650_Write(uint8 addr, uint8 data)
{
IIC2_Start(); // 發(fā)送起始信號(hào)
IIC2_SendByte(addr); // 寫(xiě)地址
IIC2_WaitAck(); // 等待應(yīng)答
IIC2_SendByte(data); // 寫(xiě)入數(shù)據(jù)
IIC2_Ack(); // 發(fā)送應(yīng)答
IIC2_Stop(); // 發(fā)送停止信號(hào)
}
/**
@brief 顯示設(shè)置
@param brightness -[in] 亮度1~8級(jí)
@param mode -[in] 7/8段顯示方式
@param state -[in] 開(kāi)啟/關(guān)閉顯示
@return 無(wú)
*/
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); // 關(guān)閉顯示
}
}
/**
@brief 顯示數(shù)字
@param index -[in] 第幾個(gè)數(shù)
@param mode -[in] 7/8段顯示方式
@param num -[in] 顯示數(shù)
@return 無(wú)
*/
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調(diào)用
需包含頭文件 board_tm1650.h
TM1650_Write
功能 | 寫(xiě)顯存 |
---|---|
函數(shù)定義 | void TM1650_Write(uint8 addr, uint8 data) |
參數(shù) | addr:寫(xiě)入地址 data:寫(xiě)入數(shù)據(jù) |
返回 | 無(wú) |
TM1650_SetDisplay
功能 | 顯示設(shè)置 |
---|---|
函數(shù)定義 | void TM1650_SetDisplay(uint8 brightness, uint8 mode, uint8 state) |
參數(shù) | brightness:寫(xiě)入地址 mode:7/8段顯示方式 state:開(kāi)啟/關(guān)閉顯示 |
返回 | 無(wú) |
TM1650_SetNumber
功能 | 顯示數(shù)字 |
---|---|
函數(shù)定義 | void TM1650_SetNumber(uint8 index, uint8 mode, uint8 num) |
參數(shù) | index:第幾個(gè)數(shù) mode:7/8段顯示方式 num:顯示數(shù) |
返回 | 無(wú) |
六屈芜、使用例子
6.1 顯示104.3
uint8_t i2cDevice = IIC_CheckDevice(0x48); // 初始化I2C郊愧,并檢測(cè)是否有設(shè)備
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 寫(xiě)于 2020 年 7 月 24 日