LED驱动芯片TM1668驱动代码

在这里插入图片描述
TM1668.c

#include "TM1668.h"
#include <intrins.h>       /* 声明void _nop_(void); */

static void Delay(unsigned char n)
{
	unsigned char i = 0;
	for (i = 0; i < n; i++)
	{
		_nop_();	
	}
}

/*
    开始传输数据
*/
void TM1668_Start(void)
{
	GPIO_CLK  = 1;
    GPIO_DIO  = 1;
    GPIO_STB  = 0;
	Delay(1);
}

/*
    结束传输数据
*/
void TM1668_End(void)
{
	GPIO_CLK  = 1;
    GPIO_DIO  = 1;
    GPIO_STB  = 1;
	Delay(1);
}

/*
    向1688写入一个数据。(写一个bit时需要在时钟的上升沿操作)
*/
void TM1668_WriteByte(unsigned char byte)
{
	unsigned char i = 0;

	for(i=0; i<8; i++)
	{
		GPIO_CLK = 0;
		Delay(1);
		GPIO_DIO = (byte&0x01);
		Delay(1);
		GPIO_CLK = 1;
		Delay(1);
		byte>>=1;
		Delay(1);
	}
}


/*
	地址增加模式写入n个字节数据,从SRAM起始地址开始写
	p:写的数据首地址		nBytes:写入数据个数(<=14)		brightness:显示亮度
 */
void TM1668_WriteBytesAddrIncrease(unsigned char *p, unsigned char nBytes, unsigned char brightness)
{
	unsigned char i = 0;

	TM1668_Start();
	TM1668_WriteByte(GRID7_SEG10);				/* 设置显示模式:7位10段 */
	TM1668_End();

	TM1668_Start();
	TM1668_WriteByte(CMD_DataWriteIncrease);	/* 设置数据命令:地址自增 */
	TM1668_End();

	TM1668_Start();
	TM1668_WriteByte(ADD_00H);					/* 设置显示地址:起始地址 */
	for (i = 0; i < nBytes; i++)
	{
		TM1668_WriteByte(p[i]);
	}
	TM1668_End();

	TM1668_Start();
	TM1668_WriteByte(brightness);				/* 显示控制命令:亮度调节 */
	TM1668_End();
}

/*
	地址固定模式写入n个字节数据,从SRAM起始地址开始写
	p:写的数据首地址		nBytes:写入数据个数(<=14)		brightness:显示亮度
 */
void TM1668_WriteBytesAddrFixed(unsigned char *p, unsigned char nBytes, unsigned char brightness)
{
	unsigned char i = 0;

	TM1668_Start();
	TM1668_WriteByte(GRID7_SEG10);				/* 设置显示模式:7位10段 */
	TM1668_End();

	TM1668_Start();
	TM1668_WriteByte(CMD_DataWriteFixed);		/* 设置数据命令:地址固定 */
	TM1668_End();

	for (i = 0; i < nBytes; i++)
	{
		TM1668_Start();
		TM1668_WriteByte(ADD_00H + i);			/* 设置显示地址:起始地址 */
		TM1668_WriteByte(p[i]);
		TM1668_End();
	}

	TM1668_Start();
	TM1668_WriteByte(brightness);				/* 显示控制命令:亮度调节 */
	TM1668_End();
}

/*
    初始化,1668内部显示寄存器清零,防止出现乱码,并关闭显示
*/
void TM1668_Init(void)
{
	unsigned char i = 0;

	TM1668_Start();
	TM1668_WriteByte(GRID7_SEG10);				/* 设置显示模式:7位10段 */
	TM1668_End();

	TM1668_Start();
	TM1668_WriteByte(CMD_DataWriteIncrease);	/* 设置数据命令:地址自增 */
	TM1668_End();

	TM1668_Start();
	TM1668_WriteByte(ADD_00H);					/* 设置显示地址:起始地址 */
	for (i = 0; i < 14; i++)
	{
		TM1668_WriteByte(0);
	}
	TM1668_End();

	TM1668_Start();
	TM1668_WriteByte(DSP_OFF);				    /* 显示控制命令:亮度调节 */
	TM1668_End();
}

TM1668.h

#ifndef _TM1668_H
#define _TM1668_H
/*******************************************************************************
                                用户配置区                                
*******************************************************************************/
#include "SC92F846xB_C.h"   /* 根据MCU平台配置 */

#define GPIO_DIO    P51     /* 数据输入输出    */
#define GPIO_CLK    P50     /* 时钟输入        */
#define GPIO_STB    P00     /* 片选输入        */

/*******************************************************************************
                                显示模式命令设置
*******************************************************************************/
#define GRID4_SEG13 0x00    /* 4位13段 */
#define GRID5_SEG12 0x01    /* 5位12段 */
#define GRID6_SEG11 0x02    /* 6位11段 */
#define GRID7_SEG10 0x03    /* 7位10段 */

/*******************************************************************************
                                数据命令设置
*******************************************************************************/
#define CMD_DataWriteIncrease   0x40    /* 地址自增写数据 */
#define CMD_DataWriteFixed      0x44    /* 固定地址写数据 */


/*******************************************************************************
                                显示控制命令设置
*******************************************************************************/
#define DSP_01_16   0x88    /* 设置脉冲宽度为1/16  */
#define DSP_02_16   0x89    /* 设置脉冲宽度为2/16  */
#define DSP_04_16   0x8A    /* 设置脉冲宽度为4/16  */
#define DSP_10_16   0x8B    /* 设置脉冲宽度为10/16 */
#define DSP_11_16   0x8C    /* 设置脉冲宽度为11/16 */
#define DSP_12_16   0x8D    /* 设置脉冲宽度为12/16 */
#define DSP_13_16   0x8E    /* 设置脉冲宽度为13/16 */
#define DSP_14_16   0x8F    /* 设置脉冲宽度为14/16 */
#define DSP_OFF     0x80    /* 显示关 */

/*******************************************************************************
                                地址命令设置
*******************************************************************************/
#define ADD_00H     0xC0    /* 显示地址: GRID1     */
#define ADD_01H     0xC1    /* 显示地址: GRID1     */
#define ADD_02H     0xC2    /* 显示地址: GRID2     */
#define ADD_03H     0xC3    /* 显示地址: GRID2     */
#define ADD_04H     0xC4    /* 显示地址: GRID3     */
#define ADD_05H     0xC5    /* 显示地址: GRID3     */
#define ADD_06H     0xC6    /* 显示地址: GRID4     */
#define ADD_07H     0xC7    /* 显示地址: GRID4     */
#define ADD_08H     0xC8    /* 显示地址: GRID5     */
#define ADD_09H     0xC9    /* 显示地址: GRID5     */
#define ADD_0AH     0xCA    /* 显示地址: GRID6     */
#define ADD_0BH     0xCB    /* 显示地址: GRID6     */
#define ADD_0CH     0xCC    /* 显示地址: GRID7     */
#define ADD_0DH     0xCD    /* 显示地址: GRID7     */


void TM1668_WriteBytesAddrIncrease(unsigned char *p, unsigned char nBytes, unsigned char brightness);
void TM1668_WriteBytesAddrFixed(unsigned char *p, unsigned char nBytes, unsigned char brightness);
void TM1668_Init(void);

#endif


  • 13
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值