提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、HT1621
1) DATASHEET
2) 个人描述
HT1621是LCD屏幕的驱动电路芯片,负责点亮LCD屏上的灯,一个HT1621能驱动很多不同的LCD屏幕
3)容易混淆的概念:
Ps:LCD屏幕是屏幕,屏幕驱动芯片是芯片,HT1621 ≠ LCD屏幕
二、代码驱动
1.驱动代码(.c文件)
驱动代码GPIO控制理解为模拟I2C即可
.h文件只有两个API函数:
HT1621_INIT:用于初始化GPIO引脚和HT1621
ht1621write_val:用于HT1621地址初始化,一次只写一个地址的数据
#define CS_HIGH
#define CS_LOW
#define WR_HIGH
#define WR_LOW
#define DATA_HIGH
#define DATA_LOW
#define BIAS 0x50
#define SYS_EN 0X02
#define LCD_ON 0X06
#define RC256 0X30
#define WDT_DIS 0x0a
#define TIME_DIS 0X08
static void ht1621write_data_LOW(uint8_t data,uint8_t n_bit)
{
uint8_t current;
for( current = 0 ; current < n_bit ; current++)
{
WR_LOW;
Delay(2);
if( (data & 0x01) == 1)
DATA_HIGH;
else
DATA_LOW;
Delay(2);
WR_HIGH;
data >>= 1;
Delay(2);
}
}
static void ht1621write_data(uint8_t data,uint8_t n_bit)
{
uint8_t current;
for( current = 0 ; current < n_bit ; current++)
{
WR_LOW;
Delay(2);
if(((data & 0x80) >> 7) == 1)
DATA_HIGH;
else
DATA_LOW;
Delay(2);
WR_HIGH;
data <<= 1;
Delay(2);
}
}
static void ht1621write_cmd(uint8_t cmd)
{
CS_LOW;
Delay(2);
ht1621write_data(0x80,4);
ht1621write_data(cmd,8);
Delay(2);
CS_HIGH;
}
void ht1621write_val(uint8_t addr , uint8_t data)
{
addr <<= 2;
CS_LOW;
Delay(2);
ht1621write_data(0xA0,3);
ht1621write_data(addr,6);
ht1621write_data_LOW(data,4);
Delay(2);
CS_HIGH;
}
void HT1621_INIT( void *pvParameters )
{
CS_HIGH;
WR_HIGH;
DATA_HIGH;
ht1621write_cmd(BIAS);
ht1621write_cmd(RC256);
ht1621write_cmd(WDT_DIS);
ht1621write_cmd(TIME_DIS);
ht1621write_cmd(SYS_EN);
ht1621write_cmd(LCD_ON);
}
2.驱动LCD屏幕
这一步是关键,大部分使用LCD屏幕都是厂商私人定制,所以很大可能上厂商给的PIN脚不是对应SEG号地址,有可能是SEG号相反
给一个测试思路:
先把整个LCD屏幕的字段全亮起来,然后用for循环从0地址开始一个一个地址去清零熄灭字段
//思路程序模板举例
int i;
for(i = 0 ; i < SEG_MAX; i++)
{
if( i > 0 )
ht1621write_val(i-1,0xF);
ht1621write_val(i,0x0);
delay(5s);
}
//加个延时,就能看清每个地址对应的字段了