使用TM1629A芯片驅動米字數碼管


本文地址:https://www.cnblogs.com/jqdy/p/14262485.html

    米字數碼管可以顯示數字和26個英文字母,應用范圍比8字數碼管更廣泛一些。

    市面上常見的米字數碼管有三種,一種是15段的,另一種是16段,還有一種是17段的。TM1629A可以驅動15和16段的數碼管。

 

 一、TM1629A主要參數

  • 共陰數碼管:16 段 × 8 位
  • 共陽數碼管:8 段 × 16 位
  • 8級輝度調節
  • 串行接口(CLK,STB,DIO)
  • 邏輯電源電壓范圍:-0.5~7.0V
  • 正常工作電壓電壓:5.0V

  手冊在天微官網上有,百度一下也很多。

二、電路設計

  手冊給出了兩個驅動8位數碼管的電路,並未給出驅動米字數碼管的電路。參照這兩個電路設計了驅動15位紅色米字管的電路。

  經過試驗,電源電壓完全可以使用3.3V,亮度非常高,甚至曾燒壞過一個筆畫,也不知是不是數碼管的質量問題。

 

 三、驅動程序

  該芯片有3個控制線,分別是:

  • DIO:數據輸入線
  • CLK:時鍾輸入線
  • STB:片選線

  需要注意的是,TM1629A的CLK的時鍾周期較慢(大於500ns),要根據MCU的頻率測試一下,如果不能滿足要求,要加入適當的延時。

  特別需要注意的是時序圖中的tCLK-STB和PWSTB,都要求最小1us。

  最好的辦法是在DIO、CLK、STB變化的前后都插入足夠長時間的延時,整個調通后再優化時間。

3.1 初始化工作

  首先進行初始化工作,主要是定義功能腳的工作模式。

 1 /****************************************************
 2 *說明:初始化TM1629A
 3 *備注:io.h中定義了 STB P3^2,CLK P3^3,DIO P5^5
 4 ****************************************************/
 5 void TM1629A_Init(void)
 6 {
 7     /*GPIO初始化,均為開漏輸出*/
 8     SET_BIT(P3M1, 2); //宏功能:令P3M1的BIT2=1  9     SET_BIT(P3M0, 2);
10     SET_BIT(P3M1, 3);
11     SET_BIT(P3M0, 3);
12     SET_BIT(P5M1, 5);
13     SET_BIT(P5M0, 5);
14     /*STB、CLK賦初值*/
15     STB = 1;
16     CLK = 1;
17 }

3.2 基本的寫入函數

  實際工作頻率設定的是5.5296MHz。

#include <stc8g.h>
#include <intrins.h>
sbit STB
= P3^2; sbit CLK = P3^3; sbit DIO = P5^5; /**************************************************** *說明:TM1629A寫操作驅動函數 ****************************************************/ void wrt(unsigned char dt) { unsigned char i = 8; do{ CLK = 0; dt >>= 1; DIO = CY; CLK = 1;
_nop_();
_nop_(); }
while(--i); }

3.3 顯示函數

 1 /****************************************************
 2 *說明:顯示每個數碼管的內容
 3 *參數:ch為指向顯示信息的第一個地址指針
 4 *     bright為亮度,取值范圍0~7,越大越亮
 5 *備注:參考手冊中”地址增加模式“的信息,以及時序圖
 6 *1. 提供的字符串長度要與實際數碼管位數一致
 7 *2. ch指針指向連續幾個地址內容為123456,在數碼管上顯示為654321
8 ****************************************************/ 9 void TM1629A_Display(unsigned char *ch, unsigned char brightness) 10 { 11 unsigned char tem; 12 STB = 0; 13 wrt(COMMAND_WRITE_DDRM_AND_ADDRESS_INCREASE); // 寫顯存命令,地址自動加1 14 STB = 1; 15 delay1us();//STB選通脈沖寬度大於1us 16 STB = 0; 17 wrt(COMMAND_ADDRESS); // 設置顯示地址命令 18 do{ 19 tem = *ch; 20 if(tem >= '0' && tem <= '9') //為數字 21 { 22 tem -= '0'; 23 tem += tem; //15段碼一個字符占用兩個字節 24 wrt(number[tem]); //將數字轉化成數組位置 25 wrt(number[tem + 1]); //這是第二個字節 26 continue; 27 } 28 else if(tem >= 'A' && tem <= 'Z') //為大寫字母 29 { 30 tem -= 'A'; 31 tem += tem; 32 wrt(charactor[tem]); //將大寫字母轉化成數組位置 33 wrt(charactor[tem + 1]); 34 continue; 35 } 36 else if(tem >= 'a' && tem <= 'z') //為小寫字母 37 { 38 tem -= 'a'; 39 tem += tem; 40 wrt(charactor[tem]); //將小寫字母轉化成數組位置 41 wrt(charactor[tem + 1]); 42 continue; 43 } 44 }while(*(++ch) != 0); 45 STB = 1; 46 delay1us(); 47 STB = 0; 48 wrt(COMMAND_DISPLAY_ON | brightness); 49 STB = 1; 50 }

  STC8G工作在5.5296MHz時,延時函數delay1us()僅為一個空函數。

/****************************************************
*說明:5.5296MHz時延時1us
****************************************************/
static void delay1us(void)
{
}

3.4 用到的宏及字模

 1 unsigned char code number[] = 
 2 {
 3     0x3f, 0x00, 0x06, 0x00, 0xdb, 0x00, 0xcf, 0x00, 0xe6, 0x00, 
 4     0xed, 0x00, 0xfd, 0x00, 0x07, 0x00, 0xff, 0x00, 0xef, 0x00 
 5 }; //0~9,每個數字占連續兩個字節
 6 unsigned char code charactor[] =
 7 {
 8     0xf7, 0x00, 0xfc, 0x00, 0x39, 0x00, 0x0f, 0x12, 0xf9, 0x00, 0xf1, 0x00, 0xbd, 0x00, 
 9     0xf6, 0x00, 0x09, 0x12, 0x1e, 0x00, 0x70, 0x0c, 0x38, 0x00, 0x36, 0x15, 0x36, 0x09, 
10     0xdc, 0x00, 0xf3, 0x00, 0x3f, 0x08, 0xf3, 0x08, 0x8d, 0x02, 0x01, 0x12, 0x3e, 0x00, 
11     0x30, 0x24, 0x36, 0x2a, 0x00, 0x2d, 0x00, 0x15, 0x09, 0x24 
12 }; //a~z,每個字母占連續兩個字節
13 
14 #define COMMAND_WRITE_DDRM_AND_ADDRESS_INCREASE    0x40
15 #define COMMAND_WRITE_DDRM_AND_ADDRESS_KEEPED      0x44
16 #define COMMAND_DISPLAY_ON                         0x88
17 #define COMMAND_DISPLAY_OFF                        0x80
18 #define COMMAND_ADDRESS                            0xC0 //地址從00H~0FH共16個

 3.5 實際效果

  TM1629A電源電壓=3.3V,亮度級別等於0。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM