TM1640的驱动和代码驱动TM1640实际上并不难。 1640请注意通信时电平的变化和数据传输的规律。 首先可以看到1640的数据手册。 (完整的代码请点击文章末尾的共享链接,自己查找。 )
请注意数据的输入条件和结束条件。 输入条件为CLK为高电平时,DIN从低变为高。 以传统的51单片机为例,写出TM1640的输入起始函数。 void TM1640_start ()
{
CLK=0; //CLK=0,DIN=0提高代码可靠性的DIN=1; CLK=1; dlay_ms(5; //5毫秒延迟DIN=0; dlay_ms(5; CLK=0; dlay_ms(5; () ) ) ) )。
同样结束条件是在CLK为高时DIN电平从低变为高,写入其结束函数;
void TM1640_stop ()
{
CLK=0; //CLK=0,DIN=0防止在传输的最后认为数据在结束命令中冲突而导致DIN=0; CLK=1; dlay_ms(5; DIN=1; dlay_ms(5; () ) ) ) )。
可以看到,TM1640实际上并不是真正的总线通信,而是由两个IO端口的电平变化控制的。TM1640将一个8位数据分割成一个数据,在一个传输过程中传输8次,完成一个数据的传输,在传输时达到一定的水平写那个数据传输函数
voidsend_byte(uintnum ) )。
{
uint q;
for(q=8; q0; q--}{clk=0; if(num0x01 ) {DIN=1; dlay_ms(5; }else {DIN=0; dlay_ms(5; }CLK=1; num=num1; }Delay_um(5; () ) ) ) )。
传递函数有很多种写法,在此不多赘述。
以下代码以自动地址加法为例。 TM1640的默认地址相加模式是,
其默认为自加模式,可以不写模式选择函数,但为了更好地理解,写如下:
从第一张图中可以看到,TM1640需要数据传输顺序才能正常显示数码管。
1、设定数据(我们通常只使用自加模式0x40、固定地址模式0x44 ) )。
其函数是:
语音模型(uintk )。
{
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 )设置传输数据。 有16位,各数据相互连续。 中途不需要使用stop ) )函数中断。 需要知道的是,16位数码管是循环显示的,就像单片机数据左移,右移
voidwite_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 )显示控制实际上是数码管亮度调节,脉冲宽度越小亮度越高
voidled_display(uintf ) )。
{
start (; send_byte(f ); 停止(; () ) ) ) )。
关于固定地址模式,和地址自动加法模式没有很大的区别,但是在固定地址模式中,地址和数据同时发生后,在stop )函数中停止,star ) )函数开始后,注意进行下一个位地址和数据的传输。
关于TM1640已经大致说明到此为止了,如果有疑问的话请在后方留言。
链接: https://pan.Baidu.com/s/1 qgtduhqlakgttnllr6ukiw
抽屉代码: 1234