第十七节:液晶屏第三大类定律—任意位置显示一个点(HT1621驱动段码液晶屏
段码LCD液晶屏驱动方法
段码LCD液晶屏驱动方法生活中小电器见到最多的lcd模组就是段码lcd液晶屏,段码lcd有普通的数码管的特征,又有点阵LCD的特征,固定的图形,优点是省成本而有好看,那么段码LCD液晶屏是怎么驱动的呢?下面我们就来简单了解一下:首先,不要以为用单片机来驱动就以为段码屏是直流驱动的,其实,段码屏是交流驱动,什么是交流?矩形波,正弦波等。
大家可能会经常用驱动芯片来玩,例如HT1621等,但是有些段式屏IO口比较少,或者说IO口充足的情况下,也可以省去写控制器的驱动了。
与单片机接口方便,而后者驱动电流小,功耗低、寿命长、字形美观、显示清晰、视角大、驱动方式灵活、应用广泛【1】。
但在控制上LCD较复杂,因为LCD电极之间的相对电压直流平均值必须为0【2】,否则易引起LCD氧化,因此LCD不能简单地用电平信号控制,而要用一定波形的方波序列来控制。
LCD显示有静态和时分割两种方式,前者简单,但是需要较多的口线;后者复杂,但所需口线较少,这两种方式由电极引线的选择方式确定。
下面以电子表的液晶显示为例,小时的高位同时灭或亮,分钟的高位在显示数码1~5时,其顶部和底部也是同时灭或亮,两个dot点也是同时亮或灭,其驱动方式是偏置比为1/2的时分割驱动,共有11个段电极和两个公共电极。
但是,IO模拟驱动段式液晶有一个前提条件,就是IO必须是三态,为什么?下面我们一起细细道来:第一步,段码式液晶屏的重要参数:工作电压,占空比,偏压比。
这三个参数非常重要,必须都要满足。
第二步,驱动方式:根据LCD 的驱动原理可知,LCD 像素点上只能加上AC 电压,LCD 显示器的对比度由COM脚上的电压值减去SEG 脚上的电压值决定,当这个电压差大于 LCD 的饱和电压就能打开像素点,小于LCD 阈值电压就能关闭像素点,LCD 型MCU 已经由内建的LCD 驱动电路自动产生LCD 驱动信号,因此只要I/O 口能仿真输出该驱动信号,就能完成 LCD 的驱动。
HT1621
基于PIC16F877A单片机的HT1621液晶显示控制器时间:2009-06-02 17:20来源:单片机信息网作者:admin 点击: 93次0引言 HT1621液晶显示控制器是多功能全自动智能开关的显示部件,能实时、准确、在线监控供电线路的运行情况。
一旦线路出现漏电、过载、短路、过压、欠压和缺相时,智能安全用电开关能0引言HT1621液晶显示控制器是多功能全自动智能开关的显示部件,能实时、准确、在线监控供电线路的运行情况。
一旦线路出现漏电、过载、短路、过压、欠压和缺相时,智能安全用电开关能立刻启动保护程序,并显示在HT1621液晶显示控制器上。
在智能化楼宇、中高档家庭住宅、电力系统、工矿企业、国家重点消防单位以及石油化工、文教卫生、金融、电信等领域。
基于单片机的HT1621液晶显示控制器应用广泛,其原理框图如图1所示。
美国MICROCHIP公司的PIC系列单片机主要有以下特点:(1)哈佛总线结构;(2)指令单字节化;(3)精简指令集;(4)寻址方式简单;(5)代码压缩率高;(6)运行速度高;(7)功耗低;(8)驱动能力强,达到20 mA的电流驱动能力;(9)自带硬件看门狗;(10)外接电路简单;(11)开发方便;这些特点使得PIC系列单片机在工业控制、消费电子产品、办公自动化设备、智能仪器仪表、汽车电子等不同的领域得到了广泛的应用。
1 PIC16F877A特点PIC16F877A单片机为双列直插式40引脚处理器,所有接口引脚除具有基本输入/输出功能外,一般都设计有第2功能,甚至第3功能。
它采用引脚复用技术,以便使增加功能而又不增大体积和引脚数量。
PIC16F877A单片机除了具有PIC系列单片机的共同特点外,还具有8K×14位的 Flash程序存储器,512 B数据存储器,256×8位EEP-ROM,33条I/O口线,8路10位A/D通道等。
可见,PIC16F877A非常适用于HT1621液晶显示控制。
用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中的数据并根据驱动电路的要求控制液晶显示屏中的像素亮度。
段码LCD液晶屏驱动方法
TFT液晶屏:段码LCD液晶屏驱动方法段码LCD液晶屏驱动方法首先,不要以为用单片机来驱动就以为段码屏是直流驱动的,其实,段码屏是交流驱动,什么是交流?矩形波,正弦波等。
大家可能会经常用驱动芯片来玩,例如HT1621等,但是有些段式屏IO口比较少,或者说IO口充足的情况下,也可以省去写控制器的驱动了。
与单片机接口方便,而后者驱动电流小,功耗低、寿命长、字形美观、显示清晰、视角大、驱动方式灵活、应用广泛。
但在控制上LCD较复杂,因为LCD 电极之间的相对电压直流平均值必须为0,否则易引起LCD氧化,因此LCD不能简单地用电平信号控制,而要用一定波形的方波序列来控制。
LCD显示有静态和时分割两种方式,前者简单,但是需要较多的口线;后者复杂,但所需口线较少,这两种方式由电极引线的选择方式确定。
下面以电子表的液晶显示为例,小时的高位同时灭或亮,分钟的高位在显示数码1~5时,其顶部和底部也是同时灭或亮,两个dot点也是同时亮或灭,其驱动方式是偏置比为1/2的时分割驱动,共有11个段电极和两个公共电极。
但是,IO模拟驱动段式液晶有一个前提条件,就是IO必须是三态,为什么?下面我们一起细细道来:第一步,段码式液晶屏的重要参数:工作电压,占空比,偏压比。
这三个参数非常重要,必须都要满足。
第二步,驱动方式:根据LCD的驱动原理可知,LCD像素点上只能加上AC电压,LCD显示器的对比度由COM脚上的电压值减去SEG脚上的电压值决定,当这个电压差大于LCD的饱和电压就能打开像素点,小于LCD阈值电压就能关闭像素点,LCD型MCU已经由内建的LCD驱动电路自动产生LCD驱动信号,因此只要I/O口能仿真输出该驱动信号,就能完成LCD的驱动。
段码式液晶屏幕主要有两种引脚,COM,SEG,跟数码管很像,但是,压差必须是交替变化,例如第一时刻是正向的3V,那么第二时刻必须是反向的3V,注意一点,如果给段码式液晶屏通直流电,不用多久屏幕就会废了,所以千万注意。
HT1621测试驱动程序,高手勿喷!
HT1621测试驱动程序,高手勿喷!最近在某宝淘元件的时候,一同买了几种段码LCD模块。
据说是HT1621驱动的,所以在网上搜索来搜索去。
下了好多代码,基本都是加了其他功能的,对于我一个新手来说,其实要的只是驱动显示LCD的程序就可以了。
在不断的搜索研究中发现一位网友发布的一个HT1621测试驱动程序。
这里我在里做了一点点修改和增加了一些备注。
下面上代码:1.// - - * * * * * * * HT1621 段码屏驱动 * * * * * * *2.// - - * MCU: AT89C51 单片机 *3.// - - * MCU-Crystal: 12M 24M 晶振 *4.// - - * Version: 00 版本 *5.// - - * Last Updata: *6.// - - * Author: *7.// - - * Description: HT1621 段码屏驱动 *8.// - - * C 语言程序 *9.// - - * * * * * * * * * * * * * * * * * * * * * * *10.11.12./********************************************************13.功能描述: HT1621芯片测试程序14.15.说明:本测试程序能够测试HT1621的每一个字段,16.17.依次点亮每一个字段18.19.参数:20.********************************************************/21.22.// - - 引用库23.#include24.25.26.// - - 定义函数27.#define uchar unsigned char28.#define uint unsigned int29.30.#define BIAS 0x52 //0b1000 0101 0010 1/3duty 4com31.#define SYSDIS 0X00 //0b1000 0000 0000 关振系统荡器和LCD偏压发生器32.#define SYSEN 0X02 //0b1000 0000 0010 打开系统振荡器33.#define LCDOFF 0X04 //0b1000 0000 0100 关LCD偏压34.#define LCDON 0X06 //0b1000 0000 0110 打开LCD偏压35.#define XTAL 0x28 //0b1000 0010 1000 外部接时钟36.#define RC256 0X30 //0b1000 0011 0000 内部时钟37.#define TONEON 0X12 //0b1000 0001 0010 打开声音输出38.#define TONEOFF 0X10 //0b1000 0001 0000 关闭声音输出39.#define WDTDIS 0X0A //0b1000 0000 1010 禁止看门狗40.41.// - - 定义接口42.// - - HT1621控制位(液晶模块接口定义,根据自已的需要更改)43.sbit HT1621_CS=P3^2; // - - HT1621使能引脚44.sbit HT1621_WR=P3^3; // - - HT1621时钟引脚45.sbit HT1621_DAT=P3^4; // - - HT1621数据引脚46.47.// - - 定义变量,数组48.uchar code49.Ht1621Tab[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,50.51.0x00,0x00,0x00,0x00,0x00};52.53.// - - 定义子程序函数54.void Ht1621_Init(void); // - - 初始化 HT162155.void Ht1621Wr_Data(uchar Data,uchar cnt); // - - HT1621 写入数据函数56.void Ht1621WrCmd(uchar Cmd); // - - HT1621 写入命令函数57.void Ht1621WrOneData(uchar Addr,uchar Data); // - - HT1621 在指定地址写入数据函数58.void Ht1621WrAllData(uchar Addr,uchar *p,uchar cnt); // - - HT1621 连续写入数据函数59.60.void Ht1621_delay_10us(uint n); // - - 10微秒的延时子程序61.void Ht1621_delayms(uint xms); // - - 1毫秒延时程序62.63./********************************************************64.函数名称:void Ht1621_Init(void)65.功能描述: HT1621初始化66.全局变量:无67.参数说明:无68.返回说明:无69.版本:1.070.说明:初始化后,液晶屏所有字段均显示71.********************************************************/72.void Ht1621_Init(void)73.{74.HT1621_CS=1;75.HT1621_WR=1;76.HT1621_DAT=1;77.Ht1621_delayms(500); // - - 延时使LCD工作电压稳定78.Ht1621WrCmd(BIAS);79.Ht1621WrCmd(RC256); // - - 使用内部振荡器80.Ht1621WrCmd(SYSDIS); // - - 关振系统荡器和LCD偏压发生器81.Ht1621WrCmd(WDTDIS); // - - 禁止看门狗82.Ht1621WrCmd(SYSEN); // - - 打开系统振荡器83.Ht1621WrCmd(LCDON); // - - 打开声音输出84.}85.86./******************************************************87.函数名称:void Ht1621Wr_Data(uchar Data,uchar cnt)88.功能描述: HT1621数据写入函数89.全局变量:无90.参数说明:Data为数据,cnt为数据位数91.返回说明:无92.说明:写数据函数,cnt为传送数据位数,数据传送为低位在前93.*******************************************************/94.void Ht1621Wr_Data(uchar Data,uchar cnt)95.{96.uchar i;97.for (i=0;i<>98.{99.HT1621_WR=0;100.Ht1621_delay_10us(1);101.HT1621_DAT=Data&0x80;102.Ht1621_delay_10us(1);103.HT1621_WR=1;104.Ht1621_delay_10us(1);105.Data<>106.}107.}108.109./******************************************************** 110.函数名称:void Ht1621WrCmd(uchar Cmd)111.功能描述: HT1621命令写入函数112.全局变量:无113.参数说明:Cmd为写入命令数据114.返回说明:无115.说明:写入命令标识位100116.********************************************************/ 117.void Ht1621WrCmd(uchar Cmd)118.{119.HT1621_CS=0;120.Ht1621_delay_10us(1);121.Ht1621Wr_Data(0x80,4); // - - 写入命令标志100 122.Ht1621Wr_Data(Cmd,8); // - - 写入命令数据123.HT1621_CS=1;124.Ht1621_delay_10us(1);125.}126.127./******************************************************** 128.函数名称:void Ht1621WrOneData(uchar Addr,uchar Data)129.功能描述: HT1621在指定地址写入数据函数130.全局变量:无131.参数说明:Addr为写入初始地址,Data为写入数据132.返回说明:无133.说明:因为HT1621的数据位4位,所以实际写入数据为参数的后4位134.********************************************************/ 135.void Ht1621WrOneData(uchar Addr,uchar Data)136.{137.HT1621_CS=0;138.Ht1621Wr_Data(0xa0,3); // - - 写入数据标志101139.Ht1621Wr_Data(Addr<2,6); -="" -="">140.Ht1621Wr_Data(Data<4,4); -="" -="">141.HT1621_CS=1;142.Ht1621_delay_10us(1);143.}144.145./******************************************************** 146.函数名称:void Ht1621WrAllData(uchar Addr,uchar *p,uchar cnt)147.功能描述: HT1621连续写入方式函数148.全局变量:无149.参数说明:Addr为写入初始地址,*p为连续写入数据指针,t为写入数据总数151.返回说明:无152.说明:HT1621的数据位4位,此处每次数据为8位,写入数据153.总数按8位计算154.********************************************************/ 155.void Ht1621WrAllData(uchar Addr,uchar *p,uchar cnt) 156.{157.uchar i;158.HT1621_CS=0;159.Ht1621Wr_Data(0xa0,3); // - - 写入数据标志101160.Ht1621Wr_Data(Addr<2,6); -="" -="">161.for (i=0;i<>162.{163.Ht1621Wr_Data(*p,8); // - - 写入数据164.p++;165.}166.HT1621_CS=1;167.Ht1621_delay_10us(1);168.}169.170.void Ht1621_delay_10us(uint n) // - - 10微秒的延时子程序171.{172.uint i,j;173.for(i=n;i>0;i--)174.for(j=2;j>0;j--);175.}176.177.void Ht1621_delayms(uint xms) // - - 1毫秒延时程序178.{179.uint i,j;180.for(i = xms;i > 0;i --)181.for(j = 110;j > 0;j --);182.}183.184.185./***********************************186.HT1621 测试程序,作为库文件请注释掉187.***********************************/188.void main()189.{190.uchar i,j,t;191.Ht1621_Init(); // - - 上电初始化LCD192.Ht1621_delayms(5000); // - - 延时一段时间193.while(1){194.Ht1621_delayms(2000);195.Ht1621WrAllData(0,Ht1621Tab,16); // - - 清除1621寄存器数据,暨清屏196.for (i=0;i<>197.{198.t=0x01;199.for (j=0;j<>200.{201.Ht1621WrOneData(i,t);202.t<>203.t++;204.P1_5=~P1_5; // - - 循环点亮LED205.Ht1621_delayms(500);206.}207.}208.}209.}210.经测试在12M 24M 的晶振下能正常显示。
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的序号。
HOLTEK HT1621 LCD 驱动器
或外部时钟 256KHz 产生
时基发生器和 WDT 配置图
如果系统源频率是片内振荡器频率 256KHz 或外部 256KHz 时钟频率 则被 3 阶预 分频器分成 32KHz 时基发生器和 WDT 共用同样的 8 阶计数器 所以使用与时基发生器和 WDT 相关的命令项时一定要小心 例如 执行 WDT DIS 命令使时基发生器失效 执行 WDT EN 命令不仅使时基发生器有效 而且使 WDT 溢出标志输出有效 WDT 溢出标志输出连接 到/IRQ 管脚 TIMER EN 命令执行后 WDT 不与/IRQ 相连接 时基发生器的输出连接到 /IRQ 管脚 CLRWDT 命令用于清除 WDT 溢出标志 时基发生器的值可用 CLR WDT 或 CLR TIMER 命令清除 CLR WDT 或 CLR TIMER 命令应在对应的 WDT EN 或 TIMER EN 命令 之前执行 在执行/IRQ EN 命令之前应先执行 CLR WDT 或 CLR TIMER 命令 在从 WDT 模式转换到时基模式之前 必须执行 CLR TIMER 当 WDT 溢出时 /IRQ 管脚将保持低电 平直到执行 CLR WDT 或/IRQ DIS 命令为止 当/IRQ 输出失效时 /IRQ 管脚处于高阻状态 执行/IRQ EN 或/IRQ DIS 命令使/IRQ 输出有效或无效 /IRQ EN 命令使时基发生器或 WDT 溢出标志输出到/IRQ 管脚上 时基发生器和 WDT 的配置参见图 在使用片内振荡器或晶振 的情况下 可用相关的系统命令打开或关闭振荡器 关闭振荡器后 可以降低系统功耗 在 节电模式下 时基/WDT 将失效
n/ fLCD
300 500
2.0 或 4.0
2
单位
KHz KHz KHz KHz KHz KHz
HT1621中文
广州周立功单片机发展有限公司 Tel 020 38730976 38730977 Fax:38730925
或外部时钟 256KHz 产生
时基发生器和 WDT 配置图
如果系统源频率是片内振荡器频率 256KHz 或外部 256KHz 时钟频率 则被 3 阶预 分频器分成 32KHz 时基发生器和 WDT 共用同样的 8 阶计数器 所以使用与时基发生器和 WDT 相关的命令项时一定要小心 例如 执行 WDT DIS 命令使时基发生器失效 执行 WDT EN 命令不仅使时基发生器有效 而且使 WDT 溢出标志输出有效 WDT 溢出标志输出连接 到/IRQ 管脚 TIMER EN 命令执行后 WDT 不与/IRQ 相连接 时基发生器的输出连接到 /IRQ 管脚 CLRWDT 命令用于清除 WDT 溢出标志 时基发生器的值可用 CLR WDT 或 CLR TIMER 命令清除 CLR WDT 或 CLR TIMER 命令应在对应的 WDT EN 或 TIMER EN 命令 之前执行 在执行/IRQ EN 命令之前应先执行 CLR WDT 或 CLR TIMER 命令 在从 WDT 模式转换到时基模式之前 必须执行 CLR TIMER 当 WDT 溢出时 /IRQ 管脚将保持低电 平直到执行 CLR WDT 或/IRQ DIS 命令为止 当/IRQ 输出失效时 /IRQ 管脚处于高阻状态 执行/IRQ EN 或/IRQ DIS 命令使/IRQ 输出有效或无效 /IRQ EN 命令使时基发生器或 WDT 溢出标志输出到/IRQ 管脚上 时基发生器和 WDT 的配置参见图 在使用片内振荡器或晶振 的情况下 可用相关的系统命令打开或关闭振荡器 关闭振荡器后 可以降低系统功耗 在 节电模式下 时基/WDT 将失效
插口号
液晶显示技术HT1621的应用(C语言)
HT1621的应用(C语言)#include <reg51.h>#include <intrins.h>#include <stdio.h>#define uchar unsigned char#define uint unsigned int#define nop() _nop_()#define BIAS 0X29 /*1/3偏压比,四个公共口*/#define RC256 0X18 /*系统时钟源,片内RC振荡器*/ #define SYSTEN 0X01 /*打开系统振荡器*/#define LCDON 0X03 /*打开LCD偏压发生器*/sbit CS =P1^0;sbit W =P1^1;sbit DAT=P1^2;/*0~9的段码*/uchar code Disp_NUM[]={0xED,0x60,0xA7,0xE3,0x6A,0xCB,0x4F,0xE0,0xEF,0xEB};void Init(void);void Int1621(void);void Display(void);void CMD_mode(void);void Set_Adr(uchar address); /*设置地址*/void Sent_Bnb(uchar Bytedat,n); /*送一个字节的n位*/ void Delayms(uint i);void Init(void){CS=1;W=1;DAT=1;CS=0;}void Int1621(void){CMD_mode();Sent_Bnb(SYSTEN,9);Sent_Bnb(RC256,9);Sent_Bnb(BIAS,9);Sent_Bnb(LCDON,9);}void Display(void){uchar h,i;for(h=0;h<9;h++){Set_Adr(0x00);for(i=0;i<16;i++) Sent_Bnb(*(Disp_NUM+h),8); }}void CMD_mode(void){Sent_Bnb(0x80,3);}void Set_Adr(uchar address){Sent_Bnb(0xa0,3); /*模式设置位*/ address<<=2;Sent_Bnb(address,6);}void Sent_Bnb(uchar Bytedat,n){uchar temp;for(temp=0;temp<n;temp++){W=0;nop();nop();if(Bytedat>0x80) DA T=1;else DAT=0;W=1;Bytedat<<=1;nop();}}void Delayms(uint i){uint temp;while((i--)!=0){for(temp=1000;temp!=0;temp--); }}void main(void){Init(); /*初始化*/Int1621();Init(); /*模式转换*/while(1){Display(); }}。
如何驱动液晶芯片HT1621
#define BIAS 0x50 //0b1000 0101 0000 #endif
1/3duty 4com 1/2duty 4com
#define SYSDIS 0X00
//0b1000 0000 0000 关振系统荡器和 LCD 偏压发生器
HT1621_DATA
: Pin8/PF4
HT1621_CS
: Pin18/PC1HT1621_WR: Pin25/PD0
HT1621_IRQ
: Pin27/PD2
HT1621_BACK_LED : Pin28/PD3
***********************************************************************
#define SYSEN 0X02
//0b1000 0000 0010 打开系统振荡器
#define LCDOFF 0X04
//0b1000 0000 0100 关 LCD 偏压
#define LCDON 0X06
//0b1000 0000 0110 打开 LCD 偏压
#define XTAL 0x28 //0b1000 0010 1000 外部接时钟
#define RC256 0X30
//0b1000 0011 0000 内部时钟
#define TONEON 0X12
//0b1000 0001 0010 打开声音输出
#define TONEOFF 0X10
//0b1000 0001 0000 关闭声音输出
#define WDTDIS 0X0A
//0b1000 0000 1010 禁止看门狗
一文解析段码LCD液晶屏驱动方法
一文解析段码LCD液晶屏驱动方法生活中小电器见到最多的lcd模组就是段码lcd液晶屏,段码lcd有普通的数码管的特征,又有点阵LCD的特征,固定的图形,优点是省成本而有好看,那么段码LCD 液晶屏是怎么驱动的呢?段码LCD液晶屏是如何显示的呢?跟随小编一起来了解一下吧。
段码LCD液晶屏驱动方法首先,不要以为用单片机来驱动就以为段码屏是直流驱动的,其实,段码屏是交流驱动,什么是交流?矩形波,正弦波等。
大家可能会经常用驱动芯片来玩,例如HT1621等,但是有些段式屏IO口比较少,或者说IO口充足的情况下,也可以省去写控制器的驱动了。
与单片机接口方便,而后者驱动电流小,功耗低、寿命长、字形美观、显示清晰、视角大、驱动方式灵活、应用广泛。
但在控制上LCD较复杂,因为LCD电极之间的相对电压直流平均值必须为0,否则易引起LCD氧化,因此LCD不能简单地用电平信号控制,而要用一定波形的方波序列来控制。
LCD显示有静态和时分割两种方式,前者简单,但是需要较多的口线;后者复杂,但所需口线较少,这两种方式由电极引线的选择方式确定。
下面以电子表的液晶显示为例,小时的高位同时灭或亮,分钟的高位在显示数码1~5时,其顶部和底部也是同时灭或亮,两个dot点也是同时亮或灭,其驱动方式是偏置比为1/2的时分割驱动,共有11个段电极和两个公共电极。
但是,IO模拟驱动段式液晶有一个前提条件,就是IO必须是三态,为什么?下面我们一起细细道来:第一步,段码式液晶屏的重要参数:工作电压,占空比,偏压比。
这三个参数非常重要,必须都要满足。
第二步,驱动方式:根据LCD 的驱动原理可知,LCD 像素点上只能加上AC 电压,LCD 显示器的对比度由COM脚上的电压值减去SEG 脚上的电压值决定,当这个电压差大于LCD 的饱和电压就能打开像素点,小于LCD 阈值电压就能关闭像素点,LCD 型MCU 已经由内建的LCD 驱动电路自动产生LCD 驱动信号,因此只要I/O 口能仿真输。
HT1621 LCD 控制器的使用
mov a, 2
mov code_datum, a
call send_command
jmp $+1
jmp start
;do it repeat
error:
jmp $
;******************************************
;Purpose : send command
;Parameter:
mov a, 0fh andm a, code_datum
set
CSB
ret
read endp
;------------------------------------------
;Purpose : read datum from 1621, then write a datum in the same register
temp_da
db ?
t_addr_h db ?
;----------------------------
;just a buffer
lock .SECTION 'CODE'
2
org
00h
HT48 MCU 对 HT1621 LCD 控制器的使用
jmp start
org
04h
reti
org
08h
reti
mov a, 0e3h
mov code_datum, a
call
send_command
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov a, 01h
mov code_datum, a
HT1621中文资料
插口号
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
X
58.14 58.14 58.14 58.14 58.14 58.14 58.14 58.14 55.55 48.92 42.29 35.66 29.03 22.40 15.77 9.14 2.42 -4.21 -10.84 -17.47 -24.10 -30.73 -38.17 -45.39
广州周立功单片机发展有限公司 Tel 020 38730976 38730977 Fax:38730925
系统结构 显示内存 RAM 静态显示内存 RAM 以 32 4 位的格式储存所显示的数据 RAM 的数据直接映象 到 LCD 驱动器 可以用 READ WRITE 和 READ-MODIFY-WRITE 命令访问
概述 HT1621 是 128 点 内存映象和多功能的 LCD 驱动器 HT1621 的软件配置特性使它适 用于多种 LCD 应用场合 包括 LCD 模块和显示子系统 用于连接主控制器和 HT1621 的管 脚只有 4 或 5 条 HT1621 还有一个节电命令用于降低系统功耗
采用PIC单片机HT1621液晶显示控制器原理
采用PIC单片机HT1621液晶显示控制器原理HT1621 液晶显示控制器是多功能全自动智能开关的显示部件,能实时、准确、在线监控供电线路的运行情况。
一旦线路出现漏电、过载、短路、过压、欠压和缺相时,智能安全用电开关能立刻启动保护程序,并显示在HT1621 液晶显示控制器上。
在智能化楼宇、中高档家庭住宅、电力系统、工矿企业、国家重点消防单位以及石油化工、文教卫生、金融、电信等领域。
基于单片机的HT1621 液晶显示控制器应用广泛,其原理框图如图1 所示。
美国MICROCHIP 公司的PIC 系列单片机主要有以下特点:(1)哈佛总线结构;(2)指令单字节化;(3)精简指令集;(4)寻址方式简单;(5)代码压缩率高;(6)运行速度高;(7)功耗低;(8)驱动能力强,达到20 mA 的电流驱动能力;(9) 自带硬件看门狗;(10)外接电路简单;(11)开发方便;这些特点使得PIC 系列单片机在工业控制、消费电子产品、办公自动化设备、智能仪器仪表、汽车电子等不同的领域得到了广泛的应用。
PIC16F877A 特点PIC16F877A 单片机为双列直插式40 引脚处理器,所有接口引脚除具有基本输入/输出功能外,一般都设计有第2 功能,甚至第3 功能。
它采用引脚复用技术,以便使增加功能而又不增大体积和引脚数量。
PIC16F877A 单片机除了具有PIC 系列单片机的共同特点外,还具有8K 乘以14 位的Flash 程序存储器,512 B 数据存储器,256 乘以8 位EEP-ROM,33 条I/O 口线,8 路10 位A/D 通道等。
可见,PIC16F877A 非常适用于HT1621 液晶显示控制。
HT1621 液晶驱动器概述。
HC1621液晶显示模块使用手册
*'8;8
&$7*5 + , 67%
$
" * 00#<0 = 67%
VDD VSS
V0
LEDA LEDK
controller and driver
16COM
16*2
NT7065B X 1
40SEG
controll signal
40SEG
driver NT7066U X 1
LED BACKLIGHT
-4-
清达光电技术有限公司
输入高电平
VIH
--
0.7 VDD --
VDD
V
输入低电平
VIL
--
GND
-- 0.2 VDD V
逻辑工作电流
VDD –VSS
IDD
--
1.5
--
mA
=5.0V
LCD 驱动电压*
VLCD Φ=0
Ta=25 oC
--
4.6
--
V
θ=0 *此电压由模块内部产生,客户只需用接口定义中所要求的+5.0V 即可。
LED
规格 122.0(W)×44.0(H)×13.5MAX.(T)
99.0(W)×24.0(H) 94.84(W)×20.0(H) 16 characters x 2 Lines 4.84(W)×9.66(H) 0.92(W)×1.10(H)
单位 mm mm mm --mm mm
备注
RS R/W
E DB0~DB7
符号 φ2-φ1
K
Tr(rise) Tf(fall)
(Ta=25 oC ,VDD=5.0V)
第17节:液晶屏第三大类定律—任意位置显示一个点(HT1621驱动段码液晶屏)
#define SYSTEN 0X02
#define SYSDIS 0X00
#define LCDON 0X06
(未完待续,下节更精彩,不要走开哦)
{
unsigned char i;
unsigned char y=0;
for(i=0;i<32;i++)
{
seg_display(0x00,y);
y=y+1;
}
}
(6)小结:
write_com(LCDON); //开启LCD
}
//显示基本单位点,本节的核心内容。col代表X轴,X轴的数据用位来表示,一个字节中的高4位来表示。pag代表Y轴
void seg_display(unsigned char col, unsigned char pag)
_nop_();
_nop_();
ht162x_wr_dr=1;
_nop_();
_nop_();
_nop_();
nbit<<=1;
}
}
//------------------写命令到LCD,,驱动液晶程序的一部分------------------------------
for(i=0;i<n;i++)
{
ht162x_wr_dr=0;
if(nbit>=0x80) //判断最高位
ht162x_data_dr=1;
else
ht162x_data_dr=0;
_nop_();
sbit ht162x_data_dr=P3^1;
STM32液晶显示HT1621驱动原理及程序代码
STM32液晶显⽰HT1621驱动原理及程序代码1、HT1621电路分析HT1621为32×4即128点内存映像LCD驱动器,包含内嵌的32×4位显⽰RAM内存和时基发⽣器以及WDT看门狗定时器.HT1621驱动电路如下图所⽰:与单⽚机相连接控制的有9脚CS,3脚WR,12脚DATA,其功能描述如下表。
2、字符显⽰原理液晶管点亮和熄灭原理分别为在对应的RAM地址中写1和写0.⾸先需要清楚所驱动控制的液晶的COM-SEG对应关系,然后需要了解HT1621的32×4RAM地址映射。
例如要控制的液晶的装脚成品图部分如下:着重看⼀个液晶数码管,我们了解原理就⾏。
可以看到图3中是第2个液晶数码管,有7段,分别为A,B,C,D,E,F,G。
也就分别为下⾯COM\SEG地址对应关系图中的2A,2B,2C,2D,2E,2F,2G。
液晶的显⽰字符的部分COM公共端输出⼝和SEG段输出⼝的分布如下表所⽰,同理我们可以看到例如:2D对应(SEG5,COM0),2E对应(SEG5,COM1),2F对应(SEG5,COM2),2A对应(SEG5,COM3),2C对应(SEG4,COM1),2G对应(SEG4,COM2),2B对应(SEG4,COM3)。
搞清楚我们要控制的对象之后那, HT1621的RAM 地址映射如下图所⽰:可以清楚的看到要控制液晶段对应SEG号作为6位地址,COM号对应作为4位数据写⼊,此时注意4位数据的⾼低位。
写数据到RAM命令格式为:101+6位RAM地址+4位数据,其中RAM地址为SEG序号.例如我们在图3的第⼆个液晶数码管上显⽰数字,⾸先我们根据图3得到地址映射关系,先写⼊地址SEG4中的四位数据(COM3,COM2,COM1,COM0),再写如地址SEG5中的四位数据(COM3,COM2,COM1,COM0),对应关系如下:。
ht1621中文资料
典型 值
150 300 60 120
最大 值 5.2 300 600 120 240
单位
V
A A A A
rm.
IDD 工作电流
3V 不带负载 5V 外部时钟源
100 200 A 200 400 A
a
ISTB VIL VIH IOL1 IOH1 IOL2 IOH2 IOL3 IOH3 RPH
待机电流
时基和看门狗定时器 WDT 时基发生器是一个 8 态增值尖峰计数器 可以产生准确的时基 WDT 由时基发生器和 一个 2 态增值尖峰计数器组成 它可以在主控制器或其它子系统处于异常状态时产生中断 WDT 溢出时产生片内 WDT 溢出标志 可用一命令选项使时基发生器和 WDT 溢出标志输 出到/IRQ 管脚 时基发生器和 WDT 时钟频率有 8 种 fWDT=32KHz/2n 这里的 n 值为 0 7 由命令项决定 等式中 32KHz 为系统频率 由晶振 32.768KHz 片内振荡器 (256KHz)
海纳电子资讯网:www.fpga-arm.com 为您提供各种IC中文资料
广州周立功单片机发展有限公司 Tel 020 38730976 38730977 Fax:38730925
HOLTEK HT1621 LCD 驱动器
特性
* 工作电压 2.4 5.2V
* 内嵌 256KHz RC 振荡器 * 可外接 32KHz 晶片或 256KHz 频率源输入
32.768 32.768 256 256 fSYS1/102 4 fSYS2 /128 fSYS3/102 4
n/ fLCD
KHz KHz KHz KHz
Hz
Hz
rm.
a Hz
-s
第十六节:液晶屏第三大类定律—任意位置显示一个点(彩色320240点阵屏)
第十六节:液晶屏第三大类定律—任意位置显示一个点(彩色320240点阵屏)第三大类定律:任意位置显示一个点的类型。
这类液晶屏在任意位置上以一个点为基本单位,因此X坐标数值的最大范围就直接是横向上的点阵数减去一(因为从零开始)。
而Y坐标数值的最大范围就直接是纵向上的点阵数减去一(因为从零开始)。
(1)开场白:这节我以彩色320240点阵屏为例子,来继续深入了解第三大类定律:任意位置显示一个点的类型。
彩色320240点阵屏跟TFT彩屏有点不一样,彩色320240点阵屏是低像素的屏,仅仅适合显示有颜色的图标或者字体,不能显示照片或者图像等,单片机驱动它完全没有问题。
TFT彩屏是高像素的屏,可以显示照片或者图像,用单片机驱动会显得力不从心,必须用高级的芯片,比如ARM系列的。
我这节讲的彩色320240点阵屏是用什么驱动IC呢?这个我也没有仔细去查,反正这类屏很常用,从深圳南头关外的107国道开往固戍方向的小型公共汽车上,就可以看到驾驶室仪表上用的就是这个屏,黑底红字,视觉效果非常棒。
如果读者看了鸿哥之前几节关于液晶显示屏的文章,相信读者能摸出了我做液晶驱动程序的套路:第一步:当我拿到一款新的液晶屏时,我会先从液晶厂家要回一个演示驱动程序,如果厂家没有就想办法在网上下载一个。
靠看驱动芯片的PDF文档写驱动程序是最笨的一个办法。
第二步:厂家或者网上的演示驱动程序大部分都是很乱,没有规则的,但是不用怕,只要根据“吴坚鸿液晶显示三大类定律“的指导思想,在别人的演示驱动程序中寻找到最核心的东西,也就是显示的基本单位是属于三种类型中的哪一种,最后根据显示单位的类型自己动手编写几个最核心的程序void zf_display816, void hz_display1616, void hz_display2424就够了,其它初始化的寄存器参数从来不用管,照抄就可以了。
彩色320240液晶屏实际上就是由一块彩色320240液晶屏组成的,没有分屏合并的概念。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十七节:液晶屏第三大类定律—任意位置显示一个点(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两个点。
(3)硬件原理:
用单片机的3个IO口分别跟HT1621的CS,WR,DATA连接。
(4)源码适合的单片机:STC11F04E,晶振为11.0592MHz。
(5)源代码讲解如下:
#include "REG52.H"
#include "absacc.h"
#include "intrins.h"
#include "stdio.h"
#define BIAS 0X52 //此处千万小心,鸿哥在上个月的一个项目中就是在这里被卡了7天。
//必须跟硬件电路的COM匹配。
1个或者2个COM:0x42。
3个COM:0x4A。
4个COM:0x52
#define RC256 0X30
#define SYSTEN 0X02
#define SYSDIS 0X00
#define LCDON 0X06
void SendBitToHT1621(unsigned char nbit,unsigned char n);//发送一个字节中的N位到HT1621里,驱动程序的最底层部分
void write_com(unsigned char cmdcode); //写命令到LCD
void init_lcd(); //--初始化LCD屏
void seg_display(unsigned char col, unsigned char pag); //显示基本单位点
void screen_clear (); //清空屏幕的内容
//补充说明:吴坚鸿程序风格是这样的,凡是输出IO后缀都是_dr,凡是输入的//IO后缀都//是_sr
sbit ht162x_data_dr=P3^1;
sbit ht162x_cs_dr=P3^6;
sbit ht162x_wr_dr=P3^0;
main()
{
init_lcd(); //初始化液晶屏
screen_clear ();//清空整屏显示内容
seg_display(0x30,1); //在COM和SEG组成的4X32表格中,显示第二行的第3和第4两个点。
while(1)
{
;
}
}
//发送一个字节中的N位到HT1621里,驱动程序的最底层部分
void SendBitToHT1621(unsigned char nbit,unsigned char n)
unsigned char i;
for(i=0;i<n;i++)
{
ht162x_wr_dr=0;
if(nbit>=0x80) //判断最高位
ht162x_data_dr=1;
else
ht162x_data_dr=0;
_nop_();
_nop_();
_nop_();
ht162x_wr_dr=1;
_nop_();
_nop_();
_nop_();
nbit<<=1;
}
}
//------------------写命令到LCD,,驱动液晶程序的一部分------------------------------ void write_com(unsigned char cmdcode)
{
ht162x_cs_dr=0; //选通HT1621
_nop_();
_nop_();
SendBitToHT1621(0x80,4);
SendBitToHT1621(cmdcode,8);
_nop_();
_nop_();
ht162x_cs_dr=1;
_nop_();
_nop_();
_nop_();
}
//*------------------初始化LCD屏--------------------------*/
void init_lcd()
{
write_com(SYSTEN); //Turn on system oscillator
write_com(RC256); //启动内部256KRC 振荡器
write_com(BIAS); // 1/3 bais . 4 duty
write_com(LCDON); //开启LCD
//显示基本单位点,本节的核心内容。
col代表X轴,X轴的数据用位来表示,一个字节中的高4位来表示。
pag代表Y轴
void seg_display(unsigned char col, unsigned char pag)
{
pag<<=2;
ht162x_cs_dr=0; //选通HT1621
_nop_();
_nop_();
SendBitToHT1621(0xA0,3); //发送写数据模式101
SendBitToHT1621(pag,6); //发送Y轴数据
SendBitToHT1621(col,4); //发送X轴数据
ht162x_cs_dr=1;
_nop_();
_nop_();
}
//*------------------清空屏幕的内容---------------*/
void screen_clear ()
{
unsigned char i;
unsigned char y=0;
for(i=0;i<32;i++)
{
seg_display(0x00,y);
y=y+1;
}
}
(6)小结:
因为段码屏是一种客户定做的屏,每种屏的字库表都会不一样,因此我在这节只列出最核心的驱动程序,上层的应用程序大家以后根据项目自己编写,只要多利用查表,与(&)和或
(|)这两种位运算符来处理,不难。
软件设置初始化HT1621的配置参数时,要特别注意实际电路上用了多少个COM,然后设置相等的COM配置,否则,应用在大段码显示屏的项目时,有可能因为驱动力不够,会显示乱码。
鸿哥在上个月的一个项目中就是被这样的问题卡住了,还好鸿哥功力深厚,仅仅用了7天就找出了问题,现在分享给大家。
(未完待续,下节更精彩,不要走开哦。