微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > 液晶显示与单片机的接口与编程方法

液晶显示与单片机的接口与编程方法

时间:11-15 来源:互联网 点击:

]=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 内R AM28H-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 ;在右半

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top