多年前用过HT1621,后来MCU出现集成LCD驱动了,也就不怎么用它了,缅怀一下吧,呵呵,以下内容系转载:
----------------------------------------------------------------------------------------------------
HT1621为128(32×4)段、存储器映射的多功能LCD驱动器。它可设置为1/2或1/3偏置且通过S/W配置设置为2,3或4个公共端的LCD驱动。这使得HT1621适于多种LCD应用。它与主控制器之间只需要3根或4根线接口,LCD驱动时钟从系统时钟内产生,一般为256KHZ。
HT1621的参数如下:
工作电压:2.4V~5.2V
内置256kHz RC 振荡器
外部32.768kHz 晶体 或 256kHz频率输入
可选择1/2 或 1/3 偏压比和1/2 或 1/3 或 1/4 占空比LCD应用
内部时钟源
?个可选蜂鸣器频率 (2kHz/4kHz)
Power down 命令降低功耗
内置时基发生器和WDT
时基 或 WDT 溢出输出
8 种时基时基/WDT 时钟源
32x4 LCD 驱动
内置 32x4 位显示RAM
3-线接口
内部LCD 驱动频率源
软件构造特性
数据模式和命令模式指令
R/W 地址自动增加
三种数据访问模式
因为对LCD的写操作很快,只要处理得当,每次刷新之前先将LCD清屏,再写入需要显示的数据,肉眼是看不出抖动的。因此,驱动程序没有提供读HT1621的程序。如果各位有什么疑问,欢迎讨论
以下是接口程序,430测试频率为4M.
uchar cLCD_Buff[16] = 0; //为ht1621开辟的显示缓存
void write_abit(uchar connect, uchar mask)
{
while(mask)
{
LCD_PORT_OUT &=~LCD_BWR;
_NOP();_NOP();
if(connect & mask)
LCD_PORT_OUT |= LCD_DATA;
else
LCD_PORT_OUT &= ~LCD_DATA;
_NOP();_NOP();_NOP();
LCD_PORT_OUT |= LCD_BWR;
mask>>=1;
}
_NOP();
}
//void write_commond(uchar commond)
void LCD_OUT_COMD(uchar COMD)
{
LCD_PORT_OUT &=~LCD_BCS;
_NOP();
//Send command head "100"
write_abit(0x04,0x04);
//Send command
write_abit(COMD,0x80);
write_abit(0x00,0x01);
LCD_PORT_OUT |= LCD_BCS;
LCD_PORT_OUT |= LCD_BWR;
}
//void write_lcd_screen(void)
void LCDWrite(void)
{
uchar cLCDNum, *pRamAdd,LCD_Count;
cLCDNum=16;
pRamAdd=&cLCD_Buff[0];
LCD_PORT_OUT &=~LCD_BCS;
_NOP();
//Send command head "101"
write_abit(0x05,0x04);
//Send start address "000000"
write_abit(0x00,0x20);
do
{
uchar temp_buffer = *pRamAdd;
for (LCD_Count=0;LCD_Count<8;LCD_Count++)
{
write_abit(temp_buffer,0x01);
temp_buffer = temp_buffer >> 1;
}
cLCDNum--;
pRamAdd++;
}
while(cLCDNum > 0);
LCD_PORT_OUT |= LCD_BCS;
LCD_PORT_OUT |= LCD_BWR;
}
void lcd_port_init(void)
{
LCD_PORT_OUT |= (LCD_BCS + LCD_BWR + LCD_DATA);
LCD_PORT_DIR |= (LCD_BCS + LCD_BWR + LCD_DATA);
}
void beep_on(void)
{
LCD_OUT_COMD(0x09); //TONE ON
}
void LCD_Ini(void)
{
lcd_port_init();
//the 9 bit is X and is set to 0 at func
LCD_OUT_COMD(0x01); //LCD SYSTEM ENABLE FIRST, LIKE AZ8851
LCD_OUT_COMD(0x18); //ON CHIP RC OSCILLATE
LCD_OUT_COMD(0x29); //LCD 1/3 BIAS, 4 COM OPTION
LCD_OUT_COMD(0x03); //LCD ON
LCD_OUT_COMD(0x08); //TONE OFF
LCD_OUT_COMD(0x04); //TIMER DISABLE
LCD_OUT_COMD(0x80); //IRQ DISABLE
LCD_OUT_COMD(0x05); //WDT DISABLE
}
void LCD_Off(void)
{
LCD_OUT_COMD(0x02); //LCD SYSTEM TIME BASE OUT
LCD_OUT_COMD(0x00); //LCD SYSTEM DISABLE
}
该驱动程序对外提供的接口为:
void LCD_Off(void);
void LCDWrite(void);
void LCD_Ini(void); |