TM1620 led显示芯片用stm8来驱动
最近做一个项目需要驱动led屏幕,选取了tm1620来作为驱动芯片,原厂提供的代码有些问题,不能直接用,自己做了一些修改,使芯片可以正常的驱动原理图如下最终调试完成的协议为具体的代码为.h文件为/********************************************************************************...
·
最近做一个项目需要驱动led屏幕,选取了tm1620来作为驱动芯片,原厂提供的代码有些问题,不能直接用,自己做了一些修改,使芯片可以正常的驱动
原理图如下

最终调试完成的协议为

具体的代码为
.h文件为
/********************************************************************************
文件名称: TM1620.h
作者 : Love My BaoBaoGao
版本 : V1.0
修改日期: 2019.9.4
简要说明: TM1620驱动程序
******************************************************************************
注意:
*******************************************************************************/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __HT1621_H
#define __HT1621_H
/* Includes ------------------------------------------------------------------*/
#include "Bsp_Head_File.h"
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */
#define HT1620_CS_PIN GPIO_PIN_4
#define HT1620_CLK_PIN GPIO_PIN_7
#define HT1620_DAT_PIN GPIO_PIN_2
#define HT1620_CS_PORT GPIOD
#define HT1620_CLK_PORT GPIOD
#define HT1620_DAT_PORT GPIOA
#define CS_W_1() GPIO_WriteHigh(HT1620_CS_PORT, HT1620_CS_PIN)
#define CS_W_0() GPIO_WriteLow(HT1620_CS_PORT, HT1620_CS_PIN)
#define CLK_W_1() GPIO_WriteHigh(HT1620_CLK_PORT, HT1620_CLK_PIN)//写1
#define CLK_W_0() GPIO_WriteLow(HT1620_CLK_PORT, HT1620_CLK_PIN)//写0
#define DATA_W_1() GPIO_WriteHigh(HT1620_DAT_PORT, HT1620_DAT_PIN)//写1
#define DATA_W_0() GPIO_WriteLow(HT1620_DAT_PORT, HT1620_DAT_PIN)//写0
#define DATA_ReadBit() GPIO_ReadInputPin(GPIO_DHT21_PORT,GPIO_DHT21_PIN) //读DQ上
#define DATA_Read() GPIO_Init(GPIO_DHT21_PORT,GPIO_DHT21_PIN,GPIO_MODE_IN_FL_NO_IT) //浮动输入不带中断功能;
void TM1620_Gpio_Init(void);
void Led_Display(u8* data);
#endif /* __HT1621_H */
/******************* (C) COPYRIGHT Simcotech *****END OF FILE****/
.c文件为
/********************************************************************************
文件名称: TM1620.c
作者 : Love My BaoBaoGao
版本 : V1.0
修改日期: 2019.9.4
简要说明: TM1620驱动程序
******************************************************************************
注意:
*******************************************************************************/
#include "main.h"
#define uchar unsigned char
#define uint unsigned int
u8 show[12] = { 0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00};//初始化显示“HELLO”字符代码
uchar show_LED2[14];//显示寄存器数组
/******************************************************************************
函数名称:void TM1620_Gpio_Init(void)
功 能: 初始化led驱动引脚
参 数:无
返回值 : 无
作者 : Love My BaoBaoGao
修改时间: 2018.12.15
******************************************************************************/
void TM1620_Gpio_Init(void)
{
GPIO_Init(HT1620_CS_PORT,HT1620_CS_PIN,GPIO_MODE_OUT_PP_HIGH_FAST);
GPIO_Init(HT1620_CLK_PORT,HT1620_CLK_PIN,GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(HT1620_DAT_PORT,HT1620_DAT_PIN,GPIO_MODE_OUT_PP_LOW_FAST);
}
/******************************************************************************
函数名称:void Write_Byte(uchar wr_data)
功 能: 写入字节数据
参 数:无
返回值 : 无
作者 : Love My BaoBaoGao
修改时间: 2018.12.15
******************************************************************************/
void Write_Byte(uchar wr_data)
{
uchar i;
CLK_W_1();
nop();
nop();
CS_W_0(); //给有效的片选信号(片选信号是低电平有效)
nop();
nop();
for(i=0;i<8;i++)//开始传送8位数据,每循环一次传送一位数据
{
CLK_W_0();
nop();
nop();
if(wr_data&0x01)
DATA_W_1();
else
DATA_W_0();
nop();
nop();
wr_data >>= 1;//移位数据,低位在前!
nop();
nop();
CLK_W_1();
nop();
nop();
nop();
}
}
/******************************************************************************
函数名称:void TM1620_Show(uchar show_led[14])
功 能: 芯片显示写入
参 数:无
返回值 : 无
作者 : Love My BaoBaoGao
修改时间: 2018.12.15
******************************************************************************/
void TM1620_Show(uchar show_led[14])
{
uchar h;
CS_W_1();
CLK_W_1();
DATA_W_1();
Write_Byte(0x02);//显示模式设置,设置为6个GRID,8个SEG
CS_W_1();
Write_Byte(0x40);//写数据到显示寄存器,采用地址自动加一
//CS_W_1();
//Write_Byte(0x86);//灰度调节
CS_W_1();
Write_Byte(0xc0);//显示寄存器的00H单元开始
for(h=0;h<12;h++)
{
Write_Byte(show_led[h]);//给显示寄存器送数据,
}
CS_W_1();
Write_Byte(0x8f);//显示控制参数,点亮数码屏幕,亮度可以通过改变低三位调节
}
/******************************************************************************
函数名称:void Led_Display(void)
功 能: 显示内容写入
参 数:无
返回值 : 无
作者 : Love My BaoBaoGao
修改时间: 2018.12.15
******************************************************************************/
void Led_Display(void)
{
CS_W_1();
DATA_W_1();
CLK_W_1();
TM1620_Show(show);//根据按键值,给显示寄存器送相应的显示数据
}
最终显示的效果为,将断码屏全部点亮

硬件上需要注意的一点是,不同颜色的灯正向压降不同,用电源直接点灯要注意电压的大小,不然容易导致数码管烧掉


更多推荐
所有评论(0)