一、我們來了解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.bbqlyw.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.bbqlyw.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);
}
}