這個數碼管模塊有意思的地方不是中間有兩個小點,而是它的控制方式:只需要兩個引腳就能夠控制,通信方式與IIC很像。
TM1637的通信比IIC要簡單些,可以作為IIC入門的學習,還是有一定幫助的。
模塊簡介
先說明一下,TM1637是天微電子的一款驅動芯片,數碼管是普通的共陽數碼管,模塊是連接了驅動芯片和數碼管的板子,模塊的功能不完全代表芯片的功能。
相比于直接使用數碼管,這一模塊有這些優點:
- 占用的IO少,只需要2個IO口就能控制;
- 驅動芯片帶有顯存,不需要占用資源做動態顯示;
- 不需要寫PWM程序,可以直接調節數碼管的亮度;
- 價格不高,兩塊多一個,淘寶到處都有賣(誤)。
此外,TM1637還有按鍵掃描功能,可以接8*2bit的矩陣鍵盤,可惜這模塊并沒有引出相應的引腳。
相比于IIC的通信方式,TM1637沒有設備地址,直接發送數據,且傳輸數據時是按從低位到高位的順序。
通信內容
簡單介紹完畢,因為這模塊只有數碼管顯示功能,下面就只以控制數碼管顯示為例,說說怎么玩這個模塊。
TM1637芯片引腳圖
TM1637的數據指令只有3種,以最高兩位比特位B7、B6進行區別:
一個完整數據指令包含四個部分(按傳輸順序排列):
- 開始命令
- 數據指令
- 應答信號
- 結束命令
1、開始與結束命令
當CLK在高電平時,DIO從高變為低為開始命令,從低變為高為結束命令。
除了開始與結束命令外,在傳輸其他數據時DIO都不能在CLK為高電平時發生變化,否則會影響數據的傳輸。
如果在指令或數據傳輸時發送了結束命令,那么當前傳輸的指令或數據無效(之前傳輸的會保留),通信會被初始化。
2、應答信號
當傳輸數據正確時,TM1637會在第八個時鐘的下降沿,產生一個應答信號ACK將DIO拉低,在第九個時鐘結束之后釋放DIO。
翻譯一下就是,每過了8個時鐘,在第9個時鐘DIO會變為低電平,第10個時鐘才可以開始發送下一部分數據。
判斷應答信號可以知道數據是否正確傳輸:先將DIO置高電平,若DIO不被拉低,則數據沒有正確傳輸。
3、數據指令
數據指令有三種:數據命令設置、地址命令與顯示數據、顯示控制。
- 數據命令設置:設置TM1637的通信模式與通信方式。
- 顯示控制命令設置:設置數碼管的亮度。
- 地址命令設置:對數碼管進行段選和位選。
說明:為了配合數據手冊的時序圖,下面按1→3→2的順序講,這一順序不會對實際效果產生影響。
3.1、數據命令設置
數據命令設置包含三部分:數據讀寫模式設置、地址增加模式設置、測試模式設置。
在控制數碼管時,數據讀寫模式設置、測試模式設置都是固定的,地址增加模式設置可以根據情況進行調整:
自動地址增加模式:
在設置了地址后,每傳輸完一個顯示數據,地址會自動加一,當出現結束命令時停止。
舉例:該模式下,假設進行位選選中第二個數碼管后發送段選數據,當段選數據完成后,位選會自動選中第三個數碼管。
固定地址模式:
在設置了地址后,后面只有一個顯示數據,之后發送結束命令。
舉例:該模式下,對每位數碼管發送段選數據后位選不會自動加一,只能控制一位數碼管;若需要控制多位,在發送完一次段選數據后需要再發送下一位數碼管的位選數據。
3.2、地址命令設置
這一步開始就是真正的數碼管控制了,和直接控制數碼管的步驟一樣,TM1637先處理地址命令(位選),隨后處理顯示數據(段選)。
位選:
該模塊一共有4位共陽數碼管(芯片最多能控制6個),地址從00H到03H,中間的小點由第二位數碼管的小數點控制
段選:
顯示數據一共8個比特位,從低位到高位對應著數碼管的8個段(就是段選,一樣一樣的),需要注意數碼管共陽與共陰的數據是相反的。
例如,需要控制第2位數碼管顯示數字2,需要發送以下數據(以固定地址模式為例):
- 【灰色】發送開始命令;
- 【紅色】發送地址命令(進行位選)0xC1(1100 0001);
- 【綠色】TM1637產生ACK應答;
- 【藍色】發送顯示數據(進行段選)0x5B(0101 1011,共陽數碼管顯示數字2);
- 【綠色】TM1637產生ACK應答;
- 【黃色】發送結束命令。
3.3、顯示命令設置
TM1637可以調節8級占空比:
需要注意,B3控制顯示的開關,只有為1時數碼管才會進行顯示。
編程流程
下面結合一個例子,說說TM1637的通信流程。
假設需要控制第一位數碼管顯示2,第二位數碼管顯示3,模式為固定地址模式,亮度為最大亮度。
大致流程:
- 發送設置數據;
- 發送數碼管顯示數據;
- 發送亮度數據。
第一步:發送設置數據
- 發送開始命令;
- 進行數據命令設置,發送0x44(0100 0100);
- TM1637產生ACK應答;
- 發送結束命令;
第二步:發送數碼管顯示數據
(和上面那個例子一樣,看過上面的這里跳過就行了)
- *發送開始命令;
* - 發送地址命令(進行位選)0xC0(1100 0000);
- *TM1637產生ACK應答;
* - 發送顯示數據(進行段選)0x5B(0101 1011,共陽數碼管顯示2);
- TM1637產生ACK應答;
- 發送結束命令。
- *發送開始命令;
* - 發送地址命令(進行位選)0xC1(1100 0001);
- *TM1637產生ACK應答;
* - 發送顯示數據(進行段選)0x4F(0100 1111,共陽數碼管顯示3);
- TM1637產生ACK應答;
- 發送結束命令。
第三步:發送亮度數據
- *發送開始命令;
* - 進行顯示控制,發送0x8F(1000 1111);
- TM1637產生ACK應答;
- 發送結束命令。
這里就完成了數碼管的顯示控制,流程不多,也比較簡單。
再進一步,可以寫一下計數程序:
前面提到過,TM1637有顯存功能,當不對其進行控制時,會一直顯示之前顯示的數據。
假設之前顯示的是1234,然后按上面的例子只對第一、第二位數碼管發送了數據,那么顯示的的就是2334。
如果不能正常顯示,可以檢查一下是否沒設置亮度,以及數據傳輸是否按照要求。
這里推薦一個小東西:邏輯分析儀,20多元的、像U盤的那種就夠了,這東西在我之前舵機的那篇文章中出現過,但它正真的作用是分析通信的時序,在檢查數據傳輸時非常有用。
最后
兜兜轉轉最后還是在玩燈哈哈
像上面說的,這芯片的通信方式與IIC類似,正在學習IIC的同學可以嘗試一下玩玩這個。
這里只是簡單講了下這一芯片的控制,要想了解這塊芯片的更多玩法可以去看官方的數據手冊。
-
數碼管
+關注
關注
32文章
1882瀏覽量
91067 -
ACK
+關注
關注
0文章
28瀏覽量
11144 -
CLK
+關注
關注
0文章
127瀏覽量
17158 -
TM1637
+關注
關注
0文章
21瀏覽量
9430 -
IIC通信
+關注
關注
0文章
19瀏覽量
3007
發布評論請先 登錄
相關推薦
評論