模块简介
该模块所用芯片为TM1638,最大特点是只需占用单片机三个IO口即可驱动,扫描显示和按键扫描不需要单片机干预,只需要读写相关寄存器送显示数据或检测按键,节省MCU资源。
模块使用的是TM1638芯片的共阴极数码管驱动方案。
采用串行接口(CLK,STB,DIO)进行通讯。
模块测试
接线
将TM1638模块与51开发板连接,接线如下:
TM1638模块 | 51开发板 |
---|---|
5V | 5V |
GND | GND |
STB | P1.2 |
CLK | P1.1 |
DIO | P1.0 |
代码
由于模块使用的共阴极数码管,如果让该数码管显示“0”,那你需要在GRID1为低电平的时候让SEG1,SEG2,SEG3,SEG4,SEG5,SEG6为高电平,SEG7为低电平,(在运用中没有使
用到的SEG输出口,在对应的BIT地址位写0) 查看图中显示地址表格,只需在00H地址单元里面写数据3FH就可以让数码管显示“0”。
部分代码:
#include <REGX51.H>
#include <tm1638.h>
unsigned char num[8];
int main(void)
{
unsigned char i;
init_TM1638();
for(i=0;i<8;i++)
Write_DATA(i<<1,tab[0]);
while(1)
{
i=Read_key();
if(i<8)
{
num[i]++;
while(Read_key()==i);
if(num[i]>15)
num[i]=0;
Write_DATA(i*2,tab[num[i]]);
Write_allLED(1<<i);
}
}
}
测试现象
连接好上电烧录程序后,可以看到模块显示全为0,按下按键对应数码管数值加1,上面的灯也会对应变亮。
总结
TM1638有两种驱动数码管的方式,驱动共阴极和共阳极的驱动代码写法是完全不一样的,驱动共阴极的会相对比较简单。