TM1620 led显示芯片用stm8来驱动

       最近做一个项目需要驱动led屏幕,选取了tm1620来作为驱动芯片,原厂提供的代码有些问题,不能直接用,自己做了一些修改,使芯片可以正常的驱动

原理图如下

TM1620 led显示芯片用stm8来驱动_第1张图片

最终调试完成的协议为

TM1620 led显示芯片用stm8来驱动_第2张图片

具体的代码为

.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);//根据按键值,给显示寄存器送相应的显示数据
}

最终显示的效果为,将断码屏全部点亮

TM1620 led显示芯片用stm8来驱动_第3张图片

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

TM1620 led显示芯片用stm8来驱动_第4张图片

TM1620 led显示芯片用stm8来驱动_第5张图片

你可能感兴趣的:(stm8)