📄 lcd.lst
字号:
A51 MACRO ASSEMBLER LCD 19/11/04 16:45:55 PAGE 1
DOS MACRO ASSEMBLER A51 X4.86
OBJECT MODULE PLACED IN LCD.O
ASSEMBLER INVOKED BY: C:\OMF51\BIN\A51.EXE D:\C51\LCD1602\LCD.ASM DB SB XR RB(0) PR(LCD.LST) OJ(LCD.O)
LOC OBJ LINE SOURCE
1 ;----------------------------------------
2 ; LCD DISPLAYER
3 ;----------------------------------------
4 ;----------------INSTRUCTION------------
5 ;--命令数据控制:LCD_RS->P1.0
6 ;--读写控制端口:LCD_RW->P1.1
7 ;--选通控制端口:LCD_EN->P1.2
8 ;--信号灯控制口:COMM_STATE->P3.2
9 ;--结束灯控制口:COMM_END->P1.7
10 ;--按键开关端口:KEY->P1.6
11 ;--P0口对应LCD数据口
12
13 ;--命令缓冲区位于:08H 1位
14 ;--参数长度缓冲区位于:09H,其中高半位为发送长度,低半位为接受长度
15 ;--发送参数缓冲区位于:0A-11H 8位
16 ;--键盘缓冲区位于:12H-13H 2位
17 ;--接受参数缓冲区位于:14H-1BH 8位
18 ;--光标位置存储区位于:1CH 1位
19 ;--KEY_STATE=01H为按键状态
20 ;--SHIFT_STATE=02H为光标移动状态
21 ;--RETURN_STATE=03H为光标返回状态
22 ;LCD_CH=04H
23 ;LCD_CGRAM_ADD=05H,LCD_DDRAM_ADD=06H为地址寄存区
24 ;LCD_RAM_RD=07H为读出数据状态缓冲区
25 ;LCD_RAM_WR=08H为写入数据显示缓冲区
26 ;LCD_DISP_RAM=09H~29H为显示数据存储区
27 ;LCD_BUSY=2AH为检测状态位
28 ;MODE_NU=2BH为
29 ;--定义LCD控制端口
0090 30 LCD_RS EQU P1.0
0091 31 LCD_RW EQU P1.1
0092 32 LCD_EN EQU P1.2
33
34 ;--定义通讯端口
00B2 35 COMM_STATE EQU P3.2
0097 36 COMM_END EQU P1.7
0096 37 KEY EQU P1.6
38
39 ;--定义变量
0000 40 KEY_STATE EQU 00H
0001 41 SHIFT_STATE EQU 01H
0002 42 RERURN_STATE EQU 02H
43 ;--定义RAM
001C 44 CURSOR_POS EQU 1CH
45 ; LCD_CH EQU 30H
46 ; LCD_CGRAM_ADD EQU 31H
47 ; LCD_DDRAM_ADD EQU 32H
48 ; LCD_RAM_RD EQU 33H
49 ; LCD_RAM_WR EQU 35H ;33H 数据暂存区,35H~55H为显示数据存储区
001D 50 LCD_CH EQU 1DH
001E 51 LCD_CGRAM_ADD EQU 1EH
001F 52 LCD_DDRAM_ADD EQU 1FH
0020 53 LCD_RAM_RD EQU 20H
0021 54 LCD_RAM_WR EQU 21H
55 ;--主程序
0000 56 ORG 0000H
0000 020003 57 LJMP MAIN
0003 58 MAIN:
A51 MACRO ASSEMBLER LCD 19/11/04 16:45:55 PAGE 2
0003 758130 59 MOV SP,#30H
0006 C2B2 60 CLR COMM_STATE
0008 C297 61 CLR COMM_END
000A 62 KEYSCAN:
000A 2096FD 63 JB KEY,KEYSCAN
000D 120030 64 LCALL LCD_INIT ;--LCD初始化
0010 D2B2 65 SETB COMM_STATE
66
0012 9002C3 67 MOV DPTR,#EXP_LOGO
0015 120206 68 LCALL DISPLAY_STRING
0018 1202A9 69 LCALL DL1S
70
001B C2B2 71 CLR COMM_STATE
001D D297 72 SETB COMM_END
001F 7400 73 MOV A,#0
0021 1201B3 74 LCALL SET_DDRAM
75
0024 9002D7 76 MOV DPTR,#INIT_LOGO ;---初始化HOST
0027 120206 77 LCALL DISPLAY_STRING
002A 1202A9 78 LCALL DL1S
79
002D 020003 80 LJMP MAIN
81 ;----------------SUB---------------------
82 ;--------------LCD初始化------------------
0030 83 LCD_INIT:
0030 C290 84 CLR LCD_RS
0032 C291 85 CLR LCD_RW
0034 120054 86 LCALL CLR_LCD ;---清屏
87
0037 758006 88 MOV P0,#00000110B ;---设置光标移动方向,并指定显示是否移动.(增量方式,不移动)
003A D292 89 SETB LCD_EN
003C 12027B 90 LCALL DL40US
003F C292 91 CLR LCD_EN
92
0041 12012F 93 LCALL HIDE_CURSOR ;---设置显示开关(显示),光标开关(关),字符闪烁(关)
94
0044 758038 95 MOV P0,#00111000B ;---功能设置.(8位,2行,5*7字体)
0047 D292 96 SETB LCD_EN
0049 12027B 97 LCALL DL40US
004C C292 98 CLR LCD_EN
99
004E 7400 100 MOV A,#0 ;---设置DDRAM地址(0)
0050 1201B3 101 LCALL SET_DDRAM
0053 22 102 RET
103 ;---------------清屏显示------------------
0054 104 CLR_LCD: ;数据指针清零,所有显示清零
0054 00 105 NOP ;清屏
0055 C290 106 CLR LCD_RS
0057 C291 107 CLR LCD_RW
0059 758001 108 MOV P0,#00000001B
005C D292 109 SETB LCD_EN
005E 120285 110 LCALL DL2MS
0061 C292 111 CLR LCD_EN
0063 120285 112 LCALL DL2MS
0066 22 113 RET
114 ;-------------设置光标返回-------------
0067 115 SET_CURSOR_RETURN: ;数据指针清零,光标退回初始状态
0067 00 116 NOP
0068 C290 117 CLR LCD_RS
006A C291 118 CLR LCD_RW
006C 758002 119 MOV P0,#00000010B
006F D292 120 SETB LCD_EN
0071 120285 121 LCALL DL2MS
0074 C292 122 CLR LCD_EN
0076 120285 123 LCALL DL2MS
0079 22 124 RET
A51 MACRO ASSEMBLER LCD 19/11/04 16:45:55 PAGE 3
125 ;--------------设置输入方式----------------
007A 126 SET_LCD_IN: ;当读或写一个字符后,地址指针加一且光标加一,整屏显示不移动
007A 00 127 NOP
007B C290 128 CLR LCD_RS
007D C291 129 CLR LCD_RW
007F 758006 130 MOV P0,#00000110B
0082 D292 131 SETB LCD_EN
0084 12027B 132 LCALL DL40US
0087 C292 133 CLR LCD_EN
0089 12027B 134 LCALL DL40US
008C 22 135 RET
008D 136 SET_INPUT_MODE1:
008D 00 137 NOP
008E C290 138 CLR LCD_RS
0090 C291 139 CLR LCD_RW
0092 758006 140 MOV P0,#00000110B
0095 D292 141 SETB LCD_EN
0097 12027B 142 LCALL DL40US
009A C292 143 CLR LCD_EN
009C 12027B 144 LCALL DL40US
009F 22 145 RET
00A0 146 SET_INPUT_MODE2:
00A0 00 147 NOP
00A1 C290 148 CLR LCD_RS
00A3 C291 149 CLR LCD_RW
00A5 758007 150 MOV P0,#00000111B
00A8 D292 151 SETB LCD_EN
00AA 12027B 152 LCALL DL40US
00AD C292 153 CLR LCD_EN
00AF 12027B 154 LCALL DL40US
00B2 22 155 RET
156 ;-------------设置显示开关---------------
00B3 157 SET_LCD_DISP: ;开显示,不显示光标,光标不显示
00B3 00 158 NOP
00B4 C290 159 CLR LCD_RS
00B6 C291 160 CLR LCD_RW
00B8 75800C 161 MOV P0,#00001100B
00BB D292 162 SETB LCD_EN
00BD 12027B 163 LCALL DL40US
00C0 C292 164 CLR LCD_EN
00C2 12027B 165 LCALL DL40US
00C5 22 166 RET
00C6 167 SET_DISP_CLOSE:
00C6 00 168 NOP
00C7 C290 169 CLR LCD_RS
00C9 C291 170 CLR LCD_RW
00CB 758008 171 MOV P0,#00001000B
00CE D292 172 SETB LCD_EN
00D0 12027B 173 LCALL DL40US
00D3 C292 174 CLR LCD_EN
00D5 12027B 175 LCALL DL40US
00D8 22 176 RET
00D9 177 SET_LCD_DISP1:
00D9 00 178 NOP
00DA C290 179 CLR LCD_RS
00DC C291 180 CLR LCD_RW
00DE 75800F 181 MOV P0,#00001111B
00E1 D292 182 SETB LCD_EN
00E3 12027B 183 LCALL DL40US
00E6 C292 184 CLR LCD_EN
00E8 12027B 185 LCALL DL40US
00EB 22 186 RET
00EC 187 SET_DISP_ONOFF1: ;开显示,不显示光标,字符光标不显示
00EC 00 188 NOP
00ED C290 189 CLR LCD_RS
00EF C291 190 CLR LCD_RW
A51 MACRO ASSEMBLER LCD 19/11/04 16:45:55 PAGE 4
00F1 75800C 191 MOV P0,#00001100B
00F4 D292 192 SETB LCD_EN
00F6 12027B 193 LCALL DL40US
00F9 C292 194 CLR LCD_EN
00FB 12027B 195 LCALL DL40US
00FE 22 196 RET
00FF 197 SET_SHOW_CURSOR: ;开显示,光标关,字符光标闪
00FF 00 198 NOP
0100 C290 199 CLR LCD_RS
0102 C291 200 CLR LCD_RW
0104 75800D 201 MOV P0,#00001101B
0107 D292 202 SETB LCD_EN
0109 12027B 203 LCALL DL40US
010C C292 204 CLR LCD_EN
010E 12027B 205 LCALL DL40US
0111 22 206 RET
0112 207 SET_HIDE_CURSOR: ;开显示,光标关,字符光标不闪
0112 00 208 NOP
0113 C290 209 CLR LCD_RS
0115 C291 210 CLR LCD_RW
0117 75800C 211 MOV P0,#00001100B
011A D292 212 SETB LCD_EN
011C 12027B 213 LCALL DL40US
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -