求一个1602液晶显示最简单的汇编程序(在屏上显示一个数字就行了,过程完整)

求一个1602液晶显示最简单的汇编程序(在屏上显示一个数字就行了,过程完整),第1张

* 1、LCD第一行显示: www.saxmcu.com

* LCD第二行显示: SP-28A--DIY

* 2、先将两行字符写入DDRAM中,然后从右至左逐字移出显毕仿示。

* 3、在指定位置停留1.6秒后,闪烁2次,清屏。

* 4、反复循环上述显示方手察纤式。

*******************************************************************

LCD_RS EQU P2.0

LCD_RW EQU P2.1

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 "www.saxmcu.com",00H

LINE2:

DB "SP-28A--DIY",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

DJNZ R5,DL6

RET

***************************************************************

END

可以吧?

这和你的硬件电路有关系,看程序好像P0是数据输入端

#include <reg51.h>

#define uchar unsigned char//宏定义

sbit Rs=P2^0 //P2.0引脚接1602的数据/命令选择端

sbit Rw=P2^1 //P2.1引脚接1602的读/写控制端

sbit E=P2^7//P2.7引脚接1602的使能侍告蠢端

uchar table[]="Liu Xiao Ming",buffer //定义两个字符型变量

int k=0

void delay(int t) //延时子程序

{

int i,j

for(i=0i<255i++)

for(j=0j<tj++)

}

void writecom(void) //写命令子程序

{

Rs=0Rw=0E=1

P0=buffer

E=0

delay(5)

}

void writedata(void)//写数据子程序

{

Rs=1Rw=0E=1

P0=buffer

E=0

delay(5)

}

void init(void)//1602初始化子程序

{

buffer=0x08writecom() //显示老陪关闭

buffer=0x3cwritecom() //

buffer=0x14writecom()

buffer=0x06writecom() //显示光标移动友渣设置

buffer=0x01writecom() //显示清屏

buffer=0x0fwritecom()//

}

void main()

{

init()//1602初始化

buffer=0x80//

writecom()

buffer=0xc0

writecom()

for(k=0k<20k++)

{

buffer=table[k]//缓存数据

writedata() //向1602写数据,使其显示Liu Xiao Ming

}

}


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

原文地址: http://outofmemory.cn/yw/12214348.html

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

发表评论

登录后才能评论

评论列表(0条)

保存