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

上传人:b****6 文档编号:7527324 上传时间:2023-01-24 格式:DOCX 页数:6 大小:17.02KB
下载 相关 举报
HT液晶显示驱动详细原理及程序.docx_第1页
第1页 / 共6页
HT液晶显示驱动详细原理及程序.docx_第2页
第2页 / 共6页
HT液晶显示驱动详细原理及程序.docx_第3页
第3页 / 共6页
HT液晶显示驱动详细原理及程序.docx_第4页
第4页 / 共6页
HT液晶显示驱动详细原理及程序.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

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

《HT液晶显示驱动详细原理及程序.docx》由会员分享,可在线阅读,更多相关《HT液晶显示驱动详细原理及程序.docx(6页珍藏版)》请在冰豆网上搜索。

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

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

Ht1621液晶显示详细驱动使用说明以及程序

1.概述

HT1621是128点内存映象和多功能的LCD驱动器,HT1621的软件配置特性使它适用于多种LCD应用场合,包括LCD模块和显示子系统。

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

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

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

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

2.HT1621接线原理图

3.静态LCD结构图

4.几个曾经纠结的概念

Timebase:

时基,即时间基准,可以用来输出,作为外部时钟的时间基准。

占空比:

将所有公共电极(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.程序

UnsignedcharLCD_ADD[]={0b00001100,0b00110100,0b00010100,0b00100100,0b00000100,0b00101100,0b00011100,0b00111000,0b00000010,0b00111100,0b00011000,0b00101000,0b00001000,0b00100010,0b00010010,0b00110000,0b00001010,0b00110010,0b00010000,0b00100000,0b00000000,0b00101010,0b00011010};

voidHT1621_Dis_Char(unsignedchard,unsignedchard_loca)

{

unsignedcharj;

unsignedcharseg_cnt=8;

if(d_loca==(HT1621_DATA_NUM-1))

seg_cnt=7;

//送3位模式码101及6位首地址0000000b000000101

for(j=0;j

{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是第二位)

*/

voidHT1621_Pri_Point(unsignedcharPoi_loca)

{

unsignedcharseg_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--待显示数据

********************************************************/

voidHT1621_Print_onlyInt(unsignedlongdat)

{

unsignedchari;

unsignedchardata[HT1621_DATA_NUM];

if(dat>=HT1621_DATA_max)

dat=dat%HT1621_DATA_max;

for(i=0;i

if(dat<10)data[0]=LCD_CODE[(unsignedchar)(dat)];//个位数

elseif(dat<100){data[1]=LCD_CODE[(unsignedchar)(dat/10)];

data[0]=LCD_CODE[(unsignedchar)(dat%10)];}//十位数

else{

data[2]=LCD_CODE[(unsignedchar)(dat/100%10)];

data[1]=LCD_CODE[(unsignedchar)(dat/10%10)];

data[0]=LCD_CODE[(unsignedchar)(dat%10)];

}//百位数

for(i=0;i

HT1621_Dis_Char(data[i],i);

}

/*********************************************************/

//打印INT型数据

//dat--待显示数据

//chk--显示的数据位数:

0--关闭1~3时,显示对应的数据;大于3时只显示3位;(从左到右)

//point_loc--显示的小数点的位置:

0以及大于2时:

不显示小数点;1-显示第1个,2-显示第2个;(从左到右)

/*********************************************************/

voidHT1621_Print_Int(unsignedlongdat,unsignedcharchk,unsignedcharpoint_loc)

{

unsignedchari;

unsignedchardata[HT1621_DATA_NUM];

//chk为0,则屏幕不显示

for(i=0;i

if(chk>0){data[0]=LCD_CODE[(unsignedchar)(dat%10)];

dat=dat/10;}

if(chk>1){data[1]=LCD_CODE[(unsignedchar)(dat%10)];

dat=dat/10;}

if(chk>2){data[2]=LCD_CODE[(unsignedchar)(dat%10)];

}

//显示小数点

if(point_loc==1)

data[0]|=0x80;

elseif(point_loc==2)

data[1]|=0x80;

//从低位到高位,调用显示每个数的函数HT1621_Dis_Char

for(i=0;i

HT1621_Dis_Char(data[i],i);

}

/*********************************************************/

//送d_count位数据d;从低位开始送

/*********************************************************/

voidHT1621_Send_Bits(unsignedchard,unsignedchard_count)

{

unsignedcharj;

for(j=0;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初始化

/*********************************************************/

voidHT1621_Init()

{

DDRC|=_BV(4)|_BV(5)|_BV(7);//定义端口PC4-PC5-PC7输出

HT1621_PORT&=~_BV(HT1621_CS);//CS端清零

HT1621_Send_Bits(0x18,9);//系统时钟选用片内RC

HT1621_Send_Bits(0x80,9);//打开系统振荡器

HT1621_Send_Bits(0x94,9);//1/2偏置,2个公共口10000100

HT1621_Send_Bits(0xc0,9);//打开LCD偏置发生器

HT1621_PORT|=_BV(HT1621_CS);//CS端置1

HT1621_NoPrint();//液晶不显示

}

7.结束

HT1621作为液晶驱动芯片,功能十分灵活,而液晶在我们的学习项目中会经常用到,所以学好它的操作是十分必要的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1