LCD1602自定义字库怎么编写?

LCD1602自定义字库怎么编写?,第1张

1602的资料,关于自定义字符的。试图写了一下,也修改了几次,成功了,下面来详细的再分析一下。

RS  BIT  P2.7(RS数据命令选择端,高电平为数据,低电平为命令)

RW  BIT  P2.6(RW读写选择端,高电平为读,低电平为写)

E  BIT  P2.5(使能端)

ORG 0000H(程序起始地址)

MAIN:

MOV R0,#8(R0中存入将要写如多少个数据,我们要写入8个数据所以R0中是8)

MOV 30H,#00 (30H清零,在下面的程序中作为数据指针使用)

MOV P3,#01H(01H-清屏显示指令)

ACALL ENABLE(调用命令写入子程序

MOV P3,#38H(38H-设置1602显示模式)

ACALL ENABLE(调用命令写入子程序)

MOV P3,#0CH(0CH-开显示,不显示光标,不闪烁)

ACALL ENABLE(调用命令写入子程序)

MOV P3,#06H(06H-地址指针加一命令)

ACALL ENABLE(调用命令写入子程序)

MOV P3,#40H(40H-自定义第一个字符显示命令,CGRAM的地址是40H-07H)

ACALL ENABLE(调用命令写入子程序)

LOOP: MOV DPTR,#TAB (将表格中的数据送到DPTR中)

MOV A,30H(将30H中的数送到累加器A中)

MOVC A,@A+DPTR(查表)

MOV P3,A(将A中的数据送到P3口做输出)

ACALL WRITE(调用数据写入子程序)

INC  30H (30H中的数据加一)

DJNZ R0,LOOP(R0中送入的是8,减8次不为零跳转到LOOP处执行程序,是则往下继续执行)

MOV P3,#80H(规定显示的位置)

ACALL ENABLE(调用命令写入子程序)

MOV P3,#00H(定义显示第一个自定义的字符,一共可以显示8个,为00H-07H)

ACALL WRITE(调用数据写入子程序)

JMP  $

ENABLE:{命令写入子程序}

CLR  RS(RS数据命令选择端,低电平为命令)

CLR  RW(RW读写选择端,地点平为写)

CLR  E(E为使能端,使能端电平跳变,开始写命令)

ACALL DELAY1(延时,去忙)

SETB E(使能端电平变化,完成命令的写入)

RET(程序返回)

WRITE: {数据写入子程序}

SETB RS(RS数据命令选择端,高电平为数据)

CLR  RW(RW读写选择端,低电平为写)

CLR  E(E为使能端,使能端电平跳变,开始写命令)

LCALL DELAY1(延时,去忙)

SETB E(使能端电平变化,完成命令的写入)

RET(程序返回)

DELAY1: MOV R7,#255{延时程序}

D1:  MOV R6,#255

D2:  DJNZ R6,D2

DJNZ R7,D1

RET

TAB: DB  0FH,09H,0FH,09H,0FH,09H,11H,00H

END

运行效果图:

1、首先我们打开Keil μVision编译器,新建一个工程,然后保存在硬盘上的位置,然后选择Atmel-AT89C51单片机为模型,并启动器添加STARTUP.A51文件,然后在当前目录下新建一个C文件,并将其添加入工作路径。

2、导入51单片机的头文件以及LCD1602的头文件。

3、创建一个延时函数,可以传入想要具体延时的时长,其内部实现是由一个二重循环,两个循环的次数相乘积。

4、然后创建写命令的函数,指定RS和E同时为0时,才可以写入命令,设定完成后,将com写入输出端口,规定写命令时,E为正脉冲,然后空 *** 作一个机器周期等待机器反应。

5、然后创建写数据的函数,规定写数据时,E为正脉冲,规定当RS=1和RW=0时才可以写入数据,然后将数据从输出端口输出,最后让E产生正跳变。

6、然后创建初始化LCD1602的函数,指定显示模式位两行显示,5*7,8位数据、整体显示,无光标,无闪烁、写入一个字符后地址指针加1,最后进行清屏 *** 作。

7、最后在主函数中首先执行LCD1602的初始化函数,首先创建一个无限循环,然后添加两个字符串,这里以两行显示百度经验的网址为例,再进行延时以及使用清屏函数进行刷新。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11907546.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存