您现在正在浏览:首页 > 职教文章 > 职教论文 > 单片机是怎样在液晶上显示字符的?

单片机是怎样在液晶上显示字符的?

日期: 2010-2-16 22:59:57 浏览: 4 来源: 学海网收集整理 作者: 王中波

单片机是怎样在液晶上显示字符的?
   王中波
   液晶(LCD)是如何显示的
   1.线段的显示点阵图形式液晶由M 行×N 列个显示单元组成,假设LCD 显示屏
   有64行,每行有128 列,每8 列对应1 个字节的8 个位,即每行由16 字节,共16×8=128
   个点组成,屏上64×16 个显示单元和显示RAM 区1024 个字节相对应,每一字节的内容
   和屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM 区的000H~00FH 的16 个字
   节的内容决定,当(000)=FFH 时,则屏的左上角显示一条短亮线,长度为8 个点;当(3FFH)
   =FFH 时,则屏的右下角显示一短亮线;当(000H)=FFH,(001H)=00H,(002H)=FFH,
   (003H)=00H,…(00EH)=FFH,(00FH)=00H 时,则在屏的顶部显示一条由8 段亮线
   和8 条暗线组成的虚线。这就是LCD 显示的基本意思。
   2.字符的显示当用 LCD 显示一个字符时就较复杂了,因为一个字符由6×8 或8
   ×8 点阵组成,即要找到和屏上某几个位置对应的显示RAM区的8 个字节,并且要使每个
   字节的不同的位为‘1’,其它的为‘0’,为‘1’的点亮,为‘0’的点暗,这样一来就组
   成某个字符。但对于内带字符发生器的控制器(如T6963C)来说,显示字符就比较简单了,
   可让控制器工作在文本方式,根据在LCD 上开始显示的行列号及每行的列数找出显示RAM
   对应的地址,设立光标,在此送上该字符对应的代码即可。
   3.汉字的显示汉字的显示一般采用图形方式,事先从微机中提取要显示的汉字的
   点阵码,每个汉字占32 字节,分左右两半部,各占16 字节,左边为1、3、5…,右边为2、
   4、6…, 根据在LCD 上开始显示的行列号及每行的列数可找出显示RAM 对应的地址,设
   立光标,送上要显示的汉字的第一个字节,光标位置加1,送第二字节,换行按列对齐,
   送第三字节…直到32 字节显示完就可在LCD 上得到一个完整的汉字。
   内带T6963C的液晶图形显示模块和8031 单片机的连接
   1.LCD显示控制器T6963C T6963C 是点阵式液晶图形显示控制器,能直接和8031
   单片机连接(见附图);可以以图形、字符方式或合成显示;内部有字符发生器,共128 个
   字符,允许CPU随时访问显示RAM,并可进行位操作。
   2.内带T6963C 的液晶图形显示模块(MGLS12864T)和8031 单片机的连接内
   带T6963C 的液晶图形显示模块MGLS12864T 和8031 单片机的连接见附图。由图可以看
   出,MGLS12864T 的数据线和8031 的数据总线相接,它的C/D 接8031 的地址线A0,/CE
   2
   接8031外扩系统地址译码器74LS138的一个输出端;MGLS12864T的/WR,/RD分别和8031
   的/WR,/RD 相接,/RESET,VCC,/HALT 接+5V,VO 接-5V~-15V 可调,VEE 接-
   5V~-15V;FG、GND接8031 的GND。T6963C 的主要指令见表1。
   参数1 参数2 指令代码 功 能
   1.水平位置 垂直位置 21H 光标指针设置
   2.地址(低5位) 00H 22H CGRAM 偏置地址设置
   3.低字节 高字节 24H 地址指针位置
   4.低字节 高字节 40H 文本区首址
   5 低字节 00H 41H 文本区宽度(字节数/行)
   6.低字节 高字节 42H 图形区首址
   7.低字节 00H 43H 图形区宽度(字节数/行)
   8.无 无 8XH 显示方式设置
   9.无 无 9XH 光标闪烁,显示,文本,图形显示
   10. 无 无 AXH 光标形状选择
   11.无 无 BXH 数据自动读/写方式设置
   12.D1(仅写才有) 无 C0—C5H 数据一次写/读,地址加1或不变
   13.无 无 D0H 屏读
   14.无 无 D8H 屏拷贝
   15.无 无 FXH 位操作
   对T6963C进行操作前应先读状态字,T6963C 的状态字中的各位含意如表2。
   表2
   位 状态 1 0
   STA0:指令读写状态 准备好 忙
   STA1:数据读写状态 准备好 忙
   STA2:数据自动读状态 准备好 忙
   STA3:数据自动写状态 准备好 忙
   STA4:未用
   STA5:控制器运行检测可能性 可能 不能
   STA6:屏读/拷贝出错状态 出错 正确
   STA7:闪烁状态检测 正常显示 关显示
   3.程序举例(仅供参考)
   (1)清显示RAM子程序
   MOV R2,#00H
   MOV R3,#00H
   MOV R4,#24H ;设地址指针
   CALL PR1
   MOV R4,#0B0H ;自动写指令
   CALL PR12
   MOV R2,#1FH ;共8K
   PR31:
   3
   MOV R3,#0FFH
   PR32:
   CALL PR03
   CLR A
   CALL PR14
   DJNZ R3,PR32
   DJNZ R2,PR31
   MOV R4,#0B2H ;自动写结束
   CALL PR12
   RET
   (2)检测状态:
   PR01: ;判LCD 忙否?
   MOVDPTR,#4001H ;LCD指令口地址
   MOVX A,@DPTR
   JNB ACC.0,PR01
   JNB ACC.1,PR01
   RET
   PR03: ;判LCD 自动写标志
   MOVDPTR,#4001H
   MOVX A,@DPTR
   JNB ACC.3,PR03
   RET
   (3)写数据或指令程序
   PR1: ;双字节参数指令入口
   CALL PR01
   MOVA,R2
   CALL PR14
   PR11: ;单字节参数指令入口
   CALL PR01
   MOVA,R3
   CALL PR14
   PR12: ;无字节参数指令入口
   CALL PR01
   MOVA,R4
   JMP PR15
   PR14: ;写数据入口:
   MOV DPTR,#4000H ;LCD数据口地址
   PR15:
   MOVX @DPTR,A
   RET
   (4)显示汉字子程序:
   DIS_HZ:
   4
   MOVA,R6 ;(R6):LCD上开始显示的行数
   MOVB,A
   MOVA,#10H ;每个汉字占16行*8列像素
   MULAB ;根据R6,R7 找显示RAM地址
   MOV R2,A
   MOV A,B
   MOV R3,A
   MOV A,R2
   CLR C
   ADDA,R7 ;(R7):LCD上开始显示的列数
   MOV R2,A
   MOV A,R3
   MOV R3,A
   ADDC A,#08H ;设0800H为图形区首址
   MOV R7,#00H
   HZ_1:
   MOV R4,#24H ;显示RAM区地址指针设置命令
   MOV A,R3
   MOV R6,A
   CALL PR1
   MOV DPL,32H ;(32H)要显示的汉字的首地址低字节
   MOV DPH,33H ;(33H)要显示的汉字的首地址高字节
   MOV A,R7
   MOVC A,@A+DPTR
   MOV R3,A
   MOV R4,#0C0H ;写一字节
   CALL PR11
   MOV A,R6
   MOV R3,A
   INC R7
   MOV A,R2
   ADD A,#01H
   MOV R2,A
   MOV A,R3
   ADDC A,#00H
   MOV R3,A
   MOV R4,#24H
   MOV A,R3
   MOV R6,A
   CALL PR1
   MOV DPL,32H
   MOV DPH,33H
   MOV A,R7
   MOVC A,@A+DPTR
   5
   MOV R3,A
   MOV R4,#0C0H ;写下一字节
   CALL PR11
   MOV A,R6
   MOV R3,A
   INC R7
   MOV A,R2
   ADD A,#15 ;汉字第二行的左半部
   MOV R2,A
   MOV A,R3
   ADDC A,#00H
   MOV R3,A
   CJNE R7,#20H,HZ_1 ;共32 字节
   RET
   DIS_ZF: ;显示一个字符 子程序
   MOVA,R6 ;(R6):LCD上开始显示的行数
   MOVB,#10H ;设每行16列
   MULAB
   ADD A,R7 ;(R7):LCD上开始显示的列数
   MOV R2,A
   MOV A,B
   MOV R3,A
   MOV R4,#24H ;显示RAM 区地址指针设置命令
   CALL PR1
   MOV A,R5 ;(R5):控制器内部字符的代码
   MOV R3,A
   MOV R4,#0C0H
   CALL PR11
   RET

返回顶部