基于单片机的LCD显示屏

基于单片机的LCD显示屏
基于单片机的LCD显示屏

基于单片机的LCD显示屏

一、实验目的

1、利用最小系统的液晶显示电路,编写程序控制显示,输出字符。

2、了解液晶显示的控制原理及方法。

二、设计内容及要求

1、绘制流程图

2、进行软件编程和软模拟

3、进行硬件调试

三、实验原理

1、1602显示屏简介

读的时候,先读上面那列,再读左边那行,如:感叹号!的字母B的ASCII为0x42(前面加0x表示十六进制)。

4、显示地址

11

以尝试采用以下方案解决:

1、数据手册中可能介绍1602内部D0~D7已有上拉,可以使用P0口直接驱动。在Proteus里LM016L内部可能没有,应该人为

加上拉电阻。建议不要使用排阻,使用普通电阻一个一个拉应该可以解决问题;

2、可能碰到不能检测忙信号的问题,尝试使用延时把忙信号拖过去。

7、基本的读写时序图

读写操作时序如图1和2所示:

写操作时序:

读操作时序:

四、电路的设计、安装及调试

1、电路图:

2、源程序:

/******************************************************************** ** 1602显示

********************************************************************* /

LCD_RS EQU P2.4

LCD_RW EQU P2.3

LCD_EN EQU P2.2

;******************************************************************* ORG 0000H

AJMP MAIN

ORG 0030H

;******************************************************************* MAIN:

MOV SP,#60H

ACALL LCD_INIT ;LCD初始化

MAIN1:

ACALL CLR_LCD ;清LCD

MOV A,#90H ;在第一行第17列的位置

ACALL LCD_CMD

MOV DPTR,#LINE1 ;第一行字符串的起始地址送入DPTR。

ACALL WRITE

MOV A,#0D0H ;在第二行第17列的位置

ACALL LCD_CMD

MOV DPTR,#LINE2 ;第二行字符串的起始地址送入DPTR。

ACALL WRITE

MOV R3,#10H ;向左移动16格

LOOPA:

MOV A,#18H ;字符同时左移一格

ACALL LCD_CMD

MOV R5,#03H ;延时375MS

ACALL DELAY125MS

DJNZ R3,LOOPA

ACALL DELAY4 ;延时1.6s

ACALL DELAY4

MOV R4,#02H ;设置闪烁次数

ACALL FLASH ;开始闪烁

AJMP MAIN1

LINE1:

DB " WELCOME YOU TO ",00H

LINE2:

DB "GUIZHOU PROVINCE",00H

;***************************************************************

;LCD初始化设定子程序

;*************************************************************** LCD_INIT:

ACALL DELAY5MS ;延时15MS

ACALL DELAY5MS ;等待LCD电源稳定

ACALL DELAY5MS

MOV A,#38H ;16*2显示,5*7点阵,8位数据

ACALL LCD_CMD_NC ;不进行LCD忙检测

ACALL DELAY5MS

MOV A,#38H ;16*2显示,5*7点阵,8位数据

ACALL LCD_CMD_NC ;不进行LCD忙检测

ACALL DELAY5MS

MOV A,#38H ;16*2显示,5*7点阵,8位数据

ACALL LCD_CMD_NC ;不进行LCD忙检测

ACALL DELAY5MS

MOV A,#08H ;显示关

ACALL LCD_CMD ;进行LCD忙检测

MOV A,#01H ;清除屏幕

ACALL LCD_CMD ;进行LCD忙检测

MOV A,#0CH ;显示开,关光标

ACALL LCD_CMD ;进行LCD忙检测

RET

;*************************************************************** ;清LCD子程序

;*************************************************************** CLR_LCD:

MOV A,#01H ;清除屏幕

ACALL LCD_CMD ;进行LCD忙检测

RET

;*************************************************************** ;写指令数据到LCD

;RS=L,RW=L,D0-D7=指令码,E=高脉冲

;*************************************************************** LCD_CMD:

CALL CHECKBUSY

LCD_CMD_NC:

CLR LCD_RS

CLR LCD_RW

MOV P0,A

SETB LCD_EN

NOP

NOP

NOP

NOP

CLR LCD_EN

RET

;*************************************************************** ;写显示数据到LCD

;RS=H,RW=L,D0-D7=数据,E=高脉冲

;*************************************************************** LCD_WDATA:

ACALL CHECKBUSY

SETB LCD_RS

CLR LCD_RW

MOV P0,A

SETB LCD_EN

NOP

NOP

NOP

NOP

CLR LCD_EN

RET

;*************************************************************** ;检测LCD控制器忙状态

;读数据

;RS=L,RW=H,E=H,输出:D0-D7=数据

;P0.7=1,LCD忙,等待。P0.7=0,LCD闲,可以进行读写操作。

;*************************************************************** CHECKBUSY:

PUSH ACC

MOV P0,#0FFH

CLR LCD_RS

SETB LCD_RW

SETB LCD_EN

BUSYLOOP:

NOP

JB P0.7,BUSYLOOP

CLR LCD_EN

POP ACC

RET

;*************************************************************** ; 发送字符串子程序

;*************************************************************** WRITE:

PUSH ACC

WRITE1:

CLR A

MOVC A,@A+DPTR

JZ WRITE2

INC DPTR

ACALL LCD_WDATA

JMP WRITE1

WRITE2:

POP ACC

RET

;*************************************************************** ;闪烁子程序

;*************************************************************** FLASH:

MOV A,#08H ;关闭显示

ACALL LCD_CMD

ACALL DELAY4

MOV A,#0CH ;开显示,关闭光标

ACALL LCD_CMD

ACALL DELAY4

DJNZ R4,FLASH

RET

;*************************************************************** ;延时5MS子程序

;LCD初始化使用

;*************************************************************** DELAY5MS:

MOV R6,#10

DL1:

MOV R7,#249

DL2:

DJNZ R7,DL2

DJNZ R6,DL1

RET

;*************************************************************** ;延时125MS子程序

;字符串移动时使用

;*************************************************************** DELAY125MS:

DL3:

MOV R6,#250

DL4:

MOV R7,#249

DL5:

DJNZ R7,DL5

DJNZ R6,DL4

DJNZ R5,DL3

RET

;*************************************************************** ;延时800MS子程序

;闪烁时使用

;*************************************************************** DELAY4:

MOV R5,#40

DL6:

MOV R6,#100

DL7:

MOV R7,#100

DL8:

DJNZ R7,DL8

DJNZ R6,DL7

相关主题
相关文档
最新文档