TM1640的驅動及代碼
驅動TM 1640 其實并不困難,我們只需注意1640通訊時的電平變化,及資料傳輸規律首先我們可以看到1640的資料手冊,(完整代碼點擊文章末分享鏈接,自行查找)

注意資料的輸入條件和結束條件,輸入條件是CLK 為高電平時,DIN由低變高,我們以傳統51單片機為例,寫出TM1640的輸入開始函式;
void TM1640_start ()
{
CLK = 0; //CLK=0,DIN= 0增加代碼可靠性
DIN = 1;
CLK = 1;
delay_ms(5); //5毫秒延時
DIN = 0;
delay_ms (5);
CLK = 0;
delay_ms (5);
}
同樣的結束條件是CLK 為高時DIN電平由低變高,寫出它的結束函式;
void TM1640_stop ()
{
CLK = 0; //CLK=0,DIN=0防止傳輸的最后以為資料于結束指令沖突
DIN = 0;
CLK = 1;
delay_ms (5);
DIN = 1;
delay_ms (5);
}
我們可以看見TM1640其實并不是真正意義上的總線通訊,它只是通過兩個IO口的電平變化來實作控制;TM1640是將一個八位資料拆分為單個資料進行單個傳輸進行傳輸8次,完成一個資料的傳輸,注意傳輸時的電平變化;寫出其資料傳輸函式;
void send_byte (uint num)
{
uint q;
for (q= 8;q>0;q--)
{
CLK = 0;
if (num&0x01)
{
DIN = 1;
delay_ms (5);
}
else
{
DIN = 0;
delay_ms(5);
}
CLK = 1;
num = num>>1;
}
delay_um (5);
}
對于傳輸函式我們還有很多種寫法,就不在這里過多贅述了,
在此以下的代碼都以自動加地址為例,TM1640默認地址自加模式,

因其默認為自加模式,所以可不寫模式選擇函式,但為了大家更好的理解,就寫在下方;
可以從第一張圖中發現,要TM1640正常顯示數碼管,資料傳輸是有順序要求的,
1,設定資料(我們一般只用 自加模式0x40,固定地址模式0x44)
其函式為;
void model (uint k)
{
if (k)
{
TM1640_start ();
send_byte (0x40);//自動加一
TM640_stop ();
}
else
{
TM1640_start ();
send_byte (0x44);//固定地址
TM1640_stop ();
}
2,設定地址,地址有16位,分別對應16位數碼管,從上圖可以看見地址位從0xc0~0xcf;地址傳輸并不需要特定函式進行,可用 send_byte ( ) 進行,
例如;
TM1640_start();
send_byte (0xc0);
3,設定傳輸資料,有十六位,每個資料是相互連續的,中間不需要使用 stop()函式打斷;要知道的是16位數碼管是回圈顯示的,就像單片機資料的左移,右移一樣
void wite_date () //地址自動加一模式
{
TM1640_start ();
send_byte (0xc0); //輸入首地址
send_byte (num_display[0]); //輸入個數碼管的顯示資料1~16;
send_byte (num_display[1]);
send_byte (num_display[2]);
send_byte (num_display[3]);
send_byte (num_display[4]);
send_byte (num_display[5]);
send_byte (num_display[6]);
send_byte (num_display[7]);
send_byte (num_display[8]);
send_byte (num_display[9]);
send_byte (num_display[10]);
send_byte (num_display[11]);
send_byte (num_display[12]);
send_byte (num_display[13]);
send_byte (num_display[14]);
send_byte (num_display[15]);
TM1640_stop ();
}
寫這么長是為了后期便以更改每一數碼管的數值,讀者可以進行簡練,
4,顯示控制,其實就是數碼管亮度調節,脈沖寬度越小亮度越高

void led_display (uint f)
{
start ();
send_byte (f);
stop ();
}
對于固定地址模式于地址自動加一模式大致相差不大,但要注意的是固定地址模式同時發生完地址和資料后要用 stop () 函式停止 ,star ()函式開始后在進行下一位地址和資料的傳輸,
對于TM1640就大致講解到這里,如有疑問可在后方留言,
鏈接:https://pan.baidu.com/s/1ru7SMuWvpc9qvbdrxXw5zg
提取碼:1640
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/231066.html
標籤:其他
上一篇:Zynq程式固化到FLASH和SD卡(Zedboard)
下一篇:Pythagorea
