TM1616LED驱动程序

介绍:这里只是使用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的某个灯的亮灭

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值