HT液晶显示驱动详细原理及程序

合集下载

HT1621液晶驱动芯片的51单片机程序

HT1621液晶驱动芯片的51单片机程序
sbit P1_5=P1பைடு நூலகம்5;
uchar code
Ht1621Tab[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00};
//delay us
void Delay(uchar us) //5,7,9
#define WDTDIS 0X0A //0b1000 0000 1010 禁止看门狗
//HT1621控制位(液晶模块接口定义,根据自已的需要更改)
sbit HT1621_DAT=P3^4; //HT1621数据引脚
sbit HT1621_CS=P3^2; //HT1621使能引脚
sbit HT1621_WR=P3^3; //HT1621时钟引脚
#define XTAL 0x28 //0b1000 0010 1000 外部接时钟
#define RC256 0X30 //0b1000 0011 0000 内部时钟
#define TONEON 0X12 //0b1000 0001 0010 打开声音输出
#define TONEOFF 0X10 //0b1000 0001 0000 关闭声音输出
HT1621液晶驱动芯片的51单片机程序
/********************************************************
功能描述: HT1621芯片测试程序
说 明:本测试程序能够测试HT1621的每一个字段,
依次点亮每一个字段
参数:
********************************************************/

HT1621硬件接线和软件编程

HT1621硬件接线和软件编程

HT1621硬件原理图及软件编程1、Ht1621的硬件接线是怎样的呢?需要将LCD的SEG(段电极)和COM(公共电极)与HT1621的SEG与COM 对应相连。

在就是HT1621会有几个接口是与单片机的I/0口相连像/CS(片选)/WR(写操作) / RD(读操作)(一般不用)/DATA(数据) 通过软件程序对I/O的控制进而控制HT1621的读写操作。

通过送数的不同达到想要的效果。

2、软件上是怎样控制点亮或者熄灭的呢?想显示那些就把相应的段在程序里赋 1 如果想全显示就全赋 1 想都不显就都赋0。

3、HT1621B驱动4位8段LCD,用单片机怎样控制?其中的D0~D3,A0~A5各表示什么意思?1621B最多带32SEGx4COM,128段。

显示数据与显示内容是这样对应的:一个8位二进制数对应2根SEG线上的8个段码,1为显示,0不显。

例如seg0上的内容是ABCD四个段码,SEG1上的内容是EFGH四个段码,背电极COM 上,C0连AE2个段码,C1连BF,C2连CG,C3连DH,按此显示逻辑输入“01100011”时,高4位对应SEG1,低4位对应SEG0,将同时显示FGAB四个段码。

输入的显示数据不重新输入的话会一直显示,要同时显示2位数字和段码只要将这些数字和段码在逻辑表上对应的数据置1即可同时显示。

D0-D3是显示数据,1显示0不显示,A0-A5是芯片内置的RAM地址。

看上图1621的显示RAM对应表,你的显示模块资料上必定有这个逻辑表(实在没有你只能逐个地址逐个段码点亮,自己填上),你给一个地址送4位数据,对应的是一个SEG上的4个段(编程上一般送8位对应2根SEG8个段,因为RAM 地址会自动加1,你可以连续输入数据,我原来说的8位只是方便编程,你4位8位甚至一次输完整个RAM表数据都行),IC工作的时候它是将它内部的这个RAM表读出来,将“1”的数据对应的段码显示出来,明白了这个对应关系应该就清楚了,要液晶变换显示内容只需要改写这个RAM表。

用HT1621驱动LCD的方法

用HT1621驱动LCD的方法

用HT1621驱动LCD的方法HT1621是一种专门用于驱动液晶显示屏的电路芯片。

它主要由一个128x32位的RAM、一个系统控制单元、一个液晶电压驱动器和一个驱动信号产生器组成。

下面将详细介绍如何使用HT1621来驱动液晶显示屏。

首先,我们需要了解HT1621的引脚和功能。

HT1621具有36个I/O引脚,其中包括数据线D0-D15、片选线CS、读/写线WR、串行时钟线CLK、复位线RESET和外部时钟线CLOCK。

可以通过这些引脚来与HT1621进行通信和控制。

接下来,我们需要了解液晶显示屏的工作原理。

一般来说,液晶屏主要由一个像素矩阵和一个驱动电路组成。

驱动电路负责根据控制信号来控制像素的亮度。

液晶显示屏的像素矩阵可以根据需要进行修改,以显示所需的图形或文本。

基于以上原理,我们可以开始使用HT1621来驱动液晶显示屏。

以下是一个基本的步骤:1.连接电路:首先,将HT1621和液晶显示屏连接起来。

根据液晶显示屏的引脚分配表和HT1621的引脚分配表,进行正确的连接。

确保电路在工作时不会发生短路或其他问题。

2.初始化HT1621:在开始使用HT1621之前,需要执行一些初始化操作。

这包括设置像素矩阵的大小、选择使用的驱动模式(静态或动态)以及配置其他相关参数。

可以通过向HT1621发送一系列特定的配置命令来完成这些初始化操作。

3.发送数据:一旦HT1621完成初始化,就可以开始向液晶显示屏发送数据了。

可以通过编程将所需的图形或文本数据写入HT1621的RAM中。

注意,HT1621的RAM大小为128x32位,所以需要将图形或文本数据适当地分割和映射到RAM中的相应位置。

4.刷新液晶显示屏:一旦数据写入HT1621的RAM中,需要根据需要刷新液晶显示屏以显示所需的图形或文本。

可以通过向HT1621发送刷新命令来触发刷新操作。

HT1621将读取RAM中的数据并根据驱动电路的要求控制液晶显示屏中的像素亮度。

HT1621驱动LCD程序

HT1621驱动LCD程序
}
void Ht1621Wr_Data(uchar Data,uchar cnt)
{
uchar i;
for (i=0;i<cnt;i++)
{
HT1621_WR=0;
_Nop();
HT1621_DAT=Data&0x80;
//delay us
void Delay(uchar us) //5,7,9
{
while(--us);
}
//delay ms
void DelayMS(uint iMs)
{
uint i,j;
for(i=0;i<iMs;i++)
for(j=0;j<65;j++) Delay(1);
HT1621_CS=0;
Ht1621Wr_Data(0xa0,3); //写入数据标志101
Ht1621Wr_Data(Addr<<2,6); //写入地址数据
for (i=0;i<cnt;i++)
{
Ht1621Wr_Data(*p,8); //写入数据
p++;
Ht1621WrOneData(i,t);
t<<=1;
t++;
P1_5=~P1_5;
Ht1621WrCmd(RC256); //使用内部振荡器
Ht1ቤተ መጻሕፍቲ ባይዱ21WrCmd(SYSDIS);
Ht1621WrCmd(WDTDIS);
Ht1621WrCmd(SYSEN);
Ht1621WrCmd(LCDON);

液晶显示器驱动原理介绍讲述PPT课件

液晶显示器驱动原理介绍讲述PPT课件

复杂 第22页/共3间8页很短,故对显示效果影响较小
3、液晶显示器驱动原理
液晶显示器驱动原理:Common电压的设定
COMMON电压变化与否影响最直接的是source IC的供电电压压差 而IC供电电压大小将直接影响IC的价格
第23页/共38页
3、液晶显示器驱动原理
液晶显示器驱动原理:实际电压VS理论电压—data、common
1、液晶基础知识介绍
液晶的电光特性曲线:VT curve、阈值电压、饱和电压、陡度
第4页/共38页
1、液晶基础知识介绍
液晶的电光特性曲线:不同电压和极性
1、不同压差有不同穿透率; 2、相同压差,不同极性的电压穿透率接近。
第5页/共38页
1、液晶基础知识介绍
液晶的电光特性曲线:液晶的响应时间
第6页/共38页
12345 1+ + + + + 2+ + + + + Lines 3 + + + + + 4+ + + + + 5+ + + + +
12345
12345
1⌒ ⌒ ⌒ ⌒ ⌒
1+ + + + +
2⌒ ⌒ ⌒ ⌒ ⌒
2⌒ ⌒ ⌒ ⌒ ⌒
Lines 3 ⌒ ⌒ ⌒ ⌒ ⌒ Lines 3 + + + + +
Frame N+1 Columns
Frame N Columns
12345
12345
1⌒ + ⌒ + ⌒

HT1621驱动段码液晶屏

HT1621驱动段码液晶屏

第十七节:液晶屏第三大类定律—任意位置显示一个点(HT1621驱动段码液晶屏)(1)开场白:段码液晶屏往往应用在出货量比较大的家用消费类电子,比如空调遥控器,小时候带的电子手表等,都是段码屏。

段码屏是非标屏,都是客户定做的,第一次开模费大概一两千元,厂家一般都会有起订量的要求,除此之外,它的单位成本相对要比点阵屏要便宜,而且我个人认为显示的效果要比点阵屏漂亮。

段码屏的驱动程序跟数码管的静态驱动程序一样,只要我们弄懂了怎样显示一个基本单位,根据此基本单位编写一个字库表,然后用与(&)和或(|)这两种位运算符就可以随心所欲编写我们要显示的数字或者形状。

有两种常用的驱动方案:第一种:如果单片机内部集成了seg和com引脚的液晶驱动模块,直接用单片机驱动。

第二种:单片机用3个IO口跟HT1621进行通讯,用HT1621驱动段码屏。

这节我重点介绍第二种。

HT1621有4个COM,分别是com3,com2,com1,com0。

有32个SEG,分别是SEG0,SEG1….SEG31。

什么是COM,什么是SEG?用鸿哥的思路来解释,COM就是横向上的X坐标,SEG就是纵向上的Y坐标。

X坐标与Y坐标组合成一张表格,每格代表一个显示点。

比如HT1621,有4个COM,32个SEG,组成一个32行,每行装4个点的表格,一共有128个点,也就是最多可以显示128个点,用数码管的思路,最多可以显示128个LED灯。

因为纵向上有32行,因此Y轴的地址范围是0到31。

每一行X轴上的4个点,我们用一个字节来表示。

一个字节有8位,高4位分别代表这个4个点,低4位为空。

比如第一行(SEG0行)的第1个(COM3)要显示,第2个(COM2)要显示,第3个(COM1)不要显示,第4个(COM0)不要显示,那么用一个字节来表示就是十六进制的0xc0.要把这两个点点亮,只要把X轴的数据设置成0xc0,Y轴的数据设置成0x00,然后放到鸿哥精心研制的seg_display(unsigned char col, unsigned char pag)驱动程序里就可以了.(2)功能需求:在COM和SEG组成的4X32表格中,显示第二行的第3和第4两个点。

HT1621液晶显示驱动详细原理及程序

Ht1621液晶显示详细驱动使用说明以及程序1.概述HT1621是128点内存映象和多功能的LCD驱动器,HT1621的软件配置特性使它适用于多种LCD应用场合,包括LCD模块和显示子系统。

用于连接主控制器和HT1621的管脚只有4或5条,HT1621还有一个节电命令用于降低系统功耗。

在虎风所做的这个系统中ht1621用于驱动一个静态的LCD液晶显示器。

液晶显示的方式分为静态显示和动态显示。

静态与动态的区别在于静态显示是持续供电的,而动态显示是利用人的视觉停留效果,快速扫描数码管各个段,让人在视觉上感觉到数码管是同时显示的。

2.HT1621接线原理图3.静态LCD结构图4.几个曾经纠结的概念Time base:时基,即时间基准,可以用来输出,作为外部时钟的时间基准。

占空比:将所有公共电极(COM)各施加一次扫描电压的时间叫一帧,单位时间内扫描多少帧的频率叫帧频,将扫描公共电极(COM)选通的时间与帧周期之比叫占空比。

通常占空比等于公共电极数N的倒数,即1/N。

这就是说假如你要驱动4个液晶,就需要4个COM,那么你的占空比就要设定为1/4。

偏压比:指的是液晶的偏压系数,可以看看专业技术文章,偏压目的是克服交叉效应,通过把半选择点与非选择点的电压平均,适度提高非选择点的电压来抵消半选择点上的一部分电压,使半选择点上的电压下降,从而提高显示对比度;最终行半选择点和非选择点上的电压均为显示电压的1/a,1/a就称为偏压系数,也称为偏压。

此方法称为1/a偏压的平均电压法,简称为1/a偏压法。

VLCD(LCD驱动电压): LCD的驱动电压为加在点亮部分的段电压与公共电压之差(峰-峰值)。

5.关于RAM地址映射的概念为了这个问题困扰了很久,虎风太愚钝啦……Ht1621有一个32*4的LCD驱动,映射到32*4的RAM地址。

上图中写命令101后面跟6位RAM地址,那么这个地址是如何确定的呢?其实说白了也很简单,RAM地址就是SEG的序号。

HT1622液晶测试驱动程序

#include<reg51.h>#include<stdio.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define nop()_nop_()sbit CS=P3^0;sbit RW=P3^1;sbit DAT=P3^2;//正显示(1:显示;0:不显示)uchar code disp_buff[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x0ff}; uchar code disp_buff1[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x0ff}; void delay(xms)uint xms;{uint i,j,m;for(i=0;i<xms;i++){for(j=0;j<560;j++){for(m=0;m<125;m++){nop();nop();nop();nop();}}}}//enter command modevoid command_mode(){uchar cmd=0x80,i;//select ht1622for(i=0;i<3;i++){RW=0;nop();nop();DAT=cmd&0x80;cmd=cmd<<1;nop();nop();}}//set RAM addressvoid set_address(address)uchar address;{uchar mode=0xa0,i;for(i=0;i<3;i++){RW=0;nop();nop();DAT=mode&0x80;mode=mode<<1;RW=1;nop();nop();}address=address<<2;for(i=0;i<6;i++){RW=0;nop();nop();DAT=address&0x80;address=address<<1;RW=1;nop();nop();}}//write setting command into ht1622 void write_command(command)uchar command;{uchar i;for(i=0;i<9;i++){RW=0;nop();DAT=command&0x80;command=command<<1;nop();RW=1;nop();nop();}}/*========write one byte data==============*/void write_data(dat)uchar dat;{uchar i;for(i=0;i<8;i++){RW=0;nop();nop();DAT=dat&0x01;dat=dat>>1;RW=1;nop();nop();}}void set_ht1622(){command_mode();write_command(0x01);//sys enable and turn on system oscillator write_command(0x18);//select clock source(on-chip RC oscillator) //write_command(0x29)//ht1622not use this commandwrite_command(0x03);//turn on LCD display}void disp_loop(){uchar i,j;for(j=0;j<10;j++){P1=0xff;CS=0;//command_mode();set_ht1622();CS=1;nop();CS=0;set_address(0x00);for(i=0;i<50;i++){write_data(disp_buff[j]);nop();}CS=1;delay(0x01);}{P1=0xff;CS=0;//command_mode();set_ht1622();CS=1;nop();nop();CS=0;set_address(0x00);for(i=0;i<50;i++){write_data((i%2)?0x00:0xff);nop();}CS=1;delay(0x01);}{P1=0xff;CS=0;//command_mode();set_ht1622();CS=1;nop();CS=0;set_address(0x00);for(i=0;i<50;i++){write_data((i%2)?0xff:0x00);nop();}CS=1;delay(0x01);}{P1=0xff;CS=0;//command_mode();set_ht1622();CS=1;nop();nop();CS=0;set_address(0x00);for(i=0;i<50;i++){write_data((i%2)?0x00:0xff);nop();}CS=1;delay(0x01);}{P1=0xff;CS=0;//command_mode();set_ht1622();CS=1;nop();nop();CS=0;set_address(0x00);for(i=0;i<50;i++){write_data((i%2)?0xff:0x00);nop();}CS=1;delay(0x01);}CS=0;}void main(){uchar m;//initial P1for(m=0;m<10;m++){P1=0xff;}//display subrutinewhile(1){disp_loop();}}。

HT16C23 HT16C23G 56x4 52x8 无秩序 LCD 驱动芯片说明书

Rev. 1.1012011-06-21HT16C23/HT16C23G RAM 映射 56×4 / 52×8LCD驱动控制器特性●工作电压:2.4 ~ 5.5V ●内部32kHz RC 振荡器●Bias :1/3或1/4;Duty :1/4或1/8●带电压跟随器的内部LCD 偏置发生器●I 2C 总线接口●两种可选的LCD 帧频率:80Hz 或160Hz ●多达52×8位的RAM 用于存储显示数据●显示模式:–56×4模式:56 SEG × 4 COM –52×8模式:52 SEG × 8 COM ●多种闪烁模式●读/写地址自动增加●内建16级V LCD 电压调整电路●低功耗●提供VLCD 引脚来调整LCD 工作电压●采用硅栅极 CMOS 工艺制造●封装类型:48LQFP ,64LQFP ,chip 和COG应用领域●电表●水表●气表●热能表●家用电器●游戏机●电话●消费类电子产品概述HT16C23/HT16C23G 是一款存储器映射和多功能的LCD 控制/驱动芯片。

该芯片的显示字段为224点(56 SEG × 4 COM)或416点(52 SEG × 8 COM)。

HT16C23/HT16C23G 芯片的软件配置特性使其适用于多种LCD 应用,包括LCD 模块和显示子系统。

HT16C23/HT16C23G 芯片可通过双线双向I 2C 接口与大多数微处理器或微控制器进行通信。

方框图COM0COM3SEG4VSSSDA SCLCOM4/SEG0COM7/SEG3SEG55HT16C23/HT16C23G 引脚图SEG27SEG26SEG25SEG24SEG23SEG22SEG21SEG20SEG19SEG18SEG17SEG16VDDSDASCLVSSCOM0COM1COM2COM3COM4COM5COM6COM7SEG15SEG14SEG13SEG12SEG11SEG10SEG9SEG8SEG7SEG6SEG5SEG4SEG15SEG14SEG13SEG12SEG11SEG10SEG9SEG8SEG7SEG6SEG5SEG417 18 19 20 21 22 23 24 25 26 27 2816SEG19SEG18SEG17SEG16SEG15SEG14SEG13SEG12SEG11SEG10SEG9SEG8SEG27SEG26SEG25SEG24SEG23SEG22SEG21SEG20SEG19SEG18SEG17SEG16SEG15SEG14SEG13SEG12SEG11SEG10SEG9SEG8SEG7SEG6SEG28SEG29SEG30SEG31SEG32SEG33SEG34SEG35SEG36SEG39SEG38SEG37SEG36SEG35SEG34SEG33SEG32SEG31SEG30SEG29SEG28SEG27SEG26SEG25SEG24VDDSDASCLVSSCOM0COM1COM2COM3COM4/SEG0COM5/SEG1COM6/SEG2COM7/SEG3SEG4SEG5SEG6SEG7SEG23SEG22SEG21SEG20SEG19SEG18SEG17SEG16SEG15SEG14SEG13SEG12SEG11SEG10SEG9SEG8SEG40SEG41SEG42SEG43SEG44SEG45SEG46SEG47SEG48SEG49SEG50SEG51SEG52SEG53SEG54VLCDSEG27SEG26SEG25SEG24SEG23SEG22SEG21SEG20SEG19SEG18SEG17SEG16SEG15SEG14SEG13SEG12SEG11SEG10SEG9SEG8SEG7SEG6SEG28SEG29SEG30SEG31SEG32SEG33SEG34SEG35SEG36SEG39SEG38SEG37SEG36SEG35SEG34SEG33SEG32SEG31SEG30SEG29SEG28SEG27SEG26SEG25SEG24VDDSDASCLVSSCOM0COM1COM2COM3COM4/SEG0COM5/SEG1COM6/SEG2COM7/SEG3SEG4SEG5SEG6SEG71234567891011121314151648474645444342414039383736353433SEG23SEG22SEG21SEG20SEG19SEG18SEG17SEG16SEG15SEG14SEG13SEG12SEG11SEG10SEG9SEG8SEG40SEG41SEG42SEG43SEG44SEG45SEG46SEG47SEG48SEG49SEG50SEG51SEG52SEG53SEG54SEG55注:1. 应用条件:V DD≤ V LCD或 V LCD≤ V DD。

液晶显示器驱动原理介绍讲述课件


05
液晶显示器驱动技术的实 际应用
液晶显示器在电视中的应用
液晶电视
液晶显示器作为电视的核心显示部件 ,能够提供清晰、逼真的画面效果, 广泛应用于家庭和商业场合。
智能电视
随着技术的发展,液晶电视与智能技 术的结合,使得电视具备了更多的功 能,如网络浏览、视频通话等。
液晶显示器在电脑中的应用
笔记本电脑
液晶显示器驱动原 理介绍
contents
目录
• 液晶显示器的概述 • 液晶显示器的工作原理 • 液晶显示器驱动电路 • 液晶显示器驱动技术的发展趋势 • 液晶显示器驱动技术的实际应用
01
液晶显示器的概述
液晶显示器的定义与特点
定义
液晶显示器(LCD)是一种通过 液晶材料实现图像显示的设备。
特点
具有低功耗、体积小、重量轻、 无辐射等优点,广泛应用于各种 电子设备中。
智能化的液晶显示器驱动技术
智能化的液晶显示器驱动技术是液晶显示器驱动技术的最新发展方向。随着人工智能和物联网技术的 发展,智能化已经成为各种设备的必然趋势。智能化的液晶显示器驱动技术能够实现自适应调节、自 动校准等功能,提高液晶显示器的智能化水平和用户体验。
智能化的液晶显示器驱动技术主要通过引入人工智能算法、传感器技术、无线通信等技术手段实现。 这些技术手段能够使液晶显示器具备自主学习和自我调整的能力,使其在各种应用场景下都能够提供 最佳的显示效果和用户体验。
果。
液晶显示器的显示原理
010203Fra bibliotek背光系统
背光系统提供显示器所需 的基本光源,光线通过液 晶层后,由彩色滤光片决 定像素的颜色。
彩色滤光片
彩色滤光片用于决定像素 的颜色,不同颜色的像素 组合形成完整的图像。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

H T液晶显示驱动详细原理及程序Document serial number【LGGKGB-LGG98YT-LGGT8CB-LGUT-Ht1621液晶显示详细驱动使用说明以及程序1.概述HT1621是128点内存映象和多功能的LCD驱动器,HT1621的软件配置特性使它适用于多种LCD应用场合,包括LCD模块和显示子系统。

用于连接主控制器和HT1621的管脚只有4或5条,HT1621还有一个节电命令用于降低系统功耗。

在虎风所做的这个系统中ht1621用于驱动一个静态的LCD液晶显示器。

液晶显示的方式分为静态显示和动态显示。

静态与动态的区别在于静态显示是持续供电的,而动态显示是利用人的视觉停留效果,快速扫描数码管各个段,让人在视觉上感觉到数码管是同时显示的。

2.HT1621接线原理图3.静态LCD结构图4.几个曾经纠结的概念Time base:时基,即时间基准,可以用来输出,作为外部时钟的时间基准。

占空比:将所有公共电极(COM)各施加一次扫描电压的时间叫一帧,单位时间内扫描多少帧的频率叫帧频,将扫描公共电极(COM)选通的时间与帧周期之比叫占空比。

通常占空比等于公共电极数N的倒数,即1/N。

这就是说假如你要驱动4个液晶,就需要4个COM,那么你的占空比就要设定为1/4。

偏压比:指的是液晶的偏压系数,可以看看专业技术文章,偏压目的是克服交叉效应,通过把半选择点与非选择点的电压平均,适度提高非选择点的电压来抵消半选择点上的一部分电压,使半选择点上的电压下降,从而提高显示对比度;最终行半选择点和非选择点上的电压均为显示电压的1/a,1/a就称为偏压系数,也称为偏压。

此方法称为1/a偏压的平均电压法,简称为1/a偏压法。

VLCD(LCD驱动电压): LCD的驱动电压为加在点亮部分的段电压与公共电压之差(峰-峰值)。

5.关于RAM地址映射的概念为了这个问题困扰了很久,虎风太愚钝啦……Ht1621有一个32*4的LCD驱动,映射到32*4的RAM地址。

上图中写命令101后面跟6位RAM地址,那么这个地址是如何确定的呢其实说白了也很简单,RAM地址就是SEG的序号。

我们要点亮一段液晶管需要给他提供一个电平,而这个电平是由SEG管脚提供的,SEG管脚电平的输出又取决于对应RAM地址中的值。

驱动一个8段数码管的顺序是A,B,C,D,E,F,G,DP,我们认为前面LCD结构图中的数码管3为我们要显示的低位,那么连接原理图中A3的是SEG12,我们就说此时的RAM地址为0b001100,连接B3的是SEG11,对应的RAM地址为0b001011,依次类推,第一个数码管的所有地址为:0b001100,0b001011,0b001010,0b001001,0b001000,0b001101,0b001110,0b000111//DP2;其余地址类似,在此不再解释。

6.程序Unsigned charLCD_ADD[]={0b00001100,0b00110100,0b00010100,0b00100100,0b00000100,0b00101100 ,0b00011100,0b00111000,0b00000010,0b00111100,0b00011000,0b00101000,0b0000100 0,0b00100010,0b00010010,0b00110000,0b00001010,0b00110010,0b00010000,0b001000 00,0b00000000,0b00101010,0b00011010};void HT1621_Dis_Char(unsigned char d,unsigned char d_loca){unsigned char j;unsigned char seg_cnt=8 ;if (d_loca==(HT1621_DATA_NUM-1))seg_cnt=7;//送3位模式码101及6位首地址000000 0b000000101 for (j=0; j<seg_cnt; j++) //送cache_size组数据{ HT1621_PORT&=~_BV(HT1621_CS);HT1621_Send_Bits(0x05,3); //送写命令代码101,高到低 HT1621_Send_Bits(LCD_ADD[d_loca*8+j],6); //送每段对应的地址HT1621_Send_Bits(d&0x01,4); //送数据,com0对应的低位,低到高 d=d>>1;//右移位HT1621_PORT|=_BV(HT1621_CS);}}/*=========显示小数点=========输入参数:Poi_loca,为小数点的位置(0是第一位,1是第二位) */void HT1621_Pri_Point(unsigned char Poi_loca){unsigned char seg_cnt=8;if (Poi_loca<2){ HT1621_PORT&=~_BV(HT1621_CS);HT1621_Send_Bits(0x05,3); //送写命令代码101 HT1621_Send_Bits(LCD_ADD[Poi_loca*seg_cnt+7],6); //送点对应的地址//送数据HT1621_Send_Bits(1,4);HT1621_PORT|=_BV(HT1621_CS);}}/********************************************************=======显示INT型数据dat--待显示数据********************************************************/void HT1621_Print_onlyInt(unsigned long dat){unsigned char i;unsigned char data[HT1621_DATA_NUM];if (dat>=HT1621_DATA_max)dat=dat%HT1621_DATA_max;for(i=0;i<HT1621_DATA_NUM;i++) data[i]=LCD_CODE[HT1621_NoPrint_Loc];//初始化为不显示if(dat<10) data[0] = LCD_CODE[(unsigned char) (dat)]; //个位数else if(dat<100) {data[1] =LCD_CODE[(unsigned char) (dat/10)];data[0] =LCD_CODE[(unsigned char) (dat%10)] ;}//十位数else {data[2] =LCD_CODE[(unsigned char) (dat/100%10)];data[1] =LCD_CODE[(unsigned char) (dat/10%10)] ;data[0] =LCD_CODE[(unsigned char) (dat%10)];} //百位数for(i=0;i<HT1621_DATA_NUM;i++)//从低位到高位,调用显示每个数的函数HT1621_Dis_CharHT1621_Dis_Char(data[i],i);}/*********************************************************///打印INT型数据//dat--待显示数据//chk--显示的数据位数: 0--关闭 1~3时,显示对应的数据;大于3时只显示3位;(从左到右)//point_loc--显示的小数点的位置:0以及大于2时:不显示小数点;1-显示第1个,2-显示第2个;(从左到右)/*********************************************************/void HT1621_Print_Int(unsigned long dat,unsigned char chk,unsigned char point_loc){unsigned char i;unsigned char data[HT1621_DATA_NUM];//chk为0,则屏幕不显示for(i=0;i<HT1621_DATA_NUM;i++) data[i]= LCD_CODE[HT1621_NoPrint_Loc];if(chk>0) {data[0] = LCD_CODE[(unsigned char) (dat%10)];dat=dat/10; }if(chk>1) {data[1] = LCD_CODE[(unsigned char) (dat%10)];dat=dat/10; }if(chk>2) {data[2] = LCD_CODE[(unsigned char) (dat%10)];}//显示小数点if (point_loc==1)data[0]|=0x80;else if (point_loc==2)data[1]|=0x80;//从低位到高位,调用显示每个数的函数HT1621_Dis_Charfor(i=0;i<HT1621_DATA_NUM;i++)HT1621_Dis_Char(data[i],i);}/*********************************************************/ //送d_count位数据d;从低位开始送/*********************************************************/ void HT1621_Send_Bits(unsigned char d, unsigned char d_count) {unsigned char j;for (j=0; j<d_count; ++j){HT1621_PORT&=~_BV(HT1621_WR); //wr置低;HT1621_Delay(50);if (d & 0x01==1) //置数据位; { HT1621_PORT|=_BV(HT1621_DATA); //data置0}else{ HT1621_PORT&=~_BV(HT1621_DATA); //data置1}HT1621_PORT|=_BV(HT1621_WR); //wr置高;HT1621_Delay(50);d =(d>>1); //右移位}}/*********************************************************/ //HT1621初始化/*********************************************************/void HT1621_Init(){DDRC |= _BV(4)|_BV(5)|_BV(7); //定义端口PC4-PC5-PC7输出HT1621_PORT&=~_BV(HT1621_CS); //CS端清零HT1621_Send_Bits(0x18,9); //系统时钟选用片内RCHT1621_Send_Bits(0x80,9); //打开系统振荡器HT1621_Send_Bits(0x94,9); //1/2偏置,2个公共口 1000 0100 HT1621_Send_Bits(0xc0,9); //打开LCD偏置发生器HT1621_PORT|=_BV(HT1621_CS); //CS端置1HT1621_NoPrint( ); //液晶不显示}7.结束HT1621作为液晶驱动芯片,功能十分灵活,而液晶在我们的学习项目中会经常用到,所以学好它的操作是十分必要的。

相关文档
最新文档