找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4783|回复: 3
打印 上一主题 下一主题
收起左侧

LCD1602 滚动显示(asm汇编程序)

[复制链接]
跳转到指定楼层
楼主
ID:72705 发表于 2015-1-24 16:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;* 描述: LCD1602 滚动显示 *
;* 显示方式: *
;* 1、从左到右逐字显示,闪动二次,清屏。 *
;* 2、再从右到左逐字显示,闪动二次,清屏。 *
;* 3、周期性地重复上述显示方式。 *
;*******************************************************************
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
MOV R4,#02H ;设置闪烁次数
ACALL LCD_INIT
MAIN1:
ACALL LCDSET1
MOV DPTR,#CHAR1
ACALL WRITE1 ;
MOV A,#0C0H ;显示第二行左边第一位位置
ACALL LCD_CMD
MOV DPTR,#CHAR2 ;显示
ACALL WRITE1
ACALL DELAY4 ;延时
ACALL DELAY4
ACALL SHAN ;闪烁两次
ACALL LCDSET2
MOV DPTR,#CHAR3 ;
ACALL WRITE1
MOV A,#0C0H ;显示第二行右边第一位位置
ACALL LCD_CMD
MOV DPTR,#CHAR4 ;显示
ACALL WRITE1
ACALL DELAY4 ;延时
ACALL DELAY4
ACALL SHAN ;闪烁两次
ACALL MAIN1
;***************************************************************
;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,#06H ;移动光标
ACALL LCD_CMD ;进行LCD 忙检测
MOV A,#0CH ;显示开,关光标
ACALL LCD_CMD ;进行LCD 忙检测
RET
;***************************************************************
;显示位置与移动光标设定
;***************************************************************
LCDSET1:
MOV A,#01H ;清除屏幕
ACALL LCD_CMD
ACALL DELAY5MS
MOV A,#06H ;移动光标(光标加1)
ACALL LCD_CMD
ACALL DELAY5MS
MOV A,#80H ;显示第一行左边第一位位置
ACALL LCD_CMD
ACALL DELAY5MS
RET
LCDSET2:
MOV A,#01H ;清除屏幕
ACALL LCD_CMD
ACALL DELAY5MS
MOV A,#06H ;移动光标(光标减1)
ACALL LCD_CMD
ACALL DELAY5MS
MOV A,#80H ;显示第一行右边第一位位置
ACALL LCD_CMD
ACALL DELAY5MS
RET
;***************************************************************
;写指令数据到LCD
;RS=L,RW=L,D0-D7=指令码,E=高脉冲
;***************************************************************
LCD_CMD:
ACALL CHECKBUSY
LCD_CMD_NC:
CLR LCD_RS
CLR LCD_RW
MOV P0,A
SETB LCD_EN
NOP
NOP
NOP
NOP
CLR LCD_EN
RET
;***************************************************************
; 发送字符串子程序
;***************************************************************
WRITE1:
MOV R0,#16
WRITE0:
CLR A
MOVC A,@A+DPTR
INC DPTR
ACALL LCD_WDATA
CALL DELAY ;加延时形成滚动效果
DJNZ R0,WRITE0
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=数据
;***************************************************************
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
;***************************************************************
;闪烁子程序
;***************************************************************
SHAN:
MOV A,#08H ;关闭显示
ACALL LCD_CMD
ACALL DELAY4
MOV A,#0CH ;开显示,关闭光标
ACALL LCD_CMD
ACALL DELAY4
DJNZ R4,SHAN
MOV R4,#02H ;设置闪烁次数
RET
;***************************************************************
;延时120MS 子程序
;发送字符串时使用
;***************************************************************
DELAY:
MOV R7,#240
DL1: MOV R6,#250
DL2: DJNZ R6,DL2
DJNZ R7,DL1
RET
;***************************************************************
;延时800MS 子程序
;闪烁时使用
;***************************************************************
DELAY4:
MOV R0,#40
DL3: MOV R1,#100
DL4: MOV R2,#100
DL5: DJNZ R2,DL5
DJNZ R1,DL4
DJNZ R0,DL3
RET
;***************************************************************
;延时5MS子程序
;LCD初始化使用
;***************************************************************
DELAY5MS:
MOV R1,#10
DL6: MOV R2,#249
DL7: DJNZ R2,DL7
DJNZ R1,DL6
RET
;***************************************************************
;延时1MS子程序
;***************************************************************
DELAY1MS:
MOV R6,#14H ;20
DL8: MOV R7,#19H ;25
DL9: DJNZ R7,DL9
DJNZ R6,DL8
RET
;***************************************************************
CHAR1:
DB "Welcome to Cras-"
CHAR2:
DB " yBoye WorkGroup"
CHAR3:
DB "   QQ: 15810380   "
CHAR4:
DB "TEL: 12991316679"
;***************************************************************
END
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:922838 发表于 2021-5-17 20:27 | 只看该作者
哥,这个不对啊,我试了一下,LCD屏全白,不显示
回复

使用道具 举报

板凳
ID:105364 发表于 2021-5-17 21:07 | 只看该作者
十点差三分 发表于 2021-5-17 20:27
哥,这个不对啊,我试了一下,LCD屏全白,不显示

对比度电压调了没?
回复

使用道具 举报

地板
ID:61140 发表于 2022-3-30 09:50 | 只看该作者
这个真的可以,我下载到我单片机里面,只是改了下引脚和延时就可以正常显示
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表