当前位置:首页 > 单片机 > 单片机
[导读]引言液晶显示器(LCD)具有功耗低、体积小、重量轻、超薄等许多其它显示器无法比拟的优点,近几年来被广泛用于单片机控制的智能仪器、仪表和低功耗电子产品中。LCD可分为段位式LCD、字符式LCD和点阵式LCD。其中,段位式

引言

液晶显示器(LCD)具有功耗低、体积小、重量轻、超薄等许多其它显示器无法比拟的优点,近几年来被广泛用于单片机控制的智能仪器、仪表和低功耗电子产品中。LCD可分为段位式LCD、字符式LCD和点阵式LCD。其中,段位式LCD和字符式LCD只能用于字符和数字的简单显示,不能满足图形曲线和汉字显示的要求;而点阵式LCD不仅可以显示字符、数字,还可以显示各种图形、曲线及汉字,并且可以实现屏幕上下左右滚动,动画功能,分区开窗口,反转,闪烁等功能,用途十分广泛。本文介绍了点阵式液晶显示器MGLS12864与单片机的接口及编程的方法,同时介绍了创建8×16字符和16×16点阵汉字的方法,及常用的字符显示和汉字显示程序。

硬件设计

这里着重介绍液晶显示器与单片机的接口技术。有关MGLS12864图形液晶引脚功能及控制器HD61202的接口时序波形,可查看图形液晶显示器产品有关手册。

单片机可以通过数据总线与控制信号直接采用存储器访问形式、I/O设备访问形式控制该液晶显示模块。本文以华邦公司的W78E58为例,它是 51系列单片机兼容的微控制器,其内部有32KB的FLASH EEPROM,用户编制的程序及需要显示的英文字母、数字、汉字、曲线和图形都可以存储在里面,免去了扩展外部存储器的麻烦,使得以W78E58单片机为核心的控制系统电路更简单。因此十分适用于液晶显示。MGLS12864与W78E58单片机接口电路如图1所示。该图采用直接访问方式,单片机通过低位地址A2控制CSA;A3控制CSB,以选通液晶显示屏上各区的控制器HD61202;同时W78E58用地址A1作为R/W信号控制数据总线的数据流向;用地址A0作为D/I信号控制寄存器的选择;E信号由W78E58的读信号/RD和写信号/WR合成产生;另外单片机的复位脚(9脚)经反相器后连接到液晶显示器复位脚(17脚 /RST),当单片机上电复位或手动复位时, 液晶显示器同时也复位;从而实现了W78E58对内置HD61202图形液晶显示器模块的电路连接。电路中LCD电源控制端VO是用来调节显示屏灰度的,调节该端的电压,可改变显示屏字符、图形的颜色深浅。

单片机对液晶显示模块的操作可分为两部分,即左半屏和右半屏操作。下面是根据图1的连接确定对应左半屏(前64×64)和右半屏(后64×64)操作地址:

CWADR1 EQU 0004H 左半屏写指令代码地址 DWADR1 EQU 0005H 左半屏写显示数据地址

CRADR1 EQU 0006H 左半屏读状态字地址 DRADR1 EQU 0007H 左半屏读显示数据地址

CWADR2 EQU 0008H 右半屏写指令代码地址 DWADR2 EQU 0009H 右半屏写显示数据地址

CRADR2 EQU 000AH右半屏读状态字地址 DRADR2 EQU 000BH 右半屏读显示数据地址


图1 MGLS12864与W78E58接口图

软件设计

液晶控制器HD61202一共有七条指令,从作用上可分为两类,显示状态设置指令和数据读/写操作指令。详见指令系统可查看图形液晶显示器产品有关手册。显示起始行设置中L5~L0为显示起始行的地址,取值在0-3FH(1-64行)范围内。页面地址设置中P2-P0为选择的页面地址,取值范围为0- 7H,代表1-8页。列地址设置中C5-C0为Y地址计数器的内容,取值在0-3FH(1-64行)范围内。

显示器上128点×64点,每8点为一字节数据,都对应着显示数据RAM(在HD61202芯片内),一点对应一个bit,计算机写入或读出显示存储器的数据代表显示屏上某一点列上的垂直8点行的数据。D0代表最上一行的点数据,D1为第二行的点数据,…….,D7为第八行的点数据。该bit=1时该点则显示黑点出来,该bit=0 时该点则消失。另外LCD指令中有-条display ON/OFF指令,display ON时显示RAM数据对应显示的画面;display OFF则画面消失,RAM中显示数据仍存在。

点阵字模文件的建立:由于MGLS12864液晶显示器没有内部字符发生器,所以在屏幕上显示的任何字符、汉字等须自己建立点阵字模库,然后均按图形方式进行显示。由于 HD61202显示存储器的特性,不能将计算机内的汉字库和其它字模库提出直接使用,需要将其旋转90度后再写入。点阵字模库建立包括以下几个方面:

(1) 建立8×16点阵常用字符、数字、符号字模库。

可选用计算机BIOS中ASCII的8×16字模库,所有字符按照ASCII值从小到大升序排列。

    mov bh,6 /*AL=30h 取点阵信息 */
  int 10h /*BH=6 取ROM8X16点阵指针(VGA) */
  mov ax,es /*出口:ES:BP 指向字库指针 */
  mov ascii_es,ax
  mov ax,bp
  mov ascii_bp,ax };
  ascii_offset=ascii_bp+16*asciicode;
  for(j=0;j<16;j++) buf[j]=peekb(ascii_es,ascii_offset+j); /*读16字节点阵数据*/
  for(m=0;m<16;m++) /*点阵数据转换成LCD格式数据*/
  { if(m<8) { beginbyte= 7; shiftn=7;}
  else { beginbyte=15; shiftn=15;}
  for(j=0;j<8;j++)
  ascii8x16[m]=(ascii8x16[m]+ (buf[beginbyte-j]>>(shiftn-m))&0x01)<<1;
  }

也可选用UCDOS的ASC16文件做字模库。ASC16文件的字符为8×16点阵。所有字符按照ASCII值从小到大升序排列。计算字符首地址的公式:字符首地址=字符的ASCII码值×16+字模库首地址。
 
(2) 建立所用到的16×16点阵字模库。

汉字字符可选用UCDOS的HZK16文件做字模库。HZK16文件的字符为16×16点阵。所有字符按照区位码从小到大升序排列。计算汉字字符首地址的公式如下:汉字首地址=((区码-1)×94+位码-1)×32。作者用C语言编写的读取UCDOS点阵字库字模程序,完成字模读取、数据重新排列,并按MCS-51汇编程序的要求写成相应格式的文本文件。


  p=((quma-1)*94+weima-1)*32;
  cclibfile=fopen("HZK16","rb");
  fseek(cclibfile,(long)p,SEEK_SET);
  fread(buf,sizeof(unsigned char),32,cclibfile); /*读32字节点阵数据*/
  for(m=0;m<32;m++){ /*点阵数据转换成LCD格式数据*/
  if(m<8) { beginbyte=14; shiftn=7;}
  else if( m>= 8 && m<16 ) { beginbyte=15; shiftn=15;}
  else if( m>=16 && m<24 ) { beginbyte=30; shiftn=23;}
  else { beginbyte=31; shiftn=31;}
  for(j=0;j<8;j++)
  hzk16x16[m]=(hzk16x16[m]+ (buf[beginbyte-2*j] >>(shiftn-m))&0x01)<<1;
  }

(3) 常用图形(如产品商标等)的点阵图形的建立。

对已有的图形可采用扫描仪进行扫描,然后用图形处理软件进行处理,再将BMP格式文件转换成MCS-51的汇编文件的格式。

以上所有的字模数据都存放在单片机W78E58的程序存储器中,如用到的汉字、图形较多,可选用较大容量的程序存储器。

通用子程序:通用子程序分左半屏、右半屏写指令代码子程序和写显示数据子程序。液晶显示驱动器HD16202内部有个忙标志寄存器,当BF=1时,表示内部操作正在运行,不能接受外部数据或指令。下面子程序中设指令代码寄存器为COMM,数据寄存器为DATA。
  (COMM EQU 20H /*指令寄存器*/ DATA EQU 21H /*数据寄存器*/)

(1) 左半屏写指令子程序
  WR_CMD1: MOV DPTR,#CRADR1 ;/*读状态字口地址*/
  WAIT1: MOVX A,@DPTR ;/* 读状态字 */
  JB ACC.7,WAIT1 ;/*判忙标志BF,如BF=1忙,等待*/
  MOV DPTR,#CWADR1 ;/*写指令字口地址*/
  MOV A,COMM ;/*取指令代码*/
  MOVX @DPTR,A ;/*写指令代码*/
  RET

(2)左半屏写数据子程序
  WR_DATA1:MOV DPTR,#CRADR1 ;/*读状态字口地址*/
  WAIT11: MOVX A,@DPTR ;/* 读状态字 */
  JB ACC.7,WAIT11 ;/*判忙标志BF,如BF=1忙,等待*/
  MOV DPTR,#DWADR1 ;/*写数据字口地址*/
  MOV A,DATA ;/*取数据/
  MOVX @DPTR,A ;/*写数据*/
  RET

(3)右半屏写指令子程序WR_CMD2和右半屏写数据子程序WR_DATA2的编制同左半屏子程序相同,只是对应口地址不同。
  8X16字符显示子程序:MGLS12864液晶显示屏由二片HD61202控制,LCD显示中应尽量避免一个字符一半在左半屏显示,另一半在右半屏显示的情况。设列地址寄存器为COLUMN,页地址寄存器为PAGE,要显示的字符代码寄存器为ASCIICODE,W78E58内RAM28H- RAM37H共16个字节存放8×16的点阵数据,生成的8×16点阵库文件存放在单片机W78E58存储器中的首地址定义为ASCII_DOT816。


  DISP_ASCII816: MOV DPTR,#ASCII_DOT816 ;8×16点阵库首地址
  MOV A,ASCIICODE ;显示字符代码ASCIICODE
  MOV B,#16 ;每个字符点阵占16个字节
  MUL AB ;计算显示字符在字库的首地址
  ADD A,DPL
  MOV DPL,A
  MOV A,DPH
  ADDC A,B
  MOV DPH,A;
  MOV R0,#28H ;将点阵数据放到RAM28H-RAM37H
  MOV R2,#00H
  LP_MOVDOT16: MOV A,R2
  MOVC A,@A+DPTR
  MOV @R0,A ;如要将字符反显(黑底白字),则读出点
  INC R0 ;阵数据后求反放入单片机的RAM中
  INC R2
  CJNE R2,#16,LP_MOVDOT16;
  PUSH COLUMN
  MOV A,COLUMN ;显示列数COLUMN是否在右半屏
  CJNE A,#64,ASCII_IF64
  ASCII_IF64: JNC ASCII_YGE64
  MOV DPTR,#CWADR1 ;在左半屏时,选择左半屏写指令代码地址
  CLR FIRST0_SECOND1_BIT ;左半屏列数标志BIT=0
  SJMP ALL_COLUMN
  ASCII_YGE64: CLR C
  SUBB A,#64
  MOV COLUMN,A
  MOV DPTR,#CWADR2 ;在右半屏时,选择右半屏写指令代码地址
  SETB FIRST0_SECOND1_BIT ;右半屏列数标志BIT=1
  ALL_COLUMN: MOV A,PAGE
  ADD A,#10111000B ;设置页地址命令
  MOVX @DPTR,A
  MOV A,COLUMN ;设置列地址命令
  ADD A,#01000000B
  MOVX @DPTR,A
  MOV DPTR,DWADR1 ;根据左右半屏列数标志,选择写显示数据地址
  JNB FIRST0_SECOND1_BIT,ALLMOV1
  MOV DPTR,DWADR2
  ALLMOV1: MOV R0,#28H
  MOV_8BYTE1: MOV A,@R0
  MOVX @DPTR,A ;写显示数据
  NOP
  INC R0
  CJNE R0,#30H,MOV_8BYTE1;
  MOV DPTR,#CWADR1
  JNB FIRST0_SECOND_BIT,ALLMOV2
  MOV DPTR,#CWADR2
  ALLMOV2: MOV A,PAGE
  INC A ;页地址加1
  ADD A,#10111000B
  MOVX @DPTR,A ;设置页地址命令
  MOV A,COLUMN ;设置列地址命令
  ADD A,#01000000B
  MOVX @DPTR,A
  MOV DPTR,DWADR1;根据左右半屏列数标志,选择写显示数据地址
  JNB FIRST0_SECOND1_BIT,ALLMOV3
  MOV DPTR,DWADR2
  ALLMOV3: MOV R0,#30H
  MOV_8BYTE2: MOV A,@R0
  MOVX @DPTR,A ;写显示数据
  INC R0
  CJNE R0,#38H,MOV_8BYTE2;
  POP COLUMN
  RET

16×16汉字显示子程序:16×16汉字显示子程序与8X16字符显示子程序基本相同。不同在于每次写32字节显示数据,可定义W78E58 内 RAM28H-RAM47H共32个字节存放16×16的点阵数据,生成的16×16点阵库文件存放在单片机W78E58存储器中的首地址定义为 HZK_DOT16X16。具体程序略,读者如需要可来函索取。

结语

本文在介绍液晶显示模块与单片机接口的同时,采用了新颖的改造方案以解决应用中的问题。由于节省了单片机口线,使系统资源得到了充分利用。可显示汉字、字符和图形,使人机界面更为美观、易读。其它如8×8西文点阵字库及图形的建立和显示可参照上面介绍的方法来编写程序。由于各种液晶显示模块的接口基本相同,因此本文所讨论的内容也适用于其它型号的液晶显示模块。液晶显示较其它显示终端有许多优点:功耗低且字型美观、可用集成电池供电,便于携带等。相信它将得到越来越广泛的使用。
 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

本设计的控制系统主要包括:倾斜模块、超声波模块、语音模块、光敏电阻模块及电源等。

关键字: 单片机 STC51

本文针对电动两轮车自燃防控装置的开发与分析进行了研究。通过电动两轮车自燃原因分析,提出了电动两轮车的自燃防控智能装置设计思路,介绍了电动两轮车的自燃防控智能

关键字: STC89C52RC 单片机 微控制器

现在市面上还不存在一种方便实验人员选取芯片,以及方便管理人员对芯片进行智能化管理的芯片柜,为此希望通过研发这款智能芯片柜,来解决以上问题。​

关键字: 单片机 芯片

这款全新的中端MCU系列为设计人员提供了更高水平的安全性和灵活性

关键字: 嵌入式 单片机

单片机是一种嵌入式系统,它是一块集成电路芯片,内部包含了处理器、存储器和输入输出接口等功能。

关键字: 单片机 编写程序 嵌入式

在现代电子技术的快速发展中,单片机以其高度的集成性、稳定性和可靠性,在工业自动化、智能家居、医疗设备、航空航天等诸多领域得到了广泛应用。S32单片机,作为其中的佼佼者,其引脚功能丰富多样,是实现与外部设备通信、控制、数据...

关键字: s32单片机引脚 单片机

在微控制器领域,MSP430与STM32无疑是两颗璀璨的明星。它们各自凭借其独特的技术特点和广泛的应用领域,在市场上占据了重要的位置。本文将深入解析MSP430与STM32之间的区别,探讨它们在不同应用场景下的优势和局限...

关键字: MSP430 STM32 单片机

液晶显示器作为现代计算机系统和各种电子设备中的核心输出部件,其稳定性和可靠性直接影响着用户的使用体验。然而,在长期使用过程中,液晶显示器难免会遇到一些故障问题。本文旨在提供一份详细的液晶显示器维修教程,涵盖故障识别、基本...

关键字: 液晶显示器 液晶显示器维修

该系列产品有助于嵌入式设计人员在更广泛的系统中轻松实现USB功能

关键字: 单片机 嵌入式设计 USB
关闭
关闭