朋友们,相信很多人对求一个1602液晶显示最简单的汇编程序和用单片机如何调整液晶的显示位置都不是特别了解,因此今天我来为大家分享一些关于求一个1602液晶显示最简单的汇编程序和用单片机如何调整液晶的显示位置的知识,希望能够帮助大家解决这些问题。
本文目录一览
求一个1602液晶显示最简单的汇编程序(在屏上显示一个数字就行了,过程完整)
;*1、LCD第一行显示:www.saxmcu.com;*LCD第二行显示:SP-28A--DIY
;*2、先将两行字符写入DDRAM中,然后从右至左逐字移出显示。
;*3、在指定位置停留1.6秒后,闪烁2次,清屏。
;*4、反复循环上述显示方式。
;*******************************************************************
LCD_RSEQUP2.0
LCD_RWEQUP2.1
LCD_ENEQUP2.2
;*******************************************************************
ORG0000H
AJMPMAIN
ORG0030H
;*******************************************************************
MAIN:
MOVSP,#60H
ACALLLCD_INIT;LCD初始化
MAIN1:
ACALLCLR_LCD;清LCD
MOVA,#90H;在第一行第17列的位置
ACALLLCD_CMD
MOVDPTR,#LINE1;第一行字符串的起始地址送入DPTR。
ACALLWRITE
MOVA,#0D0H;在第二行第17列的位置
ACALLLCD_CMD
MOVDPTR,#LINE2;第二行字符串的起始地址送入DPTR。
ACALLWRITE
MOVR3,#10H;向左移动16格
LOOPA:
MOVA,#18H;字符同时左移一格
ACALLLCD_CMD
MOVR5,#03H;延时375MS
ACALLDELAY125MS
DJNZR3,LOOPA
ACALLDELAY4;延时1.6s
ACALLDELAY4
MOVR4,#02H;设置闪烁次数
ACALLFLASH;开始闪烁
AJMPMAIN1
LINE1:
DB"www.saxmcu.com",00H
LINE2:
DB"SP-28A--DIY",00H
;***************************************************************
;LCD初始化设定子程序
;***************************************************************
LCD_INIT:
ACALLDELAY5MS;延时15MS
ACALLDELAY5MS;等待LCD电源稳定
ACALLDELAY5MS
MOVA,#38H;16*2显示,5*7点阵,8位数据
ACALLLCD_CMD_NC;不进行LCD忙检测
ACALLDELAY5MS
MOVA,#38H;16*2显示,5*7点阵,8位数据
ACALLLCD_CMD_NC;不进行LCD忙检测
ACALLDELAY5MS
MOVA,#38H;16*2显示,5*7点阵,8位数据
ACALLLCD_CMD_NC;不进行LCD忙检测
ACALLDELAY5MS
MOVA,#08H;显示关
ACALLLCD_CMD;进行LCD忙检测
MOVA,#01H;清除屏幕
ACALLLCD_CMD;进行LCD忙检测
MOVA,#0CH;显示开,关光标
ACALLLCD_CMD;进行LCD忙检测
RET
;***************************************************************
;清LCD子程序
;***************************************************************
CLR_LCD:
MOVA,#01H;清除屏幕
ACALLLCD_CMD;进行LCD忙检测
RET
;***************************************************************
;写指令数据到LCD
;RS=L,RW=L,D0-D7=指令码,E=高脉冲
;***************************************************************
LCD_CMD:
CALLCHECKBUSY
LCD_CMD_NC:
CLRLCD_RS
CLRLCD_RW
MOVP0,A
SETBLCD_EN
NOP
NOP
NOP
NOP
CLRLCD_EN
RET
;***************************************************************
;写显示数据到LCD
;RS=H,RW=L,D0-D7=数据,E=高脉冲
;***************************************************************
LCD_WDATA:
ACALLCHECKBUSY
SETBLCD_RS
CLRLCD_RW
MOVP0,A
SETBLCD_EN
NOP
NOP
NOP
NOP
CLRLCD_EN
RET
;***************************************************************
;检测LCD控制器忙状态
;读数据
;RS=L,RW=H,E=H,输出:D0-D7=数据
;P0.7=1,LCD忙,等待。P0.7=0,LCD闲,可以进行读写操作。
;***************************************************************
CHECKBUSY:
PUSHACC
MOVP0,#0FFH
CLRLCD_RS
SETBLCD_RW
SETBLCD_EN
BUSYLOOP:
NOP
JBP0.7,BUSYLOOP
CLRLCD_EN
POPACC
RET
;***************************************************************
;发送字符串子程序
;***************************************************************
WRITE:
PUSHACC
WRITE1:
CLRA
MOVCA,@A+DPTR
JZWRITE2
INCDPTR
ACALLLCD_WDATA
JMPWRITE1
WRITE2:
POPACC
RET
;***************************************************************
;闪烁子程序
;***************************************************************
FLASH:
MOVA,#08H;关闭显示
ACALLLCD_CMD
ACALLDELAY4
MOVA,#0CH;开显示,关闭光标
ACALLLCD_CMD
ACALLDELAY4
DJNZR4,FLASH
RET
;***************************************************************
;延时5MS子程序
;LCD初始化使用
;***************************************************************
DELAY5MS:
MOVR6,#10
DL1:
MOVR7,#249
DL2:
DJNZR7,DL2
DJNZR6,DL1
RET
;***************************************************************
;延时125MS子程序
;字符串移动时使用
;***************************************************************
DELAY125MS:
DL3:
MOVR6,#250
DL4:
MOVR7,#249
DL5:
DJNZR7,DL5
DJNZR6,DL4
DJNZR5,DL3
RET
;***************************************************************
;延时800MS子程序
;闪烁时使用
;***************************************************************
DELAY4:
MOVR5,#40
DL6:
MOVR6,#100
DL7:
MOVR7,#100
DL8:
DJNZR7,DL8
DJNZR6,DL7
DJNZR5,DL6
RET
;***************************************************************
END
可以吧?
用单片机如何调整液晶的显示位置
先写显示地址,在写显示数据0x80是第一行第一位,0xC0是第二行第一位0x80加n就在第n位显示了,1602液晶n<16
总结:以上就是本站针对你的问题搜集整理的答案,希望对你有所帮助。