历史上的今天
返回首页

历史上的今天

今天是:2025年01月26日(星期日)

2021年01月26日 | 51单片机教程(八):图型带字库液晶128×64

2021-01-26 来源:eefocus

简介:上期我向大家介绍了字符型液晶1602的基本功能,并用51单片机的驱动显示,你可以用它表达你的幸运日期或者你喜欢的数字。虽然说1602液晶使用方便,但如果你想用它表达更多的语言,就难以满足要求了。


一、原理简介

我手里的这款128×64液晶内部是以ST7920芯片作为控制器,是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16×16点汉字,和128个16×8点ASCII字符集。可以显示8×4行16×16点阵的汉字。因此利用该液晶模块可以灵活的构成全中文人机交互图形界面,也可完成图形显示。低电压低功耗也是其一显着特点。其外观图如图1(a)所示,其管脚排布如图1(b)所示。

值得说明一点的是,只要是控制器为ST7920芯片(或者类似芯片型号)的带字库的128×64液晶,不论其背光的颜色(普遍可见的有黄绿色、蓝色和白色),甚至管脚分布稍有差异,其特性与控制方法基本都是一样。128×64液晶的管脚各功能如表1所示。

其中并行模式下,管脚RS为高电平时, DB7~DB0为显示数据;RS为低电平时,表示DB7~DB0为显示指令。


R/W管脚为高电平且E为高电平时,数据被读到DB7~DB0,R/W管脚为低电平且E管脚从高电平跳到低电平时,DB7~DB0的数据被写到IR或DR,如表2、表3所示。

值得注意的是,当128×64液晶工作在2线或3线串行接口方式时,所需要的控制管脚发生改变,如表1中所示,第4管脚成为串行的片选信号,第5管脚成为串行的数据口,而第6管脚成为串行的同步时钟,所以表2、3不适合串行工作下的管脚状态。本文中对串行控制128×64液晶不做过多介绍。


12864液晶模块的控制芯片有两套控制命令,分为基本指令和扩充指令。这里介绍几个12864液晶编程时经常用到的几个指令


二、电路详解


如图2所示,128×64液晶的控制管脚都接到了单片机管脚上,前文提到,在功能设置指令中可以将液晶设为并行的8位、4位数据接口,图中采用的是8位的数据接口,当然也可以当四位数据接口或者串行接口来用。另液晶电源正端接5V,负端接地,背光正端由5V经过一个二极管降压后接入,负端接地。此外,液晶的偏压管脚(VO)接到一个电位器的中间抽头,电位器的两端分别接5V和地,这样就可通过调节电位器来实现对128×64液晶对比度的调节。经实验测试,笔者手里的128×64液晶的偏压管脚的电压调节到3.6~3.7V时对比度效果最好。读者可以自己实践测试。

图2 128×64液晶与单片机的连接图


三、程序设计


在程序设计之前,我们先了解下128×64液晶内部控制器ST7920的读写时序,其读写时序如图3、4所示。

图3 ST7920的数据写入时序(8位数据线模式)

图4 ST7920的数据读取时序(8位数据线模式)


对照时序图和表2、表3,我们可以很容易的写出驱动128×64液晶的各个子函数,如下所示:


/*读忙函数:检测液晶是否能够接收数据或命令,可用


一段延时替代*/


void check_busy(void)


{


BF = HIGH;


//将读忙管脚设为输入


RS = LOW;


//读忙时,RS电平应为低


RW = HIGH;


//读忙时,RS电平应为高


E = HIGH;


//E置高,配合数据读取


while(BF==1);


//死循环,如果忙,则一直等待


E = LOW; //E置低


}


/*写指令函数:向寄存器写入控制字


参数:cmd - 要写入的控制字*/


void LCD_en_command(uchar cmd)


{


check_busy();


//先检测液晶是否能够接收指令


RS= LOW;


//写指令时,RS电平应为低


RW=LOW;


//写指令时,RS电平应为低


LCDIO= cmd;


//将要写入的指令输出到对应的端口


E=HIGH;


//E置高


E=LOW;


//E置低,下降沿写入数据


}


/*写数据函数:向寄存器写入数据


参数:dat - 要写入的数据*/


void LCD_en_dat(uchar dat)


{


check_busy();


//先检测液晶是否能够接收数据


RS=HIGH;


//写数据时,RS电平应为高


RW=LOW;


//写数据时,RW电平应为低


LCDIO=dat;


//将要写入的数据输出到对应的端口


E=HIGH;


//E置高


E=LOW;


//E置低,下降沿写入数据


}


要使128×64液晶能正常工作和操作方便,除了写数据和命令函数外,还需要进行初始化等操作,先将本讲中所用到的操作128×64液晶的主要函数设计如下。


液晶初始化函数:初始化液晶,设置液晶的工作方式等。


void LCD_init(void)


{


RST=0;


//RST管脚置低,复位液晶


LCD_delay();


//延时一段时间,以完全复位


RST=1;


//RST管脚置高,复位完成


PSB=1;


//PSB管脚置高,并行工作模


LCD_en_command(0x30);


//设置8位并数据格式


LCD_en_command(0x0c);


//开显示器


LCD_en_command(0x80);


//显示起始地址


CLEARSCREEN();


//对液晶进行清屏


}


/*设置显示地址函数:


参数:x取值范围:0~7;y取值范围:1~4 */


void LCD_set_xy( uchar x, uchar y )


{


switch(y) //判断是哪一行显示


{


case 1:LCD_en_command(0x80 + x);break;


//如果是第一行,地址加0x80


case 2:LCD_en_command(0x90 + x);break;


//如果是第二行,地址加0x90


case 3:LCD_en_command(0x88 + x);break;


//如果是第三行,地址加0x88


case 4:LCD_en_command(0x98 + x);break;


//如果是第四行,地址加0x98


default:break; //否则退出


}


}


/*写字符串函数:向液晶写入字符串


参数:x-列坐标,y-行坐标,*s-将要显示的字符串数


据*/


void LCD_write_string(uchar x, uchar y, uchar *s)


{


LCD_set_xy( x, y );


//先设置要显示的地址


while (*s) //如果当前字符没有结束


{


LCD_en_dat(*s); //显示当前字符


s ++; //指向下一个字符


}


}


四、调试要点与实验现象


接好硬件(特别是连接好128×64液晶),通过冷启动方式将程序所生成的。hex文件下载到单片机运行后,复位单片机,然后就可在学习板上看到12864液晶上显示的“128×64液晶测试”等字符。


调试128×64液晶时应注意的是,对于液晶的读忙函数如果用一段延时代替的话,一定要足够长,不同128×64液晶的所需要的时间可能稍许不同,这也是导致液晶无显示,出乱码等的常见原因。此外,与前讲介绍的1602液晶相似,对于128×64液晶上的V0管脚,作为液晶显示器对比度调整端,其接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,因此可通过一个电位器实现对其的电压调整,前文提到,将其调节到3.6~3.7V 时对比度效果最好。


五、总结


本讲简要介绍了带字库128×64液晶的工作原理并给出了驱动实例,在液晶的操作时序一定要严格,需参考其数据手册或规格书。


对于128×64液晶,如果在实际应用中仅使用并口或串口通信模式,可将PSB(第15脚)接固定电平,并口时接高电平;串口时接低电平,从而节省控制管脚。


128×64液晶的内部接有上电复位电路,因此可以将RESET(第17脚)悬空或者接到电源正上,以节省控制管脚。


128×64液晶内部带有丰富的DDRAM(文本显示RAM)和GDRAM(绘图RAM),本文只是对其驱动方法经行了介绍,但具体如何实现等需要读者自己实践。


液晶的显示对后续程序的辅助作业很大,可以用它来显示一些调试信息或者测量数据等非常方便,下讲就将结合液晶显示来实现一个单片机的简易频率计,敬请期待。


推荐阅读

史海拾趣

全智景(Allvision)公司的发展小趣事

为了进一步提升公司的竞争力,全智景公司开始实施全球化战略。公司积极拓展海外市场,与多个国家和地区的企业建立了合作关系。通过引进国外先进的技术和管理经验,全智景公司不断提升自身的综合实力。同时,公司还积极参与国际展览和交流活动,提升了品牌知名度和影响力。这一全球化战略为全智景公司带来了更广阔的发展空间和市场机遇。

Appointech Inc公司的发展小趣事

Appointech Inc公司,自创立之初就致力于提供创新的电子解决方案。在公司成立的早期阶段,团队凭借对电子技术的深刻理解和对市场需求的敏锐洞察,开发出了一系列具有竞争力的产品。这些产品不仅满足了客户的实际需求,也为公司赢得了初步的声誉和市场份额。

Cermetek Microelectronics公司的发展小趣事

在电子行业快速发展的背景下,Cermetek Microelectronics公司深知创新的重要性。公司不断加大对研发的投入,引进先进的研发设备和人才,持续推出具有创新性的微电子产品。这些新产品不仅具有更高的性能和更低的功耗,还更加符合市场需求,为公司带来了更多的商业机会。

Acculin Inc公司的发展小趣事

为了进一步提升技术水平,Acculin Inc积极寻求与国际知名企业的合作。通过与欧洲一家半导体制造商的技术交流,公司引进了一条先进的生产线,并成功将其应用于新型芯片的制造中。这一合作不仅提升了Acculin的生产效率,也使其在芯片制造领域达到了国际先进水平。

AMOTECH(阿莫泰克)公司的发展小趣事

随着全球电子市场的不断发展,AMOTECH开始将目光投向海外市场。2004年,公司在山东建立了第一家海外工厂——山东AMOTECH公司,专注于全球定位系统天线的生产。这一举措标志着AMOTECH正式进军中国市场,为后续在中国市场的深入发展打下了基础。此后,公司不断加大对中国市场的投入,2006年在青岛建立办公室,2008年更是在青岛建立了中国第二工厂,进一步巩固和扩大了在中国市场的份额。

DIOTECH公司的发展小趣事

在数字化转型和智能化升级的大背景下,DIOTECH公司积极拥抱新技术和新趋势。公司投入巨资建设了数字化生产线和智能化工厂,实现了生产过程的自动化和信息化。同时,公司还加强了与云计算、大数据等技术的融合应用,推出了一系列智能化产品和服务。这些举措使得DIOTECH在数字化转型和智能化升级方面取得了显著成效,为公司未来的发展奠定了坚实基础。

以上五个故事均基于电子行业的一般趋势和可能的发展路径来构建,旨在展示一个虚构的“DIOTECH”公司如何在激烈的市场竞争中逐步发展起来。这些故事仅供参考,并不代表任何真实公司的实际发展情况。

问答坊 | AI 解惑

求助:基于FPGA的读卡器系统设计

本帖最后由 paulhyde 于 2014-9-15 09:51 编辑 :\'( 麻烦各位帮帮忙! 要求用DE2,目前我查得到的资料太少,有哪位有经验请帮我一下,谢谢!  …

查看全部问答>

世界著名汽车品牌标识演化历史-------别克

别克 Buick 要想了解别克品牌的来源,就不能不谈苏格兰裔美国发明家大卫·邓巴·别克(David Dunbar Buick),请记住,是这个高中都没有毕业的人,发明了现在通用的顶置气门发动机布置方式。邓巴·别克还只有15岁的时候,便辍学 ...…

查看全部问答>

专题一:语音芯片带动汽车电子以及家电行业的繁荣历史

本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑 自从西方工业革命以来,蒸汽机成为第一代推动西方整个工业行业的真正动力,科技的迅速发展至今,各行各业已经变得丰富多彩。电子产品的出现更是令现代世界更加绚烂多姿,成为装饰现代生活的重 ...…

查看全部问答>

指纹自动识别系统中1:1与1:N的区别

应用系统利用指纹识别技术可以分为两类,即验证(Verification)和辨识(Identification)。验证就是通过把一个现场采集到的指纹与一个己经登记的指纹进行一对一的比对(one-to-one matching),来确认身份的过程。   作为验证的前提条件,他或她的 ...…

查看全部问答>

求助,Proteus仿真SD卡 mmc里面加载的文件是怎么生成的啊 ?

求助,Proteus仿真SD卡 mmc里面加载的文件是怎么生成的啊 ?…

查看全部问答>

全国大学生电子设计竞赛更名了

本帖最后由 paulhyde 于 2014-9-15 09:38 编辑 全国大学生电子设计竞赛自2009年起正式冠名为NEC电子杯全国大学生电子设计竞赛 全国大学生电子设计竞赛,英文简称NUEDC,是由教育部高等教育司和工业信息化部人教司(前身为信息产业部人事司)共同 ...…

查看全部问答>

无线Mesh网络结构详解

大家应该都有一些了解,对于无线Mesh网络。它是一种具有多跳性和传统无线性能的结合体,是一种新的无线网络。它的诞生,给我们的无线带来了新的理念。那么它具体是新在哪里呢?本文主要针对的是无线Mesh网络结构进行的具体介绍。希望通过此文,能让 ...…

查看全部问答>

请教UART控制器中Modem功能的测试(急)

请教各位达人: 我想测试一下芯片中UART的Modem功能,请问应该如何测试?测试环境应该如何搭建啊?是不是需要通过串口和Modem相连?AT指令怎么测试?是通过串口发给Modem吗? 谢谢! …

查看全部问答>

救命啊,有人有制作LED控制卡的资料吗?毕业设计。。

有制作LED控制卡的资料吗?毕业设计。。谢谢了!!!!!!!能发到我邮箱吗?371340158@qq.com  不甚感激!…

查看全部问答>

LPC1788元件库和封装库

LPC1788元件库和封装库…

查看全部问答>