TM1637四位數(shù)碼管模塊是一個帶時鐘點(diǎn)的4位共陽數(shù)碼管(0.36英寸)的顯示模塊,驅(qū)動芯片為TM1637,驅(qū)動方式為IIC,因此只需2根信號線即可使單片機(jī)控制4位8段數(shù)碼管(數(shù)碼管8級灰度可調(diào))。 控制接口:共4個引腳(GND、VCC、DIO、CLK),GND為地,VCC為供電電源,DIO為數(shù)據(jù)輸入輸出腳,CLK為時鐘信號腳。
TM1637.h單片機(jī)源程序如下:
- sbit CLK= P3^4; //定義模擬IIC總線的時鐘線
- sbit DIO = P3^5; //定義模擬IIC總線的數(shù)據(jù)線
-
- code unsigned char tab[] =
- {
- 0x3F,/*0*/
- 0x06,/*1*/
- 0x5B,/*2*/
- 0x4F,/*3*/
- 0x66,/*4*/
- 0x6D,/*5*/
- 0x7D,/*6*/
- 0x07,/*7*/
- 0x7F,/*8*/
- 0x6F,/*9*/
- 0x77,/*10 A*/
- 0x7C,/*11 b*/
- 0x58,/*12 c*/
- 0x5E,/*13 d*/
- 0x79,/*14 E*/
- 0x71,/*15 F*/
- 0x76,/*16 H*/
- 0x38,/*17 L*/
- 0x54,/*18 n*/
- 0x73,/*19 P*/
- 0x3E,/*20 U*/
- 0x00,/*21 黑屏*/
- };
-
- void Delay_us(unsigned int i)
- {
- for(;i>0;i--)
- _nop_();;
- }
- //IIC開始
- void TM1637_start(void)
- {
- CLK=1;
- DIO=1;
- Delay_us(2);
- DIO=0;
- }
- //IIC應(yīng)答
- void TM1637_ack(void)
- {
- uchar i;
- CLK=0;
- Delay_us(5);
- //DIO=1;
- while(DIO==1&&(i<250))i++;
- CLK=1;
- Delay_us(2);
- CLK=0;
- }
- //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);
- }
- //寫數(shù)據(jù)函數(shù)
- void TM1637_Write(unsigned char DATA)
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- CLK=0;
- if(DATA & 0x01)
- DIO=1;
- else DIO=0;
- Delay_us(3);
- DATA=DATA>>1;
- CLK=1;
- Delay_us(3);
- }
- //TM1637_ack();
- }
-
- //按順序顯示
- void TM1637_display(uchar a,uchar b,uchar c,uchar d,uchar h)
- {
- TM1637_start();
- TM1637_Write(0x40);//寫數(shù)據(jù)+自動地址加1+普通模式
- TM1637_ack();
- TM1637_stop();
- TM1637_start();
- TM1637_Write(0xc0);//設(shè)置顯示首地址即第一個LED
- TM1637_ack();
- TM1637_Write(tab[a]);
- TM1637_ack();
- TM1637_Write(tab[b]|h<<7);//h為1時顯示時鐘中間的兩點(diǎn)
- TM1637_ack();
- TM1637_Write(tab[c]);
- TM1637_ack();
- TM1637_Write(tab[d]);
- TM1637_ack();
- TM1637_stop();
- TM1637_start();
- TM1637_Write(0x89);//開顯示,2/16亮度
- TM1637_ack();
- TM1637_stop();
- }
復(fù)制代碼
|