点灯之路之TM1668驱动

TM1668 是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路。本产品性能优良,质量可靠。主要应用于VCR。

芯片介绍 

我使用的是天微电子的TM1668芯片。 

管脚定义

管脚功能:

注意 :DIO口输出数据时为N管开漏输出,在读键的时候需要外接1K-10K的上拉电阻。本公司推荐10K的上拉电阻。DIO在时钟的下降沿控制N管的动作,此时读数时不稳定,你可以参考图(6),在时钟的上升沿读数才时稳定。

 

 芯片工作模式以及功能

显示寄存器地址和模式

 

 

 

 数据传输格式

串行地址通信

当使用串行地址时会有两种工作模式:地址自动加一模式 &固定地址模式

 

 

本人使用驱动电路以及代码

电路图

笔者使用共阴极接法,来驱动7位十段LED。

 代码

.c

#include "TM1668.h"
#include "bsp.h"


char TAB[10]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};  //共阴数码管无显示字型码

void TM1668_GPIO_Init(void)
{					     
	
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT ;  					 //推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
}

/***************发送8bit数据,从低位开始**************/
void send_8bit(char dat)	 //发送8位数据,从低位开始
{
  char i;
  for(i=0;i<8;i++)
  {	
  	CLK_L;
    if(dat&0x01) 
	   DIO_H;
	else         
	   DIO_L;
	 Delay_3us();
	 Delay_3us();
	 Delay_3us();
	CLK_H;	 
	dat>>=1;	 
  }
  CLK_L;
  DIO_L;
}
/******************发送控制命令***********************/
void send_command(char com)  //发送命令字节
{
 STB_H;						  //STB置高
  Delay_3us();
 STB_L;						  //STB置低
 send_8bit(com);			          //发送8bit数据
}

/************显示函数,数码管1~7位显示0~6************/
void display(char *p)   //显示函数,1~7位数码管显示0~6
{
 char i;
	char databuf[16];
  for(i=0;i<16;i++)
  {
     databuf[i]=LedData[p[i]];
  }
	
 send_command(0x03); 	//设置显示模式,7位10段模式
 send_command(0x40);	//设置数据命令,采用地址自动加1模式
 send_command(0xc0);	//设置显示地址,从00H开始

 for(i=0;i<7;i++)
 {
  // send_8bit(*p);	    //从00H开始,偶数地址送显示数据
   send_8bit(databuf[i]);
	 send_8bit(databuf[i+8]);
	 //send_8bit(0x00);	    //因为SEG9-14未用到,所以奇数地址送全0
   p++;
  }
  send_command(0x88);	    //设置显示命令,打开显示并设置占空比14/16.
  STB_L;
}

.h 

#ifndef __TM1688_H
#define __TM1688_H
#include "stm32f0xx.h"
/****
//gpio需要自己定义一下
*****/
#define     TSCK_HIGH                  T_CLK_ON()
#define     TSCK_LOW                   T_CLK_OFF()

#define     TDIN_HIGH                  T_DIN_ON()
#define     TDIN_LOW                   T_DIN_OFF()

#define     TSTB1_HIGH                 T_STB_ON()
#define     TSTB1_LOW                  T_STB_OFF()

#define  	CLK_H			T_CLK_ON()
#define	 	CLK_L			T_CLK_OFF()

#define  	STB_H			T_STB_ON()
#define  	STB_L			T_STB_OFF()

#define		DIO_H			T_DIN_ON()
#define 	DIO_L			T_DIN_OFF()

/*******************************************************************************
                                显示模式命令设置
*******************************************************************************/
#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     */

 

 .main

#include <tm1668.h>
int main()
{
intdata = "1234"
int data_num[10];


data_num[0] = data/1000;
																							data_num[1] = data/100%10;
																							data_num[2] = data/10%10;
																							data_num[3] = data%10;
																							display(data_num);

while(1);



}

至此可以点亮led断码电路并且显示“1234”

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值