📄 adc0832-1602lcd.lst
字号:
00C5 24C0 155 ADD A,#0C0H ;设置LCD的第二行地址
00C7 11A2 156 CALL WCOM ;写入命令
00C9 D0E0 157 POP ACC ;由堆栈取出A
00CB 11AF 158 CALL WDATA ;写入数据
00CD 22 159 RET
160 ;=================================================
161 ;ASCII 转换并在第二行显示数字子程序
162 ;=================================================
00CE 163 LCD_CONV:
00CE EC 164 MOV A,R4 ;加载数据
00CF 75200A 165 MOV LCD_X,#10 ;设置位置
00D2 11E3 166 CALL SHOW_DIG2A ;显示数据
00D4 0520 167 INC LCD_X ;设置位置
00D6 742E 168 MOV A,#'.'
00D8 8520F0 169 MOV B,LCD_X
00DB 11C1 170 CALL LCDP2 ;显示小数点
00DD ED 171 MOV A,R5 ;加载数据
00DE 0520 172 INC LCD_X ;设置位置
00E0 11F1 173 CALL SHOW_DIG2B ;显示数据
00E2 22 174 RET
175 ;---------------------------------------
176 ;整数部分转换为ASCII码,送显示
177 ;只显示一位数
178 ;---------------------------------------
00E3 179 SHOW_DIG2A:
00E3 75F010 180 MOV B,#16
00E6 84 181 DIV AB
00E7 E5F0 182 MOV A,B ;只取整数部分的个位
A51 MACRO ASSEMBLER ADC0832_1602LCD 03/29/2005 16:28:27 PAGE 4
00E9 2430 183 ADD A,#30H ;转换为ASCII码
00EB 8520F0 184 MOV B,LCD_X ;地址变量送B
00EE 11C1 185 CALL LCDP2 ;送显示
00F0 22 186 RET
187 ;---------------------------------------
188 ;小数部分转换为ASCII码,送显示
189 ;显示两位数
190 ;---------------------------------------
00F1 191 SHOW_DIG2B:
00F1 75F010 192 MOV B,#16
00F4 84 193 DIV AB
00F5 2430 194 ADD A,#30H ;转换为ASCII码
00F7 C0F0 195 PUSH B
00F9 8520F0 196 MOV B,LCD_X ;地址变量送B
00FC 11C1 197 CALL LCDP2 ;送显示
00FE D0F0 198 POP B
0100 E5F0 199 MOV A,B
0102 2430 200 ADD A,#30H ;转换为ASCII码
0104 0520 201 INC LCD_X
0106 8520F0 202 MOV B,LCD_X ;地址变量送B
0109 11C1 203 CALL LCDP2 ;送显示
010B 22 204 RET
205 ;=========================================================
206 ;AD0832 初始化与AD转换子程序
207 ;(A)=AD转换值
208 ;=========================================================
010C 209 AD_CONV:
010C D2B4 210 SETB AD_CS ;一个转换周期开始
010E C290 211 CLR AD_CLK
0110 C2B4 212 CLR AD_CS ;CS置0,片选有效
0112 D291 213 SETB AD_DAT ;DI置1,起始位
0114 00 214 NOP
0115 D290 215 SETB AD_CLK ;第一个脉冲
0117 C291 216 CLR AD_DAT ;在负跳变之前加一个DI反转操作
0119 C290 217 CLR AD_CLK
011B D291 218 SETB AD_DAT ;DI置1,设为单通道
011D 00 219 NOP
011E D290 220 SETB AD_CLK ;第二个脉冲
0120 C291 221 CLR AD_DAT
0122 C290 222 CLR AD_CLK
0124 C291 223 CLR AD_DAT ;DI置0,选择通道0
0126 00 224 NOP
0127 D290 225 SETB AD_CLK ;第三个脉冲
0129 D291 226 SETB AD_DAT
012B C290 227 CLR AD_CLK
012D 00 228 NOP
012E D290 229 SETB AD_CLK ; 第四个脉冲
0130 7908 230 MOV R1,#08H ;计数器初值,读取8位数据,
0132 C290 231 AD_READ: CLR AD_CLK ;下降沿
0134 A291 232 MOV C,AD_DAT ;读取DO端数据
0136 33 233 RLC A ;C移入A,高位在前
0137 D290 234 SETB AD_CLK ;下一个脉冲
0139 D9F7 235 DJNZ R1,AD_READ ;没读完继续
013B D2B4 236 SETB AD_CS
013D 22 237 RET
238 ;====================================================
239 ;AD转换值处理子程序
240 ;入口:(A) =AD转换值
241 ;出口:处理后的数据 (R4)=高位,(R5)=低位
242 ;====================================================
013E 243 AD_CHULI:
013E C3 244 CLR C
013F 7D00 245 MOV R5,#00H ;十进制转换的低位寄存器
0141 7C00 246 MOV R4,#00H ;十进制转换的高位寄存器
0143 7B08 247 MOV R3,#08H ;十进制调整的次数
0145 248 AD_CHULI1:
A51 MACRO ASSEMBLER ADC0832_1602LCD 03/29/2005 16:28:27 PAGE 5
0145 33 249 RLC A
0146 FA 250 MOV R2,A ;送 R2 保存
0147 ED 251 MOV A,R5 ;(R5)乘2加C
0148 3D 252 ADDC A,R5
0149 D4 253 DA A ;做十进制调整
014A FD 254 MOV R5,A ;结果存回R5
014B EC 255 MOV A,R4 ;(R4)乘2加C
014C 3C 256 ADDC A,R4
014D FC 257 MOV R4,A ;结果存回R4
014E EA 258 MOV A,R2
014F DBF4 259 DJNZ R3,AD_CHULI1 ;是否转换完?
0151 ED 260 MOV A,R5 ;(R5)乘2
0152 2D 261 ADD A,R5
0153 D4 262 DA A
0154 FD 263 MOV R5,A ;结果存回R5
0155 EC 264 MOV A,R4
0156 3C 265 ADDC A,R4 ;(R4)乘2加C
0157 D4 266 DA A
0158 FC 267 MOV R4,A ;结果存回R4
0159 22 268 RET
269 ;---------------------------------------------------
270 END ;结束
A51 MACRO ASSEMBLER ADC0832_1602LCD 03/29/2005 16:28:27 PAGE 6
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
AD_CHULI . . . . . C ADDR 013EH A
AD_CHULI1. . . . . C ADDR 0145H A
AD_CLK . . . . . . B ADDR 0090H.0 A
AD_CONV. . . . . . C ADDR 010CH A
AD_CS. . . . . . . B ADDR 00B0H.4 A
AD_DAT . . . . . . B ADDR 0090H.1 A
AD_READ. . . . . . C ADDR 0132H A
B. . . . . . . . . D ADDR 00F0H A
CL1. . . . . . . . C ADDR 009BH A
CLR_LINE . . . . . C ADDR 0099H A
DEL1 . . . . . . . C ADDR 006DH A
DELAY0 . . . . . . C ADDR 00BCH A
DELAY1 . . . . . . C ADDR 006BH A
FILL . . . . . . . C ADDR 008DH A
INFO1. . . . . . . C ADDR 002AH A
INFO2. . . . . . . C ADDR 003BH A
INIT_LCD . . . . . C ADDR 004CH A
LC1. . . . . . . . C ADDR 0093H A
LCDP2. . . . . . . C ADDR 00C1H A
LCD_CONV . . . . . C ADDR 00CEH A
LCD_EN . . . . . . B ADDR 00A0H.2 A
LCD_RS . . . . . . B ADDR 00A0H.0 A
LCD_RW . . . . . . B ADDR 00A0H.1 A
LCD_SHOW . . . . . C ADDR 0074H A
LCD_X. . . . . . . N NUMB 0020H A
LINE1. . . . . . . C ADDR 0077H A
LINE2. . . . . . . C ADDR 0083H A
P0 . . . . . . . . D ADDR 0080H A
P1 . . . . . . . . D ADDR 0090H A
P2 . . . . . . . . D ADDR 00A0H A
P3 . . . . . . . . D ADDR 00B0H A
SET_LCD. . . . . . C ADDR 0015H A
SHOW_DIG2A . . . . C ADDR 00E3H A
SHOW_DIG2B . . . . C ADDR 00F1H A
SP . . . . . . . . D ADDR 0081H A
START. . . . . . . C ADDR 0002H A
START1 . . . . . . C ADDR 000DH A
WCOM . . . . . . . C ADDR 00A2H A
WDATA. . . . . . . C ADDR 00AFH A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -