TM1637四位數碼管模塊是一個帶時鐘點的4位共陽數碼管(0.36英寸)的顯示模塊,驅動芯片為TM1637,驅動方式為IIC,因此只需2根信號線即可使單片機控制4位8段數碼管(數碼管8級亮度可調)。
模塊特點如下:
顯示器件為4位共陽數碼管
數碼管8級亮度可調
控制接口電平可為5V或3.3V
IIC驅動,只需要占用兩個IO引腳即可實現驅動顯示功能
帶有時鐘點,應用于電子鐘顯示很方便
TM1637管腳定義

硬件連接
模塊共4個引腳(GND、VCC、DIO、CLK),GND為地,VCC為供電電源,DIO為數據輸入輸出腳,CLK為時鐘信號腳。
用4根母對母杜邦線將4位數碼管顯示模塊和STM32核心板連接起來,如下圖、下表所示:

四位數碼管 | 連接線 | STM32核心板 |
---|---|---|
CLK | 黃色 | PA3 |
DIO | 藍色 | PA2 |
VCC | 紅色 | 3.3V |
GND | 黑色 | GND |
IIC總線時序分析
因為TM1637是IIC總線驅動,所以驅動TM1637的總線時序需滿足IIC總線的規定。
下圖是指令數據傳輸過程(讀按鍵數據時序):

上面時序圖需要注意以下幾點:
IIC總線對數據的有效性要求:在輸入數據時,當CLK是高電平時,DIO上的信號必須保持不變;只有CLK上的時鐘信號為低電平時,DIO上的信號才能改變。
所以我們封裝的寫字節的函數,都是在CLK引腳為低電平的時候,修改DIO的數據;

數據輸入的開始條件是CLK為高電平時,DIO由高變低;

具體代碼實現如下:
//IIC開始
void TM1637_start(void)
{
CLK_1;
DIO_1;
delay_us(2);
DIO_0;
}
結束條件是CLK為高電平時,DIO由低電平變為高電平。

具體代碼實現如下:
//IIC停止
void TM1637_stop(void)
{
CLK_0;
delay_us(2);
DIO_0;
delay_us(2);
CLK_1;
delay_us(2);
DIO_1;
delay_us(2);
}
TM1637的數據傳輸帶有應答信號ACK,在傳輸數據的過程中,在時鐘線的第九個時鐘芯片內部會產生一個應答信號ACK將DIO管腳拉低。

寫命令的實現
根據上面實現的IIC 寫字節函數,實現下面地址自動加1模式下向SRAM寫數據,下圖中時序圖和代碼部分,顏色、形狀相同部分相互對應。

起始信號之后,由DIO輸入TM1637的第一個字節作為一條指令。經過內部譯碼,取這個字節的B7、B6兩位比特位以區別不同的指令。
B7 | B6 | 指令 |
---|---|---|
0 | 1 | 數據命令設置 |
1 | 0 | 顯示控制命令設置 |
1 | 1 | 地址命令設置 |
數據命令設置
該指令用來設置數據寫和讀,B1和B0位不允許設置01或11,有上面表格可以查到B7=0,B6=1。

比如:

0x40這個命令,就對應上表中第一行:寫數據到顯示寄存器。
地址命令設置

該指令用來設置顯示寄存器的地址,如果地址設為06H或更高,數據將被忽略,直到有效地址被設定;上電時,地址默認為00H。
比如:

0xC0這個就是地址命令,對應顯示地址00H,即第一個數碼管的地址,后面發送數據就可以給第一個數碼管設置顯示內容。
顯示控制

比如:

0x8F對應二進制1000 1111,B3=1代表開顯示,B2~B0的111代表脈沖寬度,即顯示亮度,通過表格可以得出0x8F代表最高亮度。
結果展示
這種數碼管可以顯示的內容有:0123456789AbcdEFHLnPU,下面視頻對這些內容進行了循環顯示。
資料獲取
微信公眾號后臺回復“四位數碼管”,可以下載本文對應的工程源碼。
