微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于HT1621B段式液晶模块的驱动应用

基于HT1621B段式液晶模块的驱动应用

时间:11-18 来源:互联网 点击:

图标的驱动如上,其实就是根据需要修改每一个寄存器位,这个寄存器修改后,我们还必须得传递给HT1621更新显示,才能真正实现显示的驱动:

/**************************************************************************************
* FunctionName : HTB_SendBitMsb()
* Description : 发送发送多位[高位在前]
* EntryParameter : None
* ReturnValue : None
**************************************************************************************/
void HTB_SendBitMsb(u8 dat, u8 cnt)
{
for (u8 i=0; i{
(dat & 0x80) ? GPIO_WriteHigh(HTB_DT_PORT, HTB_DT_PIN) :
GPIO_WriteLow(HTB_DT_PORT, HTB_DT_PIN);

dat <= 1;
GPIO_WriteLow(HTB_WR_PORT, HTB_WR_PIN);
HTB_DelayUs(3);
GPIO_WriteHigh(HTB_WR_PORT, HTB_WR_PIN);
}
}

/**************************************************************************************
* FunctionName : HTB_SendBitLsb()
* Description : 发送多位[低位在前]
* EntryParameter : None
* ReturnValue : None
**************************************************************************************/
void HTB_SendBitLsb(u8 dat, u8 cnt)
{
for (u8 i=0; i{
(dat & 0x01) ? GPIO_WriteHigh(HTB_DT_PORT, HTB_DT_PIN) :
GPIO_WriteLow(HTB_DT_PORT, HTB_DT_PIN);

dat >>= 1;
GPIO_WriteLow(HTB_WR_PORT, HTB_WR_PIN);
HTB_DelayUs(3);
GPIO_WriteHigh(HTB_WR_PORT, HTB_WR_PIN);
}
}

/**************************************************************************************
* FunctionName : HTB_SendCmd()
* Description : 发送命令
* EntryParameter : None
* ReturnValue : None
**************************************************************************************/
void HTB_SendCmd(u8 cmd)
{
GPIO_WriteLow(HTB_CS_PORT, HTB_CS_PIN);
HTB_SendBitMsb(0x80, 3); // 前面3位命令代码
HTB_SendBitMsb(cmd, 9); // 后面10位: a5~a0[RAM地址]+d3~d0[RAM数据]
GPIO_WriteHigh(HTB_CS_PORT, HTB_CS_PIN);
}

/**************************************************************************************
* FunctionName : HTBSendNDat()
* Description : 发送N数据
* EntryParameter : None
* ReturnValue : None
**************************************************************************************/
void HTBSendNDat(u8 addr, u8 *pDat, u8 cnt, u8 bitNum)
{
GPIO_WriteLow(HTB_CS_PORT, HTB_CS_PIN);
HTB_SendBitMsb(0xA0, 3); // 前面3位命令代码
HTB_SendBitMsb(addr<2, 6); // a5~a0[RAM地址]

for (u8 i=0; i{
HTB_SendBitLsb(*pDat++, bitNum); // RAM数据
}

GPIO_WriteHigh(HTB_CS_PORT, HTB_CS_PIN);
}

上面的函数是通过按位传递的方式把数据发给HT1621,并不复杂,这里就不相信介绍了:

typedef enum
{
HTB_CMD_BIAS = 0x29, // 0B:0010 abXc-ab控制占空比,-c控制偏压
HTB_CMD_SYSEN= 0x01, //
HTB_CMD_LCDOFF = 0x02, //
HTB_CMD_LCDON= 0x03, //

} HTB_CMD;

最后,我们可以看出,在修改了全局变量后,在把更新的数据传递给驱动芯片就可以了,非常简单方便灵活,这个示例让我们充分了解和使用位段进行位控制是非常方便。


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top