欢迎光临苏州启普微电子有限公司!

收藏网站 在线留言 网站地图

晶拓液晶屏

晶拓 —— 14年专注LCD液晶屏定制服务段码液晶屏设计及生产服务商

LCD液晶屏全国订制热线:400-0512-060

新闻资讯-聚焦行业,创新服务,晶拓品牌长远发展

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

作者: 晶拓小编 编辑: 晶拓液晶屏 来源: 晶拓液晶屏工厂 发布日期: 2018.09.17
信息摘要:
HT1621是128点内存映象和多功能的LCD驱动器,HT1621的软件配置特性使它适用于多种LCD应用场合,包括LCD模块和显示子系统。用…

1. 概述
HT1621是128点内存映象和多功能的LCD驱动器,HT1621的软件配置特性使它适用于多种LCD应用场合,包括LCD模块和显示子系统。用于连接主控制器和HT1621的管脚只有4或5条,HT1621还有一个节电命令用于降低系统功耗。
在虎风所做的这个系统中ht1621用于驱动一个静态的LCD液晶显示器。液晶显示的方式分为静态显示和动态显示。静态与动态的区别在于静态显示是持续供电的,而动态显示是利用人的视觉停留效果,快速扫描数码管各个段,让人在视觉上感觉到数码管是同时显示的。
2. HT1621接线原理图

Ht1621-1

3. 静态LCD结构图

Ht1621-2

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地址。

Ht1621-3

上图中写命令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 char LCD_ADD[]={0b00001100,0b00110100,0b00010100,0b00100100,0b00000100,0b00101100,0b00011100,0b00111000,0b00000010,

0b00111100,0b00011000,0b00101000,0b00001000,0b00100010,0b00010010,0b00110000,0b00001010,0b00110010,

0b00010000,0b00100000,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     { 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    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_Dis_Char(data[i],i);      
}

/*********************************************************/
//打印INT型数据
//dat--待显示数据
//chk--显示的数据位数: 0--关闭  1~3时,显示对应的数据;大于3时只显示3位;(从左到右)
//point_loc--显示的小数点的位置:0以及大于2时:不显示小数点;1-显示首位,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
    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_Char
    for(i=0;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 {
        
        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(0x01,3);            //送3位命令模式码100 0x80=0b10000000
HT1621_Send_Bits(0x18,9);            //系统时钟选用片内RC
HT1621_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端置1
HT1621_NoPrint( );                   //液晶不显示
}  
7. 结束
HT1621作为液晶驱动芯片,功能十分灵活,而液晶在我们的学习项目中会经常用到,所以学好它的操作是十分必要的。
如果你看了这篇文章还不明白,就联系客服咨询吧,嘎嘎!




 晶拓是苏州启普微电子有限公司旗下LCD液晶屏品牌,在仪器、仪表、POS系统、电话、门禁、电脑、通信、电视、智能小家电等领域占有较大的市场份额,公司十年如一日的经营始终秉乘着“以品质求生存,以创新求发展”,诚信为本的经营理念,真诚希望与您共创美好明天。咨询热线:400-0512-060

【责任编辑】: 晶拓液晶

版权所有:http:// www.chipsz.com转载请注明出处,违者本网将依法追究责任。


推荐资讯
背光板

液晶屏背光板的分类及知识点

背光板是提供LCD显示器产品中一个背面光源的光学组件。由于液晶玻璃本身不具发光特性,因此根据需要会在液晶玻璃后面加上一个发光源,即背光板。应用范围遍及医疗,美容,仪器仪表,车载设备,工业设备、银行终端、办公自动化、通讯、电子玩具及消费...
2019-10-12
​VA彩屏液晶屏应用眼部按摩仪

​VA彩屏液晶屏应用眼部按摩仪

眼部按摩仪液晶显示屏,VA屏,集美观、实用于一体...
2019-04-19
VA彩屏液晶屏应用于电动车仪表

VA彩屏液晶屏应用于电动车仪表

电动车仪表盘,VA彩屏,集美观、实用于一体...
2019-04-19

咨询热线

400-0512-060