📄 lcd1305.lst
字号:
A51 MACRO ASSEMBLER LCD1305 01/07/2007 20:59:55 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN LCD1305.OBJ
ASSEMBLER INVOKED BY: C:\Keil7.06\C51\BIN\A51.EXE LCD1305.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;文件名:LCD1305.ASM
2 ;程序功能:自编图形显示
00B5 3 RS bit P3.5
00B6 4 RW bit P3.6
00B7 5 E bit P3.7
0090 6 LCD EQU P1
7
0000 8 MAIN: ;主程序
0000 1140 9 ACALL INIT_LCD ;调用初始化子程序
0002 1110 10 ACALL TEMP_BJ ;显示温度标记"C"
11
0004 1125 12 ACALL STORE_DATA ;将自定义字符存入CGRAM
0006 74CB 13 MOV A,#0CBH ;写入显示起始地址
0008 1153 14 ACALL WR_COMM ;调用写指令子程序
000A 7400 15 MOV A,#00H ;CGRAM内第0号图形
000C 1160 16 ACALL WR_DATA ;调用写数据指令子程序
000E 80FE 17 JMP $ ;动态停机
18
19 ;显示温度标记子程序
0010 20 TEMP_BJ:
0010 74CB 21 MOV A, #0CBH ;设定第二行起始地址
0012 1153 22 ACALL WR_COMM ;调用写指令子程序
0014 900023 23 MOV DPTR,#BJ ;存代码表
0017 7900 24 MOV R1 ,#0 ;使指针指到表中第一个码
0019 7802 25 MOV R0 ,#2 ;取码次数
001B 26 TP1:
001B E9 27 MOV A,R1 ;A为0
001C 93 28 MOVC A,@A+DPTR ;取码
001D 1160 29 ACALL WR_DATA ;调用写数据子程序
001F 09 30 INC R1 ;R1值加1
0020 D8F9 31 DJNZ R0,TP1 ;判断是否将代码读取完?
0022 22 32 RET
0023 33 BJ: ;代码表
0023 0043 34 DB 00H, "C" ;
35
36 ;将自定义字符写入LCD1602的CGRAM中
0025 37 STORE_DATA:
0025 7440 38 MOV A,#40H ;指定CG RAM起始地址
0027 1153 39 ACALL WR_COMM ;将指令写入LCD
0029 7A08 40 MOV R2,#08H ;图形数据长度8个字节
002B 900038 41 MOV DPTR,#TAB ;存代码表
002E 7B00 42 MOV R3,#00H ;使指针指到表中第一个码
0030 EB 43 S_D: MOV A,R3 ;A为0
0031 93 44 MOVC A,@A+DPTR ;读取表代码
0032 1160 45 ACALL WR_DATA ;调用写入数据指令
0034 0B 46 INC R3 ;R3值加1
0035 DAF9 47 DJNZ R2, S_D ;判断是否将代码读取完?
0037 22 48 RET ;
0038 49 TAB: ;代码表
0038 0C12120C 50 DB 0CH,12H,12H,0CH
003C 00000000 51 DB 00H,00H,00H,00H
52
53 ;初始化设置
0040 54 INIT_LCD: ;LCD 接口初始化
0040 7401 55 MOV A,#01H ;清除 LCD 显示屏
0042 1153 56 ACALL WR_COMM ;调用写指令子程序
0044 1174 57 ACALL DELAY1 ;延时5MS
0046 7438 58 MOV A,#38H ;设置8位、2行、5x7点阵
A51 MACRO ASSEMBLER LCD1305 01/07/2007 20:59:55 PAGE 2
0048 1153 59 ACALL WR_COMM ;调用写指令子程序
004A 1174 60 ACALL DELAY1 ;延时5MS
004C 740C 61 MOV A,#0CH ;开显示屏
004E 1153 62 ACALL WR_COMM ;调用写指令子程序
0050 1174 63 ACALL DELAY1 ;延时5MS
0052 22 64 RET
65
0053 66 WR_COMM:
0053 F590 67 MOV P1,A ;写入指令
0055 C2B5 68 CLR RS ;RS=0,选择指令寄存器
0057 C2B6 69 CLR RW ;RW=0,选择写模式
0059 D2B7 70 SETB E ;E=1,允许读/写LCM
005B 1174 71 ACALL DELAY1 ;延时5MS
005D C2B7 72 CLR E ;E=0,禁止读/写LCM
005F 22 73 RET
74 ;写数据程序
0060 75 WR_DATA:
0060 F590 76 MOV P1,A ;写入数据
0062 D2B5 77 SETB RS ;RS=1,选择数据寄存器
0064 C2B6 78 CLR RW ;RW=0,选择写模式
0066 D2B7 79 SETB E ;E=1,允许读/写LCM
0068 116F 80 ACALL DE ;延时0.5MS
006A C2B7 81 CLR E ;E=0,禁止读/写LCM
006C 116F 82 ACALL DE ;延时0.5MS
006E 22 83 RET
84
006F 7FFA 85 DE: MOV R7,#250 ;延时0.5MS
0071 DFFE 86 DJNZ R7,$
0073 22 87 RET
88
0074 89 DELAY1: ;延时5MS
0074 7E19 90 MOV R6,#25
0076 7F64 91 DL2: MOV R7,#100
0078 DFFE 92 DJNZ R7,$
007A DEFA 93 DJNZ R6,DL2
007C 22 94 RET
95
96 END ;程序结束
A51 MACRO ASSEMBLER LCD1305 01/07/2007 20:59:55 PAGE 3
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
BJ . . . . . . . . C ADDR 0023H A
DE . . . . . . . . C ADDR 006FH A
DELAY1 . . . . . . C ADDR 0074H A
DL2. . . . . . . . C ADDR 0076H A
E. . . . . . . . . B ADDR 00B0H.7 A
INIT_LCD . . . . . C ADDR 0040H A
LCD. . . . . . . . D ADDR 0090H 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
STORE_DATA . . . . C ADDR 0025H A
S_D. . . . . . . . C ADDR 0030H A
TAB. . . . . . . . C ADDR 0038H A
TEMP_BJ. . . . . . C ADDR 0010H A
TP1. . . . . . . . C ADDR 001BH A
WR_COMM. . . . . . C ADDR 0053H A
WR_DATA. . . . . . C ADDR 0060H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -