一、我们来了解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.huijingkeji.com
功能描述:
HT1621芯片测试程序
设 计 人:tangpinghai
版 本: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+图标
}
/********************************************************
下面是深圳市绘晶科技有限公司的程序C代码诠释
/********************************************************
公司:深圳市绘晶科技有限公司www.huijingkeji.com
功能描述: HT1621芯片测试程序
设 计 人:tangpinghai
版 本: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);
}
}