TM1620驱动

一、参考资料

DS通过立创商城可以找到
https://item.szlcsc.com/20288.html?c=4SG

二、流程

这里只说 地址增加模式
1、先发显示模式
2、设置数据命令
3、设置地址
4、连续发12个数据
5、发控制命令(设置亮度)
在这里插入图片描述

三、实际操作

我这里一共2个数码管,共阴
连的是GRID1 GRID2 ,也就是位选1 和 位选2 ,地址从00H开始,也就是0XC0
其实只要是用连续模式,最好是从设置的起始地址,往最后0BH全部写完为止
在这里插入图片描述

这里可以看出来,如果我们用8段,基本上发送一个数据,后面就跟一个0X00就行
例如6位全部发,就按照下面顺序发
G1数据 00
G2数据 00
G3数据 00
G4数据 00
G5数据 00
G6数据 00

一共12字节

在这里插入图片描述

在这里插入图片描述

char CODE[10]={0x3F,0x06,0x5b,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};  //共阴数码管

#define AddrAutoAdd		0x40//写显示,自动累加地址 

#define Addr00H  			0xC0//地址00H

#define ModeDisTM1620  0x02
 

static void App_UserKeyInit(void)
{
 //   stc_gpio_cfg_t stcGpioCfg;
    
    ///< 打开GPIO外设时钟门控
    //Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
    
    ///< 端口方向配置->输入
  //  stcGpioCfg.enDir = GpioDirIn;
    ///< 端口驱动能力配置->高驱动能力
 //   stcGpioCfg.enDrv = GpioDrvL;
    ///< 端口上下拉配置->无
 //   stcGpioCfg.enPu = GpioPuDisable;
 //   stcGpioCfg.enPd = GpioPdDisable;
    ///< 端口开漏输出配置->开漏输出关闭
 //   stcGpioCfg.enOD = GpioOdDisable;
    ///< 端口输入/输出值寄存器总线控制模式配置->AHB
  //  stcGpioCfg.enCtrlMode = GpioAHB;
    ///< GPIO IO USER KEY初始化
 //   Gpio_Init(EVB_KEY1_PORT, EVB_KEY1_PIN, &stcGpioCfg); 
}

 void TM1620Sendata(char TM1620Data)
{
	char i;
	
	
	for(i =0;i<8;i++)
	{
		  Gpio_ClrIO(GpioPortB, TM1620_CLK_Pin);  //CLK低
			if(TM1620Data & 0x01)
			{
				 Gpio_SetIO(GpioPortB, TM1620_DIN_Pin);  //DIO高
			}
			else
			{
				 Gpio_ClrIO(GpioPortB, TM1620_DIN_Pin);  //DIO低
			}
			// delay1ms(1);
			 //delay1ms(1);
			 //delay1ms(1);
		   Gpio_SetIO(GpioPortB, TM1620_CLK_Pin);  //CLK高
			 TM1620Data >>=1;
	}
	Gpio_ClrIO(GpioPortB, TM1620_CLK_Pin);  //CLK低
	
	Gpio_ClrIO(GpioPortB, TM1620_DIN_Pin);  //DIO低
}
 
 void TM1620Sencmd(char com)
 {
	 Gpio_SetIO(TM1620_Port, TM1620_STB_Pin);  //高
	 //delay1ms(1);
	 Gpio_ClrIO(TM1620_Port, TM1620_STB_Pin);  // 
	 TM1620Sendata(com);
 }
 


void  TM1620_Dis(const char *p,const char *p2)
{
    uint8_t i;
	 TM1620Sencmd(0x02); 	//设置显示模式,6位8段模式
	 TM1620Sencmd(AddrAutoAdd);	//设置数据命令,采用地址自动加1模式 0X40
   //TM1620Sencmd(0x14); //固定地址
     TM1620Sencmd(Addr00H);  //设置地址从00H开始

    TM1620Sendata(*p);	//从00H开始,偶数地址送显示数据
    TM1620Sendata(0x00);	//01H

    TM1620Sendata(*p2);	   //02H
    TM1620Sendata(0x00);	//03H
    
    //其他数据直接给0了 上面发了4个,下面发8个
    for(i = 0 ;i < 8;i++)
    {
        TM1620Sendata(0x00);
    }


    
   TM1620Sencmd(0x8F);	 //设置显示命令,打开显示并设置占空比14/16.
   Gpio_SetIO(TM1620_Port, TM1620_STB_Pin);  //高
		 
}
void TM1620_Init(void)
{

		stc_gpio_cfg_t stcGpioCfg;
		stcGpioCfg.enDir = GpioDirOut;
 
        stcGpioCfg.enPu = 1;
	  Gpio_Init(TM1620_Port,TM1620_CLK_Pin,&stcGpioCfg);  //TM1620 CLK
		Gpio_SetIO(TM1620_Port, TM1620_CLK_Pin);  //高
		
	 	Gpio_Init(TM1620_Port,TM1620_STB_Pin, &stcGpioCfg);   //TM1620 STB
		Gpio_SetIO(TM1620_Port, TM1620_STB_Pin);  //高
    
		Gpio_Init(TM1620_Port,TM1620_DIN_Pin,&stcGpioCfg);   //TM1620 DIN
		Gpio_SetIO(TM1620_Port, TM1620_DIN_Pin);  //高
}

//显示 一个 3位数据到2位数码管,去掉最低位
TM1620_Dis(&CODE[num/100],&CODE[num%100/10]);
		 
}
TM1620驱动程序是一种专门用于控制TM1620芯片的软件程序TM1620芯片是一种高度集成的控制器,用于驱动数码管显示。驱动程序的主要功能是通过与TM1620芯片的相互通信,将特定的数据发送给芯片,以控制数码管的显示内容。 TM1620驱动程序通常由开发人员编写,并在嵌入式系统或其他相应的硬件平台上运行。该驱动程序需要用到TM1620芯片的相关注册信息和控制指令,以确保数码管能够正确显示所需的数据。 在编写TM1620驱动程序时,开发人员需要了解TM1620芯片的工作原理和功能,以便正确地配置芯片和执行相应的控制操作。驱动程序一般涉及到以下几个方面的功能: 1. 初始化:驱动程序在初始化时需要对TM1620芯片进行相应的配置,例如设置显示亮度、清除数码管的内容等。 2. 数据传输:驱动程序通过与TM1620芯片的通信接口进行数据传输,将需要显示的数据发送给芯片。这些数据可以是数字、字母、符号等。 3. 显示控制:驱动程序可以通过控制命令来控制数码管的显示方式,例如设置数码管为静态显示还是闪烁显示。 4. 错误处理:驱动程序需要相应的错误处理机制,以处理在与TM1620芯片通信时可能出现的错误情况,确保数码管能够正常显示。 总的来说,TM1620驱动程序是一种使得开发人员能够轻松控制TM1620芯片并实现数码管显示功能的软件程序。通过合理编写程序,可以灵活控制数码管的显示效果,实现各种不同的应用需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值