TM1621/HT1621 段码LCD驱动器

这篇具有很好参考价值的文章主要介绍了TM1621/HT1621 段码LCD驱动器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

TM1621和HT1621是兼容的,下面统称TM1621。

TM1621是一个32x4的LCD 驱动器,也就是说它最多能驱动128段段码。

四线串行接口
TM1621/HT1621 段码LCD驱动器

一般我们不使用读数据的功能,所以用到的数据引脚只有/WR、/CS、DATA
先定义使用到的引脚

#define CS_CLR	HAL_GPIO_WritePin(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_PIN_RESET)
#define	CS_SET	HAL_GPIO_WritePin(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_PIN_SET)

#define DATA_CLR	HAL_GPIO_WritePin(LCD_DATA_GPIO_Port, LCD_DATA_Pin, GPIO_PIN_RESET)
#define DATA_SET	HAL_GPIO_WritePin(LCD_DATA_GPIO_Port, LCD_DATA_Pin, GPIO_PIN_SET)

#define WR_CLR	HAL_GPIO_WritePin(LCD_WR_GPIO_Port, LCD_WR_Pin, GPIO_PIN_RESET)
#define WR_SET	HAL_GPIO_WritePin(LCD_WR_GPIO_Port, LCD_WR_Pin, GPIO_PIN_SET)

一些命令参数

#define HT1621B_BYTES  32
#define REG_NO_UPDATE  0
#define REG_UPDATE     1

#define HT1621B_BIAS_COM2 0 	//AB=00 可选2个公共口 
#define HT1621B_BIAS_COM3 1 	//AB=01 可选择3个公共口 
#define HT1621B_BIAS_COM4 2 	//AB=10 可选4个公共口

#define HT1621B_BIAS_AB   HT1621B_BIAS_COM4

#if VER_HARDWIRE == VER1
	#define HT1621B_BIAS_C    1 //C = 0 可选1/2偏压  C= 1 可选1/3偏压 (C=0 全显示 C=1 单显示)
#elif VER_HARDWIRE == VER2
	#define HT1621B_BIAS_C    1 //C = 0 可选1/2偏压  C= 1 可选1/3偏压 (C=0 全显示 C=1 单显示)
#endif

#define HT1621B_BIAS	(0x20|( HT1621B_BIAS_AB << 2 )|HT1621B_BIAS_C)		//BIAS   0010 ABXC X    

#define HT1621B_LCDOFF 0x02		//关闭LCD显示
#define HT1621B_LCDON  0x03		//打开LCD显示

#define HT1621B_SYSDIS 0x00		//关闭系统振荡器和 LCD 偏压发生器
#define HT1621B_SYSEN  0x01		//打开系统振荡器

#define READ             0x06
#define WRITE            0x05
#define READ_MODIFY_RITE 0x05
#define COMMAND          0x04

下图是手册中的写数据时序图
TM1621/HT1621 段码LCD驱动器
从以上时序同中我们可以看出写数据时,地址位是从高到底,数据位是从低到高

/*****************************************************************************
[函数名称]vSendHighBits
[函数功能]写入高位   一位一位的发送
[参    数]
[全局变量]无
[返 回 值]无
[备    注] 参考HT1621B 命令模式 时序图
*****************************************************************************/
void vSendHighBits(uint8_t u8Data,uint8_t u8Bit)
{
	uint8_t u8Index = 0;

	for(u8Index = 0;u8Index < u8Bit;u8Index++)
	{
		if((u8Data & 0x80) == 0){
			DATA_CLR;
		}
		else{
			DATA_SET;
		}
						
		WR_CLR;
		Delay(2);
		WR_SET;
		
		u8Data <<= 1;
	}
}
/*****************************************************************************
[函数名称]vSendLowBits
[函数功能]写入低位
[参    数]
[全局变量]无
[返 回 值]无
[备    注] 数据位
*****************************************************************************/
void vSendLowBits(uint8_t u8Data,uint8_t u8Bit)
{
	uint8_t u8Index = 0;

	for(u8Index = 0;u8Index < u8Bit;u8Index++)
	{
		if((u8Data & 0x01) == 0)
		{
			DATA_CLR;
		}
		else
		{
			DATA_SET;
		}
		WR_CLR;
		Delay(2);
		WR_SET;        
		u8Data >>= 1;
	}
}
/*****************************************************************************
[函数名称]vSendData
[函数功能]写模式 写数据到RAM中
[参    数]
[全局变量]无
[返 回 值]无
[备    注]
*****************************************************************************/
void vSendData(uint8_t u8Addr,uint8_t u8Data)
{
	CS_CLR; 
	vSendHighBits(WRITE<<5,3);		//发送一个101
	vSendHighBits(u8Addr<<2,6);		//发送6位的地址
	vSendLowBits(u8Data,4);			//发送4位的数据
	CS_SET;
}

实际应用中我们还是使用下面这个函数是驱动某一段液晶的驱动程序

/*****************************************************************************
[函数名称]vSetSeg
[函数功能]
[全局变量]无
[返 回 值]
[备    注] u8Addr seg地址   u8Bit com地址  bOn 置1或0 
*****************************************************************************/
void vSetSeg( uint8_t u8Addr,uint8_t u8Bit,uint8_t bOn )
{
	if(u8Addr < HT1621B_BYTES)
	{
		uint8_t u8Write = 0;
		
		u8Write = m_au8Value[u8Addr];
		
		if(bOn)		//数据写1或0
		{
			u8Write |= (0x01 << u8Bit);			//将该位置1
		}
		else
		{
			u8Write &= ~(0x01 << u8Bit);		//将该位置0
		}
		u8Write &= 0x0F;
		m_au8Value[u8Addr] = u8Write;

		vSendData(u8Addr,u8Write);		
	}
}
/*****************************************************************************
[函数名称]vClearScreen
[函数功能]
[全局变量]无
[返 回 值]
[备    注]
*****************************************************************************/
void vClearScreen( void )
{
	memset(&m_au8Value,0,HT1621B_BYTES);    
	for(uint8_t u8Addr = 0;u8Addr < HT1621B_BYTES;u8Addr++)
	{
		vSendData(u8Addr,0);
	}
}


/*****************************************************************************
[函数名称]vFillScreen
[函数功能]
[全局变量]无
[返 回 值]
[备    注]
*****************************************************************************/
void vFillScreen( void )
{
	memset(&m_au8Value,0x0F,HT1621B_BYTES);
	for(uint8_t u8Addr = 0;u8Addr < HT1621B_BYTES;u8Addr++)
	{
		vSendData(u8Addr,0x0F);
	}
}

命令模式时序图
TM1621/HT1621 段码LCD驱动器

/*****************************************************************************
[函数名称]vSendCommand   
[函数功能]命令模式
[参    数]
[全局变量]无
[返 回 值]无
[备    注]
*****************************************************************************/
void vSendCommand(uint8_t u8Command)
{
	CS_CLR;
	vSendHighBits(COMMAND << 5,3);		//发送一个100
	vSendHighBits(u8Command,9);				//发送 9位命令码
	CS_SET;
}

液晶驱动初始化代码文章来源地址https://www.toymoban.com/news/detail-508034.html

uint8_t vLcdInit( void )
{
	BACKLIGHT_ON;//打开背光
	CS_CLR;	
	CS_SET;
	CS_CLR;		//高电平脉冲初始化HT1621串行接口	
	// 初始化液晶参数
	vSendCommand(HT1621B_BIAS);			//偏压
	vSendCommand(HT1621B_SYSEN);		//打开系统振荡器
	vSendCommand(HT1621B_LCDOFF);		//关闭LCD显示
	vSendCommand(HT1621B_LCDON);		//打开LCD显示
	//检查一下段码屏	
	vFillScreen();  //全亮
	HAL_Delay(1000);	
	vClearScreen();//全灭 
	return 0;
}

到了这里,关于TM1621/HT1621 段码LCD驱动器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 伺服驱动器485通信

    伺服驱动器和上位机使用485通信,驱动电机运行调试成功案例分享。 调试步骤如下: 1:使用汇川伺服驱动器案例分享。首先看下伺服驱动器的485通信链接方法,使用两根线链接,485+ ,485-。厂家建议GND也要连接上,我试了一下,连接不连接都可以通信。![通信接线图]! 2.查看

    2024年02月07日
    浏览(137)
  • 电机应用-电机与驱动器简介

    目录 电机和驱动器 直流电机 有刷电机驱动器 无刷电机驱动器 步进电机 步进电机驱动器 伺服电机 伺服电机驱动器 舵机 电机是一种可以在电能和机械能间 相互转换 的设备。(发电机是将机械能转换为电能,电动机是将电能转换为机械能)。 主要有直流电机、步进电机、伺

    2024年02月06日
    浏览(63)
  • 【python】 安装浏览器驱动器

    使用Selenium模块需要安装浏览器驱动程序,不同的浏览器的驱动程序不一样,以Chrome为例,Chrome的驱动程序为ChromeDriver。 打开浏览器,打开设置 查看“关于 Chrome”,查看浏览器版本,记住浏览器版本, 然后打开http://chromedriver.storage.googleapis.com/index.html,找到最接近对应版本

    2024年02月12日
    浏览(51)
  • STM32F4驱动42步进电机(采用驱动器)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 stm32f407zgt6芯片,tb6600驱动器 植树机代码,可以驱动四路42步进电机,以下是只驱动1路。 : 红线接B+(TB6600), 蓝线接B-, 绿线接A-, 黑线接A+ 该图片是转载的。根据本文代码:Signal的-统一接开发板的GND(解

    2024年02月03日
    浏览(63)
  • elmo驱动器上位机的使用

    1.接线 2.连接和配置 3.调试 4.开机自运行 1.接线示意图 2. 连接和配置 (1)添加驱动器到工作空间。在工作空间右键,选择Add Gold Driver。 (2)新建驱动器(Driver03)如图所示,前面两个为之前新建过的。 (3)在Driver03里,选择目标连接方式,选择Direct Access USB(直接使用US

    2023年04月16日
    浏览(46)
  • 网络驱动器设备:ISCSI服务器

    主机名 IP ISCSI服务端 192.168.200.10 ISCSI客户端 192.168.200.20 Windows客户端 192.168.200.30 iSCSI(Internet Small Computer System Interface)是一种将SCSI(Small Computer System Interface)存储协议运行在TCP/IP网络上的技术。它通过使用IP网络来传输SCSI命令和数据,并将存储设备的逻辑单元(LUN)暴露给

    2024年04月28日
    浏览(51)
  • 三相直流无刷电器驱动器(BLDC)

    说明 所有的硬件和代码已经开源,请移步代码开源连接 首先这个项目这个是自己学习的时候做的,目前已经验证霍尔有感方案,其他的还没验证。 如果当中存在问题,欢迎评论区一起讨论。 介绍 stm32直流电机控制 采用STM32F103C6T6A作为主控 主控与驱动分离 采用三相逆变桥电

    2024年02月04日
    浏览(42)
  • 制作 Kali 可启动 USB 驱动器

    Kali 可启动 USB 驱动器的优点: 不会更改主机系统的硬盘驱动器或已安装的操作系统,并且要返回正常操作,您只需删除“Kali Live”USB 驱动器并重新启动系统即可。 便携式的 - 您可以将 Kali Linux 放在口袋里,并在几分钟内让它在可用的系统上运行 可定制的 - 您可以使用相同

    2024年01月21日
    浏览(52)
  • Linux上的USB驱动器基准测试

    如果你想在U盘或其他外置USB硬盘上执行基准测试,程序与在普通内部存储设备上执行基准测试非常相似。我们需要做的就是测量USB硬盘的读写速度。在本教程中,你将看到如何在 Linux 系统上通过命令行和图形用户界面对USB硬盘进行基准测试。 在本教程中,你将学习 如何在主

    2024年02月08日
    浏览(43)
  • 伺服电机驱动器EMC处理方案

    伺服驱动器内部也有低压单元, 很可能受到驱动器外围设备的噪音干扰,受到干扰的信号可能会引起设备做出意想不到的动作 为防止伺服驱动器和其外围设备之间的相互电磁干扰, 可根据采取以下的对策: ● 请务必使驱动器及电机良好的接地, 且接地线最好使用AWG10以上

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包