📄 ydlcd.lst
字号:
A51 MACRO ASSEMBLER YDLCD 03/29/2009 20:16:54 PAGE 1
MACRO ASSEMBLER A51 V7.09
OBJECT MODULE PLACED IN ydLCD.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE ydLCD.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1
2 ;/********************************************************************************
3 ;* 描述: LCD1602 移动显示 *
4 ;* 显示方式: *
5 ;* 1、LCD第一行显示: BIG BIG WORLD *
6 ;* LCD第二行显示:I LOVE PUZHONG *
7 ;* 2、先将两行字符写入DDRAM中,然后从右至左逐字移出显示。 *
8 ;* 3、在指定位置停留1.6秒后,闪烁2次,清屏。 *
9 ;* 4、反复循环上述显示方式。 *
10 ;********************************************************************************/
11
12
00A6 13 LCD_RS EQU P2.6
00A5 14 LCD_RW EQU P2.5
00A7 15 LCD_EN EQU P2.7
16
17 ;*******************************************************************
0000 18 ORG 0000H
0000 0130 19 AJMP MAIN
0030 20 ORG 0030H
21 ;*******************************************************************
0030 22 MAIN:
0030 758160 23 MOV SP,#60H
0033 117E 24 ACALL LCD_INIT ;LCD初始化
0035 25 MAIN1:
0035 11A3 26 ACALL CLR_LCD ;清LCD
0037 7490 27 MOV A,#90H ;在第一行第17列的位置
0039 11A8 28 ACALL LCD_CMD
003B 90005F 29 MOV DPTR,#LINE1 ;第一行字符串的起始地址送入DPTR。
003E 11DE 30 ACALL WRITE
0040 74D0 31 MOV A,#0D0H ;在第二行第17列的位置
0042 11A8 32 ACALL LCD_CMD
0044 90006E 33 MOV DPTR,#LINE2 ;第二行字符串的起始地址送入DPTR。
0047 11DE 34 ACALL WRITE
35
0049 7B10 36 MOV R3,#10H ;向左移动16格
004B 37 LOOPA:
004B 7418 38 MOV A,#18H ;字符同时左移一格
004D 11A8 39 ACALL LCD_CMD
004F 7D03 40 MOV R5,#03H ;延时375MS
0051 3104 41 ACALL DELAY125MS
0053 DBF6 42 DJNZ R3,LOOPA
43
0055 310F 44 ACALL DELAY4 ;延时1.6s
0057 310F 45 ACALL DELAY4
0059 7C02 46 MOV R4,#02H ;设置闪烁次数
005B 11EC 47 ACALL FLASH ;开始闪烁
005D 0135 48 AJMP MAIN1
49
005F 50 LINE1:
005F 20424947 51 DB " BIG BIG WORLD",00H
0063 20424947
0067 20574F52
006B 4C4400
006E 52 LINE2:
006E 2049204C 53 DB " I LOVE PUZHONG",00H
0072 4F564520
A51 MACRO ASSEMBLER YDLCD 03/29/2009 20:16:54 PAGE 2
0076 50555A48
007A 4F4E4700
54
55 ;***************************************************************
56 ;LCD初始化设定子程序
57 ;***************************************************************
007E 58 LCD_INIT:
007E 11FB 59 ACALL DELAY5MS ;延时15MS
0080 11FB 60 ACALL DELAY5MS ;等待LCD电源稳定
0082 11FB 61 ACALL DELAY5MS
62
0084 7438 63 MOV A,#38H ;16*2显示,5*7点阵,8位数据
0086 11AA 64 ACALL LCD_CMD_NC ;不进行LCD忙检测
0088 11FB 65 ACALL DELAY5MS
66
008A 7438 67 MOV A,#38H ;16*2显示,5*7点阵,8位数据
008C 11AA 68 ACALL LCD_CMD_NC ;不进行LCD忙检测
008E 11FB 69 ACALL DELAY5MS
70
0090 7438 71 MOV A,#38H ;16*2显示,5*7点阵,8位数据
0092 11AA 72 ACALL LCD_CMD_NC ;不进行LCD忙检测
0094 11FB 73 ACALL DELAY5MS
74
0096 7408 75 MOV A,#08H ;显示关
0098 11A8 76 ACALL LCD_CMD ;进行LCD忙检测
77
009A 7401 78 MOV A,#01H ;清除屏幕
009C 11A8 79 ACALL LCD_CMD ;进行LCD忙检测
80
009E 740C 81 MOV A,#0CH ;显示开,关光标
00A0 11A8 82 ACALL LCD_CMD ;进行LCD忙检测
83
00A2 22 84 RET
85 ;***************************************************************
86 ;清LCD子程序
87 ;***************************************************************
00A3 88 CLR_LCD:
00A3 7401 89 MOV A,#01H ;清除屏幕
00A5 11A8 90 ACALL LCD_CMD ;进行LCD忙检测
00A7 22 91 RET
92
93 ;***************************************************************
94 ;写指令数据到LCD
95 ;RS=L,RW=L,D0-D7=指令码,E=高脉冲
96 ;***************************************************************
00A8 97 LCD_CMD:
00A8 11CA 98 CALL CHECKBUSY
00AA 99 LCD_CMD_NC:
00AA C2A6 100 CLR LCD_RS
00AC C2A5 101 CLR LCD_RW
00AE F580 102 MOV P0,A
00B0 D2A7 103 SETB LCD_EN
00B2 00 104 NOP
00B3 00 105 NOP
00B4 00 106 NOP
00B5 00 107 NOP
00B6 C2A7 108 CLR LCD_EN
00B8 22 109 RET
110 ;***************************************************************
111 ;写显示数据到LCD
112 ;RS=H,RW=L,D0-D7=数据,E=高脉冲
113 ;***************************************************************
00B9 114 LCD_WDATA:
00B9 11CA 115 ACALL CHECKBUSY
00BB D2A6 116 SETB LCD_RS
00BD C2A5 117 CLR LCD_RW
A51 MACRO ASSEMBLER YDLCD 03/29/2009 20:16:54 PAGE 3
00BF F580 118 MOV P0,A
00C1 D2A7 119 SETB LCD_EN
00C3 00 120 NOP
00C4 00 121 NOP
00C5 00 122 NOP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -