📄 lcd1304.lst
字号:
A51 MACRO ASSEMBLER LCD1304 01/07/2007 20:58:35 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN LCD1304.OBJ
ASSEMBLER INVOKED BY: C:\Keil7.06\C51\BIN\A51.EXE LCD1304.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;文件名:LCD1304.ASM
2 ;程序功能:LCD循环显示
3
00B5 4 RS bit P3.5
00B6 5 RW bit P3.6
00B7 6 E bit P3.7
0090 7 LCD EQU P1
8
0000 9 MAIN: ;主程序
0000 1140 10 ACALL INIT_LCD ;调用初始化子程序
11
0002 12 LOOP1: ;循环
0002 759081 13 MOV LCD,#81H ;写入显示起始地址
0005 1155 14 ACALL WR_COMM ;调用写指令子程序
0007 90009E 15 MOV DPTR,#LINE1 ;字符串地址送入DPTR
000A 7806 16 MOV R0,#6 ;字符串的字符数
000C 117B 17 ACALL DISP_LCD ;调用查表子程序
000E 1191 18 ACALL DELAY ;调用延时子程序
19
0010 7590C0 20 MOV LCD,#0C0H ;写入显示起始地址
0013 1155 21 ACALL WR_COMM ;调用写指令子程序
0015 9000A4 22 MOV DPTR,#LINE2 ;字符串地址送入DPTR
0018 780E 23 MOV R0,#14 ;字符串的字符数
24
001A 117B 25 ACALL DISP_LCD ;调用查表子程序
001C 1191 26 ACALL DELAY ;调用延时子程序
001E 118B 27 ACALL CLS ;调用清屏子程序
28
0020 759080 29 MOV LCD,#80H ;写入显示起始地址
0023 1155 30 ACALL WR_COMM ;调用写指令子程序
0025 9000B3 31 MOV DPTR,#LINE3 ;字符串地址送入DPTR
0028 7810 32 MOV R0,#16 ;字符串的字符数
002A 117B 33 ACALL DISP_LCD ;调用查表子程序
002C 1191 34 ACALL DELAY ;调用延时子程序
35
002E 7590C0 36 MOV LCD,#0C0H ;写入显示起始地址
0031 1155 37 ACALL WR_COMM ;调用写指令子程序
0033 9000C4 38 MOV DPTR,#LINE4 ;字符串地址送入DPTR
0036 780A 39 MOV R0,#10 ;字符串的字符数
0038 117B 40 ACALL DISP_LCD ;调用查表子程序
003A 1191 41 ACALL DELAY ;调用延时子程序
003C 118B 42 ACALL CLS ;调用清屏子程序
003E 80C2 43 JMP LOOP1 ;无限循环
44
0040 45 INIT_LCD: ;LCM初始化设定
0040 759001 46 MOV LCD,#00000001B ;清屏并光标复位
0043 1155 47 ACALL WR_COMM ;调用写指令子程序
0045 759038 48 MOV LCD,#00111000B;设置8位、2行、5x7点阵
0048 1155 49 ACALL WR_COMM ;调用写指令子程序
004A 75900F 50 MOV LCD,#00001111B ;显示器开,光标允许闪烁
004D 1155 51 ACALL WR_COMM ;调用写指令子程序
004F 759006 52 MOV LCD,#00000110B ;文字不动,光标自动右移
0052 1155 53 ACALL WR_COMM ;调用写指令子程序
0054 22 54 RET
55
0055 56 WR_COMM: ;写指令子程序
0055 C2B5 57 CLR RS ;RS=0,选择指令寄存器
0057 C2B6 58 CLR RW ;RW=0,选择写模式
A51 MACRO ASSEMBLER LCD1304 01/07/2007 20:58:35 PAGE 2
0059 C2B7 59 CLR E ;E=0,禁止读/写LCM
005B 1160 60 ACALL CHECK_BF ;调用判LCM忙碌子程序
005D D2B7 61 SETB E ;E=1,允许读/写LCM
005F 22 62 RET
63
0060 64 CHECK_BF: ;判断是否忙碌子程序
0060 7590FF 65 MOV LCD, #0FFH ;此时不接受外来指令
0063 C2B5 66 CLR RS ;RS=0,选择指令寄存器
0065 D2B6 67 SETB RW ;RW=1,选择读模式
0067 C2B7 68 CLR E ;E=0,禁止读/写LCM
0069 00 69 NOP ;延时1微秒
006A D2B7 70 SETB E ;E=1,允许读/写LCM
006C 2097F1 71 JB LCD.7,CHECK_BF ;忙碌循环等待
006F 22 72 RET
73
0070 74 WR_DATA: ;写数据子程序
0070 D2B5 75 SETB RS ;RS=1,选择数据寄存器
0072 C2B6 76 CLR RW ;RW=0,选择写模式
0074 C2B7 77 CLR E ;E=0,禁止读/写LCM
0076 1160 78 ACALL CHECK_BF ;调用判断忙碌子程序
0078 D2B7 79 SETB E ;E=1,允许读/写LCM
007A 22 80 RET
81
007B 82 DISP_LCD: ;查表显示子程序
007B 7900 83 MOV R1,#0 ;查表地址初始值
007D E9 84 LOOP: MOV A,R1 ;将表地址初值赋予A
007E 93 85 MOVC A,@A+DPTR ;查表将字符串内容送入A
007F F590 86 MOV LCD,A ;将字符串内容送入LCD
0081 09 87 INC R1 ;地址值加1
0082 1170 88 ACALL WR_DATA ;调用写入数据子程序
0084 7D19 89 mov r5,#25
0086 1193 90 acall d1
0088 D8F3 91 DJNZ R0,LOOP ;判断查表是否6次?
008A 22 92 RET ;子程序返回
93
008B 94 CLS: ;清显示屏
008B 759001 95 MOV LCD,#00000001B
008E 1155 96 ACALL WR_COMM
0090 22 97 RET
98
0091 99 DELAY: ;延时时间为3秒
0091 7D64 100 MOV R5,#100
0093 7E64 101 D1:MOV R6,#100
0095 7F64 102 D2:MOV R7,#100
0097 DFFE 103 DJNZ R7,$
0099 DEFA 104 DJNZ R6,D2
009B DDF6 105 DJNZ R5,D1
009D 22 106 RET
107
009E 48656C6C 108 LINE1: DB 'Hello!'
00A2 6F21
00A4 57656C63 109 LINE2: DB 'Welcome to LCD!'
00A8 6F6D6520
00AC 746F204C
00B0 434421
00B3 4E696365 110 LINE3: DB 'Nice to meet you!'
00B7 20746F20
00BB 6D656574
00BF 20796F75
00C3 21
00C4 476F6F64 111 LINE4: DB 'Good luck!'
00C8 206C7563
00CC 6B21
112
113 END ; 程序结束
A51 MACRO ASSEMBLER LCD1304 01/07/2007 20:58:35 PAGE 3
A51 MACRO ASSEMBLER LCD1304 01/07/2007 20:58:35 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
CHECK_BF . . . . . C ADDR 0060H A
CLS. . . . . . . . C ADDR 008BH A
D1 . . . . . . . . C ADDR 0093H A
D2 . . . . . . . . C ADDR 0095H A
DELAY. . . . . . . C ADDR 0091H A
DISP_LCD . . . . . C ADDR 007BH A
E. . . . . . . . . B ADDR 00B0H.7 A
INIT_LCD . . . . . C ADDR 0040H A
LCD. . . . . . . . D ADDR 0090H A
LINE1. . . . . . . C ADDR 009EH A
LINE2. . . . . . . C ADDR 00A4H A
LINE3. . . . . . . C ADDR 00B3H A
LINE4. . . . . . . C ADDR 00C4H A
LOOP . . . . . . . C ADDR 007DH A
LOOP1. . . . . . . C ADDR 0002H A
MAIN . . . . . . . C ADDR 0000H A
P1 . . . . . . . . D ADDR 0090H A
P3 . . . . . . . . D ADDR 00B0H A
RS . . . . . . . . B ADDR 00B0H.5 A
RW . . . . . . . . B ADDR 00B0H.6 A
WR_COMM. . . . . . C ADDR 0055H A
WR_DATA. . . . . . C ADDR 0070H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -