首页 理论教育 单片机控制点阵模块的应用案例

单片机控制点阵模块的应用案例

时间:2023-11-16 理论教育 版权反馈
【摘要】:LM12864驱动控制器的指令系统并非是单片机内部执行相关操作的命令,而是通过接口电路对LM12864的引脚信号设置相应命令编码,主要通过相应程序来实现。表6-9 “WELLCOME”和“TESTLCD”显示位置图6-17 LM12864液晶显示模块的接口电路让字符型LM12864显示两行字串“WELLCOME”和“TESTLCD”的程序如下。

单片机控制点阵模块的应用案例

1 线段的显示

点阵图形式液晶显示模块由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1B的8位,即每行有16B,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024B相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如,屏的第一行的亮暗由RAM区的000H~00FH 16B的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH、(001H)=00H、(002H)=FFH、…(00EH)=FFH、(00FH)=00H时,则在屏幕的顶部显示一条由8条亮线和8条暗线组成的虚线。

先设垂直地址,再设水平地址,RAM的地址计数器(AC)只会对水平地址(X轴)自动加1,当水平地址为00FH时会重新设为00H,但并不会对垂直地址做进位自动加1,故当连续写入多笔信息时,程序需自行判断垂直地址是否需重新设定。

2 字符的显示

用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8B,还要使每字节的不同位为“1”,其他的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但对于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。

3 汉字的显示

汉字的显示一般采用图形的方式,事先从微机中提取要显示汉字的点阵码(一般用字模提取软件)。欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。不过在显示连续字符时,只需设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。当字符编码为2B时,应先写入高位字节,再写入低位字节。

每个汉字占32B,分左右两半,各占16B,左边为1、3、5等,右边为2、4、6等,可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一个字节,光标位置加1;再送上第二个字节,换行并且按列对齐(两列),依次再送上第三个字节……直到32B显示完就可以在LCD上得到一个完整的汉字。

4 LM12864初始化

对LM12864的初始化,实质上是对其进行指令系统中的指令操作。LM12864驱动控制器的指令系统并非是单片机内部执行相关操作的命令,而是通过接口电路对LM12864的引脚信号设置相应命令编码,主要通过相应程序来实现。

例6-1:让字符型液晶显示模块显示两行字串“WELLCOME”和“TESTLCD”。

解:字符型液晶显示模块显示两行字串“WELLCOME”和“TESTLCD”的显示位置如表6-9所示,接口电路图如图6-17所示。

表6-9 “WELLCOME”和“TESTLCD”显示位置

978-7-111-54295-7-Chapter06-27.jpg

978-7-111-54295-7-Chapter06-28.jpg

图6-17 LM12864液晶显示模块的接口电路

让字符型LM12864显示两行字串“WELLCOME”和“TESTLCD”的程序如下。

ORG 0000H;程序从地址0000H开始存放

JMP BEGIN;跳到BEGIN处执行程序

ORG 0030H

BEGIN:LCALL Initial;调用启动字符型液晶显示模块的子程序

LCALL CLS;调用清除显示器子程序

MOV A,#80H;将80H送入累加器,设定DDRAM的地址为00H,

;即将光标移到第1行第1列的位置上

LCALL Write Instruction;调用将指令码写到IR指令寄存器的子程序

MOV DPTR,#LINE1;将第1行字符串按程序存储器的起始地址存入DPTR

LCALL STRING;调用STRING子程序,将字符串放到液晶显示屏上显示

MOV A,#C0H;将C0H送入累加器,设定DDRAM的地址为40H,

;即将光标移到第2行第1列的位置上

LCALL Write Instruction;调用将指令码写到IR指令寄存器的子程序

MOV DPTR,#LINE1;将第2行字符串按程序存储器的起始地址存入DPTR

LCALL STRING;调用STRING子程序,将字符串放到液晶显示屏上显示

JMP BEGIN;执行多次循环

STRING:PUSH ACC

PLOOP:CLR A;清除ACC的内容

MOVC A,@A+DPTR;按照DPTR与ACC的值从程序存储器中读取数据存入ACC

JZ ENDPR;判断ACC的值是否为零,若ACC的值为零,结束显示字符串

LCALL Write LCD Data;调用将数据写到DR数据寄存器的子程序

INC DPTR;将DPTR中的值加1,以便显示字符串的下一个字符

JMP PLOOP;跳到标记PLOOP处继续执行程序

ENDPR:POP ACC

RET

LINE1:DB′WELLCOME′,00H;在液晶显示屏上显示出的第1行字符串内容为“WELLCOME”

LINE2:DB′TESTLCD′,00H;在液晶显示屏上显示出的第2行字符串内容为“TESTLCD”

END

LM12864接口设置单片机片内RAM的40H~5FH共32个单元为显示缓冲区,其中40H~4FH这16个单元对应液晶显示模块的第1行,50H~5FH这16个单元对应液晶显示模块的第2行。其显示控制程序清单如下:

ORG 0000H;程序从地址0000H开始存放

JMP BEGIN

ORG 0030H

BEGIN:MOV SP,#20H

MOV DPTR,#TAB

MOV R7,#32;共32个字符

MOV R1,#40H;设置单片机显示缓冲区的首地址

BUF:CLR A;将32个字符的ASCII码送到单片机的显示缓冲区

MOVC A,@A+DPTR

MOV @R1,A

INC DPTR

INC R1

DJNZ R7,BUF

CLR P1.0

SETB P1.0;产生一正脉冲,使液晶显示模块使能(www.xing528.com)

MOV A,#38H;功能设置为8位、双行显示、5×7点阵

ACALL WR1

MOV A,#01H;清屏

ACALL WR1

MOV A,#0FH;开显示、开光标、光标闪烁

ACALL WR1

MOV A,#06H;进入模式设置,所显示字符不移位,光标移位,DDRAM写入时地址加1

ACALL WR1

MOV A,#80H;写入DDRAM首地址(第1行)

ACALL WR1

MOV R0,#40H;单片机显示缓冲区的首地址

MOV R7,#16;第1行共显示16个字符

DDRAM1:ACALL RD1

INC R0

DJNZ R7,DDRAM1

MOV A,#C0H;写入DDRAM首地址(第2行)

SETB P1.0

ACALL WR1

MOV R0,#50H;单片机显示缓冲区的第2行首地址

MOV R7,#16;第2行共显示16个字符

DDRAM2:ACALL RD1

INC R0

DJNZ R7,DDRAM2

WR1:MOV R3,A;把控制字保存在R3中

CLR P1.2;RS=0,选择指令寄存器

CLR P1.1;RW=1,检查“忙”状态

BUSY1:MOV A,P0

RLC A

JC BUSY1;BF=1,进行等待

SETB P1.1;RW=0,进入写方式

CLR P1.0;写入指令码

SETB P1.0

MOV A,R3

ACALL DL0;延时,确保数据操作有效稳定

RET

RD1:CLR P1.2;RS=0,选择指令寄存器

CLR P1.1;RW=1,读“忙”标志

BUSYD:MOV A,P0

RLC A

JC BUSYD;BF=1,进行等待

SETB P1.2;RS=1,选择数据寄存器

SETB P1.1;RW=0,单片机向液晶显示模块写数据

CLR P1.0

SETB P1.0

MOV A,@R0;从单片机的显示缓冲区中取出数据

MOV P0,A;将数据写入到液晶显示模块,进行显示

CLR P1.0

ACALL DL0;延时,确保数据操作有效稳定

RET

DL0:MOV R2,#7FH;延时约128ms,设振荡频率为6MHz

DL1:MOV R4,#0FAH

DL2:DJNZ R4,DL2;延时约1ms

DJNZ R2,DL1

RET

TAB:DB 57H,45H,4CH,4CH,43H,4FH,4DH,45H

DB 20H,54H,4FH,20H,20H,55H,53H,45H

DB 54H,48H,45H,20H,20H,20H,20H,20H

DB 20H,20H,20H,20H,20H,4CH,43H,4DH

END

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈