介绍:这里只是使用TM1616来进行LED灯的控制,没有对按键进行读取使用
一、硬件
硬件电路使用同数据手册所给的经典电路一样,使用的是四位七段,这个芯片好像只有这一个选项
主要控制引脚为DIN:数据线、CLK:时钟线、STB:片选线。需要注意的是如果只给STB线拉低不再拉高则不能正常使用。
二、软件
对单片机使用平台没有限制,首先初始化所使用的引脚
void TM1616_Init(void)
{
P00F = OUTPUT; //CLK 默认高电平,发送数据时高低震荡
P00 = 1;
P01F = OUTPUT; //DIN 默认为高电平,低电平导通
P01 = 1;
P02F = OUTPUT; //STB 默认为高电平,低电平导通
P02 = 1;
}
为方面后续移植对所使用GPIO进行宏定义
#define TM1616_CLK_HIGH P00 = 1 //时钟线拉高
#define TM1616_CLK_LOW P00 = 0 //时钟线拉低
#define TM1616_DIN_HIGH P01 = 1 //数据线拉高
#define TM1616_DIN_LOW P01 = 0 //数据线拉低
#define TM1616_STB_HIGH P02 = 1 //片选线拉高
#define TM1616_STB_LOW P02 = 0 //片选线拉低
完成之后需要编写单个字节发送程序
void TM1616_Write_Byte(unsigned char writeByte)
{
unsigned char i;
TM1616_STB_LOW;
_nop_();
_nop_();
for( i = 0; i < 8; i++){
TM1616_CLK_LOW;
_nop_();
_nop_();
if(writeByte & 0x01){
TM1616_DIN_HIGH;
}else{
TM1616_DIN_LOW;
}
_nop_();
_nop_();
TM1616_CLK_HIGH;
_nop_();
writeByte = writeByte >> 1;
}
}
单个字节程序写完之后再来写整个数据包的发送,这里使用固定地址发送,即每次都自己按照数据地址去写
void TM1616_Show(unsigned char showData1,unsigned char showData2,unsigned char showData3,unsigned char showData4)
{
unsigned char i = 0;
TM1616_Write_Byte(0x00); //显示模式设置,设置为4个GRID,7个SEG
TM1616_STB_HIGH; //显示模式设置完毕,STB置1
TM1616_Write_Byte(0x44); //数据命令设置,设置普通模式、固定地址、写数据到显示寄存器
TM1616_STB_HIGH; //数据命令设置完毕,STB置1
TM1616_Write_Byte(0xC0); //设置显示地址1
TM1616_Write_Byte(showData1);//传输显示数据1
TM1616_STB_HIGH; //传输地址、数据1完毕,STB置1
TM1616_Write_Byte(0xC2); //设置显示地址2
TM1616_Write_Byte(showData2);//传输显示数据2
TM1616_STB_HIGH; //传输地址、数据2完毕,STB置1
TM1616_Write_Byte(0xC4); //设置显示地址3
TM1616_Write_Byte(showData3);//传输显示数据3
TM1616_STB_HIGH; //传输地址、数据3完毕,STB置1
TM1616_Write_Byte(0xC6); //设置显示地址4
TM1616_Write_Byte(showData4);//传输显示数据4
TM1616_STB_HIGH; //传输地址、数据4完毕,STB置1
TM1616_Write_Byte(0x8f); //控制命令设置,设置显示开、显示最亮
TM1616_STB_HIGH; //控制命令设置完毕,STB置1
}
这样调用的使用只需要调用 “TM1616_Show”函数即可直接去设置LED的某个灯的亮灭