📄 adc0832-1602lcd.lst
字号:
A51 MACRO ASSEMBLER ADC0832_1602LCD 03/29/2005 16:28:27 PAGE 1
MACRO ASSEMBLER A51 V7.10
OBJECT MODULE PLACED IN ADC0832-1602LCD.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE ADC0832-1602LCD.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;********************************************************************************
2 ;* 标题: 伟纳电子ME300B单片机开发系统演示程序 - ADC0832数字电压表1602LCD显示 *
3 ;* 文件: ADC0832_1602LCD.asm *
4 ;* 日期: 2005-3-20 *
5 ;* 版本: 1.0 *
6 ;* 作者: gguoqing *
7 ;* 邮箱: gguoqing@sxicc.ac.cn *
8 ;* 网站: http://www.willar.com *
9 ;********************************************************************************
10 ;* 描述: *
11 ;* ADC0832数字电压表1602LCD显示 *
12 ;* *
13 ;* 调节ADC0832旁边的电位器,在LCD1602 显示 ADC0832 转换值的大小 *
14 ;* *
15 ;* *
16 ;********************************************************************************
17 ;* 【版权】 Copyright(C)伟纳电子 www.willar.com All Rights Reserved *
18 ;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
19 ;********************************************************************************
20
21
0090 22 AD_CLK EQU P1.0 ;ADC0832 时钟端
0091 23 AD_DAT EQU P1.1 ;ADC0832 数据端
00B4 24 AD_CS EQU P3.4 ;ADC0832 片选信号
25
00A0 26 LCD_RS EQU P2.0 ;LCD 数据/命令选择端
00A1 27 LCD_RW EQU P2.1 ;LCD 读/写选择端
00A2 28 LCD_EN EQU P2.2 ;LCD 使能信号
0020 29 LCD_X EQU 20H ;LCD 地址变量
30
0000 31 ORG 0000H
0000 8000 32 JMP START
33 ;===================================================
0002 758160 34 START: MOV SP,#60H
0005 7580FF 35 MOV P0,#0FFH
0008 75A0FF 36 MOV P2,#0FFH
000B 1115 37 CALL SET_LCD
38
000D 310C 39 START1: CALL AD_CONV ;AD转换
000F 313E 40 CALL AD_CHULI ;数据处理
0011 11CE 41 CALL LCD_CONV ;数据显示
0013 80F8 42 JMP START1
43 ;====================================================
44 ; LCD 初始化设置
45 ;====================================================
0015 46 SET_LCD:
0015 C2A2 47 CLR LCD_EN
0017 114C 48 CALL INIT_LCD ;初始化 LCD
0019 116B 49 CALL DELAY1
001B 90002A 50 MOV DPTR,#INFO1 ;指针指到显示信息1
001E 7401 51 MOV A,#1 ;显示在第一行
0020 1174 52 CALL LCD_SHOW
0022 90003B 53 MOV DPTR,#INFO2 ;指针指到显示信息2
0025 7402 54 MOV A,#2 ;显示在第二行
0027 1174 55 CALL LCD_SHOW
0029 22 56 RET
57 ;-----------------------------------------------------
002A 44494749 58 INFO1: DB "DIGITALVOLTMETER",0 ;LCD 第一行显示信息
A51 MACRO ASSEMBLER ADC0832_1602LCD 03/29/2005 16:28:27 PAGE 2
002E 54414C56
0032 4F4C544D
0036 45544552
003A 00
003B 20564F4C 59 INFO2: DB " VOLTAGE: V ",0 ;LCD 第二行显示信息
003F 54414745
0043 3A202020
0047 20205620
004B 00
60 ;-----------------------------------------------------
61 ;-----------------------------------------------------
62 ; LCD 接口初始化
63 ;-----------------------------------------------------
004C 64 INIT_LCD:
004C 7438 65 MOV A,#38H ;双列显示,字形5*7点阵
004E 11A2 66 CALL WCOM
0050 116B 67 CALL DELAY1
0052 7438 68 MOV A,#38H ;双列显示,字形5*7点阵
0054 11A2 69 CALL WCOM
0056 116B 70 CALL DELAY1
0058 7438 71 MOV A,#38H ;双列显示,字形5*7点阵
005A 11A2 72 CALL WCOM
005C 116B 73 CALL DELAY1
005E 740C 74 MOV A,#0CH ;开显示,关光标,
0060 11A2 75 CALL WCOM
0062 116B 76 CALL DELAY1
0064 7401 77 MOV A,#01H ;清除 LCD 显示屏
0066 11A2 78 CALL WCOM
0068 116B 79 CALL DELAY1
006A 22 80 RET
81 ;-------------------------------------------------
006B 82 DELAY1: ;延时5MS
006B 7E19 83 MOV R6,#25
006D 7F64 84 DEL1: MOV R7,#100
006F DFFE 85 DJNZ R7,$
0071 DEFA 86 DJNZ R6,DEL1
0073 22 87 RET
88 ;==================================================
89 ;在LCD的第一行或第二行显示信息字符
90 ;==================================================
0074 91 LCD_SHOW:
92
0074 B4010C 93 CJNE A,#1,LINE2 ;判断是否为第一行
0077 7480 94 LINE1: MOV A,#80H ;设置 LCD 的第一行地址
0079 11A2 95 CALL WCOM ;写入命令
007B 1199 96 CALL CLR_LINE ;清除该行字符数据
007D 7480 97 MOV A,#80H ;设置 LCD 的第一行地址
007F 11A2 98 CALL WCOM ;写入命令
0081 800A 99 JMP FILL
0083 74C0 100 LINE2: MOV A,#0C0H ;设置 LCD 的第二行地址
0085 11A2 101 CALL WCOM ;写入命令
0087 1199 102 CALL CLR_LINE ;清除该行字符数据
0089 74C0 103 MOV A,#0C0H ;设置 LCD 的第二行地址
008B 11A2 104 CALL WCOM
008D E4 105 FILL: CLR A ;填入字符
008E 93 106 MOVC A,@A+DPTR ;由消息区取出字符
008F B40001 107 CJNE A,#0,LC1 ;判断是否为结束码
0092 22 108 RET
0093 11AF 109 LC1: CALL WDATA ;写入数据
0095 A3 110 INC DPTR ;指针加1
0096 80F5 111 JMP FILL ;继续填入字符
0098 22 112 RET
113 ;---------------------------------------------------
0099 114 CLR_LINE: ;清除该行 LCD 的字符
0099 7818 115 MOV R0,#24
009B 7420 116 CL1: MOV A,#' '
A51 MACRO ASSEMBLER ADC0832_1602LCD 03/29/2005 16:28:27 PAGE 3
009D 11AF 117 CALL WDATA
009F D8FA 118 DJNZ R0,CL1
00A1 22 119 RET
120 ;======================================================
121 ; 写指令使能子程序
122 ;RS=L,RW=L,D0-D7=指令码,E=高脉冲
123 ;=====================================================
00A2 124 WCOM:
00A2 F580 125 MOV P0,A
00A4 C2A0 126 CLR LCD_RS
00A6 C2A1 127 CLR LCD_RW
00A8 D2A2 128 SETB LCD_EN
00AA 11BC 129 CALL DELAY0
00AC C2A2 130 CLR LCD_EN
00AE 22 131 RET
132 ;=====================================================
133 ;写数据使能子程序
134 ;RS=H,RW=L,D0-D7=数据,E=高脉冲
135 ;=====================================================
00AF 136 WDATA:
00AF F580 137 MOV P0,A
00B1 D2A0 138 SETB LCD_RS
00B3 C2A1 139 CLR LCD_RW
00B5 D2A2 140 SETB LCD_EN
00B7 11BC 141 CALL DELAY0
00B9 C2A2 142 CLR LCD_EN
00BB 22 143 RET
144
00BC 7FFA 145 DELAY0: MOV R7,#250 ;延时500微秒
00BE DFFE 146 DJNZ R7,$
00C0 22 147 RET
148 ;---------------------------------------------------
149 ;在 LCD 第二行指定位置显示字符
150 ;(A)=ASCII 数据, (B)=位置变量
151 ;---------------------------------------------------
00C1 152 LCDP2:
00C1 C0E0 153 PUSH ACC ;入栈保护A
00C3 E5F0 154 MOV A,B ;设置显示地址
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -