STM32F103學(xué)習(xí)筆記(5)——數(shù)碼管驅(qū)動(dòng)TM1650使用

一珍坊、簡(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.cboard_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 日

? 參考:STM32F030驅(qū)動(dòng)TM1650點(diǎn)亮4聯(lián)數(shù)碼管

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末朴译,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子属铁,更是在濱河造成了極大的恐慌眠寿,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件焦蘑,死亡現(xiàn)場(chǎng)離奇詭異盯拱,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)例嘱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)坟乾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蝶防,你說(shuō)我怎么就攤上這事∶鞣裕” “怎么了间学?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)印荔。 經(jīng)常有香客問(wèn)我低葫,道長(zhǎng),這世上最難降的妖魔是什么仍律? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任嘿悬,我火速辦了婚禮,結(jié)果婚禮上水泉,老公的妹妹穿的比我還像新娘善涨。我一直安慰自己,他們只是感情好草则,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布钢拧。 她就那樣靜靜地躺著,像睡著了一般炕横。 火紅的嫁衣襯著肌膚如雪源内。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,842評(píng)論 1 290
  • 那天份殿,我揣著相機(jī)與錄音膜钓,去河邊找鬼。 笑死卿嘲,一個(gè)胖子當(dāng)著我的面吹牛颂斜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播腔寡,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼焚鲜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起忿磅,我...
    開(kāi)封第一講書(shū)人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤糯彬,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后葱她,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體撩扒,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年吨些,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了搓谆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡豪墅,死狀恐怖泉手,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情偶器,我是刑警寧澤斩萌,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站屏轰,受9級(jí)特大地震影響颊郎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜霎苗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一姆吭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧唁盏,春花似錦内狸、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至驴党,卻和暖如春瘪撇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背港庄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工倔既, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鹏氧。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓渤涌,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親把还。 傳聞我的和親對(duì)象是個(gè)殘疾皇子实蓬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349