HT1621从0开始
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 一、HT1621
- 1) DATASHEET
- 2) 个人描述
- 3)容易混淆的概念:
- 二、代码驱动
- 1.驱动代码(.c文件)
- 2.驱动LCD屏幕
一、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 0X08static 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;elseDATA_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;elseDATA_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);
}
//加个延时,就能看清每个地址对应的字段了
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
