📄 lcd1602-4bit.lst
字号:
A51 MACRO ASSEMBLER LCD1602_4BIT 01/06/2007 11:24:02 PAGE 1
MACRO ASSEMBLER A51 V8.00
OBJECT MODULE PLACED IN LCD1602-4BIT.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE LCD1602-4BIT.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;********************************************************************
2 ;* *
3 ;* ME500单片机开发系统演示程序 - LCD1602 4位数据线控制方式 *
4 ;* *
5 ;* LCD1602显示 *
6 ;* *
7 ;* 邮箱: gguoqing@willar.com *
8 ;* 网站: http://www.willar.com *
9 ;* 作者: gguoqing *
10 ;* 时间: 2007/01/03 *
11 ;* *
12 ;*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved *
13 ;*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! *
14 ;* *
15 ;********************************************************************
16 ;* *
17 ;* 描述: *
18 ;* LCD1602可以分为8位和4位控制方式,8位控制方式是用D0-D7数据线 *
19 ;* 来传送控制命令及数据。4位控制方式是用D4-D7数据线来传送控制命令 *
20 ;* 及数据。使用4位数据线做控制时,需要分两次来传送,先送出高4位数 *
21 ;* 据,再送出低4位数据。可以节省单片机的4根端口线。 *
22 ;* *
23 ;********************************************************************
24
0040 25 HDATA EQU 40H
0041 26 LDATA EQU 41H
27
00A0 28 LCD_RS EQU P2.0
00A1 29 LCD_RW EQU P2.1
00A2 30 LCD_EN EQU P2.2
31
32 ;**********************************************************
33
0000 34 ORG 0000H
0000 020030 35 LJMP MAIN
0030 36 ORG 0030H
37
38 ;**********************************************************
0030 39 MAIN:
0030 758170 40 MOV SP,#70H
41
0033 11B4 42 ACALL LCD_INIT
43
0035 7480 44 MOV A,#80H ;显示在第一行
0037 9000F7 45 MOV DPTR,#CHAR1
003A 11A8 46 ACALL WR_STRING ;显示 WELCOME TO
003C 74C0 47 MOV A,#0C0H ;显示在第二行
003E 1148 48 ACALL LCD_CMD
0040 900107 49 MOV DPTR,#CHAR2 ;显示 WWW.WILLAR.COM
0043 11A8 50 ACALL WR_STRING
51
0045 80FE 52 JMP $
53
0047 22 54 RET
55
56 ;**********************************************************
57
58 ;写指令数据到LCD
A51 MACRO ASSEMBLER LCD1602_4BIT 01/06/2007 11:24:02 PAGE 2
59 ;RS=L,RW=L,D0-D7=指令码,E=高脉冲
60
61 ;**********************************************************
0048 62 LCD_CMD:
0048 1186 63 CALL CHECKBUSY
004A 64 LCD_CMD_NC:
004A C2A0 65 CLR LCD_RS
004C C2A1 66 CLR LCD_RW
004E 119A 67 CALL CHANGE
68
0050 854080 69 MOV P0,HDATA ;发送高四位
0053 D2A2 70 SETB LCD_EN
0055 11F1 71 CALL DELAYNOP
0057 C2A2 72 CLR LCD_EN
0059 11F1 73 CALL DELAYNOP
74
005B 854180 75 MOV P0,LDATA ;发送低四位
005E D2A2 76 SETB LCD_EN
0060 11F1 77 CALL DELAYNOP
0062 C2A2 78 CLR LCD_EN
0064 11F1 79 CALL DELAYNOP
80
0066 22 81 RET
82
83 ;***************************************************************
84
85 ;写显示数据到LCD
86 ;RS=H,RW=L,D0-D7=数据,E=高脉冲
87
88 ;***************************************************************
0067 89 LCD_WDATA:
0067 1186 90 CALL CHECKBUSY
0069 D2A0 91 SETB LCD_RS
006B C2A1 92 CLR LCD_RW
006D 119A 93 CALL CHANGE
94
006F 854080 95 MOV P0,HDATA ;发送高四位
0072 D2A2 96 SETB LCD_EN
0074 11F1 97 CALL DELAYNOP
0076 C2A2 98 CLR LCD_EN
0078 11F1 99 CALL DELAYNOP
100
007A 854180 101 MOV P0,LDATA ;发送低四位
007D D2A2 102 SETB LCD_EN
007F 11F1 103 CALL DELAYNOP
0081 C2A2 104 CLR LCD_EN
0083 11F1 105 CALL DELAYNOP
0085 22 106 RET
107 ;***************************************************************
108
109 ; 检测LCD控制器忙状态
110 ; 读数据
111 ; RS=L,RW=H,E=H,输出:D0-D7=数据
112
113 ;***************************************************************
0086 114 CHECKBUSY:
0086 C0E0 115 PUSH ACC
0088 7580FF 116 MOV P0,#0FFH
008B C2A0 117 CLR LCD_RS
008D D2A1 118 SETB LCD_RW
008F D2A2 119 SETB LCD_EN
0091 120 BUSYLOOP:
0091 00 121 NOP
0092 2087FC 122 JB P0.7,BUSYLOOP
0095 C2A2 123 CLR LCD_EN
0097 D0E0 124 POP ACC
A51 MACRO ASSEMBLER LCD1602_4BIT 01/06/2007 11:24:02 PAGE 3
0099 22 125 RET
126
127 ;***************************************************************
128
129 ; 数据分离子程序
130
131 ;***************************************************************
009A 132 CHANGE:
009A F541 133 MOV LDATA,A
009C 54F0 134 ANL A,#0F0H
009E F540 135 MOV HDATA,A ;得到高4位数据
136
00A0 E541 137 MOV A,LDATA
00A2 C4 138 SWAP A
00A3 54F0 139 ANL A,#0F0H
00A5 F541 140 MOV LDATA,A ;得到低4位数据
00A7 22 141 RET
142
143 ;***************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -