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