1621驱动段码液晶屏详解
发布来源:www.xyhlcd.com 发布时间:2022-3-27
一、我们来了解1621段码液晶屏的特性
* 工作电压 2.4 --5.2V * 内嵌 256KHz RC 振荡器
* 可外接 32KHz 晶片或 256KHz 频率源输入
* 可选 1/2bais 或 1/3bais 偏压和 1/2duty 、1/3duty、1/4duty 的占空比
* 片内时基频率源
* 蜂鸣器可选择两种频率
* 内嵌时基发生器和看门狗定时器 WDT
* 时基或看门狗定时器溢出输出
* 八个时基/看门狗定时器时钟源
* 一个 32segX 4com 的 LCD 驱动器,内部嵌有的 32X 4 位显示 RAM 内存
* 四线串行接口 /CS, DATA, WR, RD,一般情况下RD不用
* 片内 LCD 驱动频率不可调64HZ
* 软件配置特征: 数据模式和命令模式 两种指令
* 提供 VLCD 管脚用于调整 LCD 操作电压(对比度调节)
二、LCD 逻辑表对应关系

1621的RAM 和上图的逻辑表是对应的,
这样可以很好的理解了吧
1621对应32个地址 每个地址对应4个com数据
例如:0地址写入0X08 对应SGE0的T1亮
写入0X01 对应SGE0的1F亮
写入0X02 对应SGE0的1G亮
写入0X07 对应SGE0的1E,1G,1F,三个一起亮
写入0X0F 对应SGE0的1E,1G,1F,T1四个全部亮
1621可以连续写,最好做的事一次写入两个地址,这样好做table表,写起来简单。
例如:前两个地址写入0XF7对应SGE0,SEG1的1E,1G,1F,1D,1C,1B,1A全部亮这样就显示了一个完整“8”字
要想使液晶屏显示,IC的初始化中这几个指令必须要写。
首先了解一下什么是指令,什么是数据
1 0 0 C8 C7 C6 C5 C4 C3 C2 C1 C0
前三位100是指令的标志位,后面的9位是指令值
1 0 1 C7 C6 C5 C4 C3 C2 C1 C0
前三位101是数据的标志位,后面的8位是数据
也就是说看到前三位100 就代表指令,看到前三位101 就代表数据
以下这4个指令要写入初始化函数的
1、SYS EN 100 0000 - 0001- X 指令 0X01 (打开闭系统振荡器)X: Don't care
2、BIAS 100 0010 - abXc - X 指令
这里解释一下:C=1为LCD1/3 bias ;C=0为LCD1/2 bias
ab=00: 2 COM
ab=01: 3 COM
ab=10: 4 COM
3、RC256 100 0001-1000 - X 指令 0X01 (内部时钟)X: Don't care
4、LCDON 100 0000 - 0011 - X 指令 0X01 (打开LCD显示)X: Don't care
下面是兴宇合电子有限公司的程序C代码诠释
/********************************************************
公司:深圳市兴宇合电子有限公司www.xyhlcd.com
功能描述: HT1621芯片测试程序
设 计 人:Zheng Qiu Sheng
版 本:1.0
完成时间:2022年3月13日
********************************************************/
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define _Nop() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()
#define BIAS 0x29 //0b100 - 0010 -1001 - 0 1/3duty 4com
#define SYSDIS 0X00 //0b100 - 0000 - 0000 - 0 关振系统荡器和LCD偏压发生器
#define SYSEN 0X01 //0b100 - 0000 - 0001 - 0 打开系统振荡器
#define LCDOFF 0X04 //0b100 - 0000- 0010 - 0 关LCD显示
#define LCDON 0X03 //0b100 - 0000 - 0011 - 0 打开LCD显示
#define XTAL 0x14 //0b100 - 0001- 0100 - 0 外部接时钟
#define RC256 0X18 //0b100 - 0001 - 1000 - 0 内部时钟
#define TONEOFF 0X10 //0b1000 0001 0000 关闭声音输出
#define WDTDIS 0X0A //0b1000 0000 1010 禁止看门狗
//HT1621控制位(液晶模块接口定义,根据自已的需要更改)
sbit DAT=P1^0;
sbit wr=P1^1;
sbit CS1=P1^2;
uchar code table[10]={0xFA,0x0A,0xD6,0x9E,0x2E,0xBC,0xFC,0x1A,0xFE,0xBE}; //0---9的table表
////////// 延时函数1 delay us///////
void Delay(uint us)
{
while(--us);
}
/////////////// 延时函数2 ///////////////////
void DelayMS(uint iMs)
{
uint i,j;
for(i=0;i<iMs;i++)
for(j=0;j<65;j++)
;
}
/******************************************************
函数名称: void Ht1621Wr_Data(uchar Data,uchar cnt)
写数据函数,cnt为传送数据位数,数据传送为高位在前
*******************************************************/
void Ht1621Wr_Data(uchar Data,uchar cnt)
{
uchar i;
for (i=0;i<cnt;i++)
{
wr=0;
if (Data&0x80)
DAT=1;
else
DAT=0;
wr=1;
Data<<=1;
}
}
/********************************************************
函数名称:void Ht1621WrCmd(uchar Cmd)
说 明:写入指令
********************************************************/
void Ht1621WrCmd(uchar Cmd)
{
CS1=0; //片选CS低有效
_Nop();
Ht1621Wr_Data(0x80,3); //写入指令标志100
Ht1621Wr_Data(Cmd,9); //写入指令数据
CS1=1; //片选CS高关闭
_Nop();
}
/********************************************************
函数名称:void Ht1621WrOneData(uchar Addr,uchar Data)
写一个数据,
1、先写101数据的标识位
2、再写地址
3、最后写要显示的数据
********************************************************/
void Ht1621WrOneData(uchar Addr,uchar Data)
{
CS1=0;
Ht1621Wr_Data(0xa0,3); //写入数据标志101
Ht1621Wr_Data(Addr<<2,6); //写入地址数据
Ht1621Wr_Data(Data,8); //写入数据这里是两个地址一起写得8bit
CS1=1;
/********************************************************
函数名称:void Ht1621WrAllData(uchar Addr,uchar p)
说 明:HT1621的数据位4位位一个地址,
上面我们讲过可以一次写两位 ,数据为8位。
高四位----对应高地址 第四位-----对应低地址。
********************************************************/
void Ht1621WrAllData(uchar Addr,uchar p)
{
uchar i;
CS1=0;
Ht1621Wr_Data(0xa0,3); //写入数据标志101
Ht1621Wr_Data(Addr<<2,6); //写入地址数据
for (i=0;i<16;i++)
{
Ht1621Wr_Data(p,8); //写入数据 16X8=128bit
}
// for (i=0;i<32;i++)
/ /{//这里是四位四位的写数据的
// Ht1621Wr_Data(p,4); //写入数据 32X4=128bit
//}
CS1=1;
}
/********************************************************
函数名称:void Ht1621_Init(void) www.xyhlcd.com
说 明:初始化后,液晶屏才能正常的工作
********************************************************/
void Ht1621_Init(void)
{
CS1=1;
DAT=1;
DelayMS(200); //延时使LCD工作电压稳定
Ht1621WrCmd(BIAS); //BIAS的设置
Ht1621WrCmd(RC256); //使用内部振荡器
Ht1621WrCmd(SYSEN); //打开系统振荡器
Ht1621WrCmd(LCDON); //打开LCD显示
}
/////////////////////////////////////////////////////////////////
////函数名:xianshi_1()
///客户可以跟句自己的需求直接填入数据就可以显示来了
/////////////////////////////////////////////////////////////////
void xianshi_1()
{
///////////////////////////
Ht1621WrOneData( 0, table[0]); //显示0
Ht1621WrOneData( 2, table[1]); //显示1
Ht1621WrOneData( 4, table[2]|0X08); //显示2 +小数点
Ht1621WrOneData( 6, table[3]); //显示3
:
:
:
Ht1621WrOneData( 12, table[8]|0X08); //显示8+图标
Ht1621WrOneData( 14, table[9]|0X08); //显示9+图标
}
/********************************************************
公司:深圳市兴宇合电子有限公司www.xyhlcd.com
功能描述: HT1621芯片测试程序
设 计 人:Zheng Qiu Sheng
版 本:1.0
函数命: 一个笔段一个笔段循环显示
完成时间:2022年3月13日
********************************************************/
void XUNHUN_XIANSHI( uchar Lenth ,uchar Time)
{
uchar i,j,t;
for (i=0;i<Lenth;i=i+2)
{
t=0x01;
for (j=0;j<8;j++)
{
Ht1621WrOneData(i,t);
t<<=1;
t|=0x01;
DelayMS(Time);
}
}
}
/********************************************************
公司:深圳市兴宇合电子有限公司www.xyhlcd.com
功能描述: HT1621芯片测试程序
设 计 人:Zheng Qiu Sheng
版 本:1.0
函数命: 主函数main()
完成时间:2022年3月13日
********************************************************/
void main()
{
Ht1621_Init(); //上电初始化LCD
DelayMS(100); //延时使初始化稳定
while(1)
{
Ht1621WrAllData00(0,0X00);//清除1621寄存器数据为0。
DelayMS(400);
Ht1621WrAllData00(0,0XFF);//填充示1621寄存器数据为1。
DelayMS(800);
Ht1621WrAllData00(0,0X00);//清除1621寄存器数据为0。
DelayMS(400);
Xianshi_1(); //此处客户可以自己定义怎么显示。
DelayMS(800);
XUNHUN_XIANSHI( 32 ,100)/// 一个笔段一个笔段循环显示32个地址间隔100MS。
DelayMS(800);
}
}
总结:深圳市深圳市兴宇合电子有限公司是一家从事研发,制造液晶显示屏(LCD)、液晶显示模组(LCM)、LED背光源以及数码显示屏的专业厂家,特别是静电以及电磁干扰等方面经验丰富,对客户的问题能够提供出快速 、准确 、专业的解答。
“质量第一、精益求精、追求卓越”之理念是兴宇合公司始终如一的郑重承诺。对于不明白或者有疑问的问题请拨打电话:
0755-83404646 / 0755-83570678 / 13923751240