addsub.lst
来自「单片机开发板源码 适合初学者 第四部分 字符型LCD显示1-2」· LST 代码 · 共 234 行
LST
234 行
A51 MACRO ASSEMBLER ADDSUB 09/13/2007 01:58:08 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN ADDSUB.OBJ
ASSEMBLER INVOKED BY: C:\tools\Keil\C51\BIN\A51.EXE ADDSUB.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;实验名称:按加减键实现内部加减 0.01
2 ; 功能:数码显示0.20---2.00
3 ; 作者:http://www.mcuprog.com
4 ; 05-02-01
5 ;***********************************************************
6 ;***********************************************************
00A2 7 E BIT P2.2 ;LCD口线的定义
00A1 8 RW BIT P2.1
00A0 9 RS BIT P2.0
0080 10 LCDPORT EQU P0
002E 11 CMD_BYTE EQU 2EH
002F 12 DAT_BYTE EQU 2FH
13
0000 14 KEYBIT BIT 00H ;有按键按下标志
15
0030 16 DPBL EQU 30H ;当前显示的变量(20到200间)
0031 17 LEDBAI EQU 31H ;显示的百
0032 18 LEDSHI EQU 32H ;显示的十
0033 19 LEDGE EQU 33H ;显示的个
0034 20 LEDSM EQU 34H ;现在扫到第几个LED
0035 21 KEYTIME EQU 35H ;20MS扫一次按键
0000 22 ORG 0000H
0000 0130 23 AJMP MAIN
000B 24 ORG 000BH
000B 2100 25 AJMP TIME0_1
26 ;以下为主程序的开始
0030 27 ORG 0030H
0030 28 MAIN:
0030 752000 29 MOV 20H,#00H
0033 12016C 30 LCALL INITLCD
0036 753014 31 MOV DPBL,#20
0039 753504 32 MOV KEYTIME,#04H
003C 752E80 33 MOV CMD_BYTE,#80H
003F 120148 34 LCALL WRITE_CMD
0042 120197 35 LCALL DELAY0
0045 752F53 36 MOV DAT_BYTE,#"S"
0048 12015A 37 LCALL WRITE_DAT
004B 752F55 38 MOV DAT_BYTE,#"U"
004E 12015A 39 LCALL WRITE_DAT
0051 752F4D 40 MOV DAT_BYTE,#"M"
0054 12015A 41 LCALL WRITE_DAT
0057 752F3A 42 MOV DAT_BYTE,#":"
005A 12015A 43 LCALL WRITE_DAT
005D 758CEE 44 MOV TH0,#0EEH ;16位的定时器,定时5MS
0060 758A00 45 MOV TL0,#00H
0063 758901 46 MOV TMOD,#01H
0066 D28C 47 SETB TR0
0068 75A882 48 MOV IE,#82H ;定时器0中断
006B 80FE 49 SJMP $
50
51
52
0100 53 ORG 0100H
0100 758CEE 54 TIME0_1: MOV TH0,#0EEH
0103 758A00 55 MOV TL0,#00H
0106 D5350F 56 DJNZ KEYTIME,TIME0_RE
0109 753504 57 MOV KEYTIME,#04H ;每20MS进行一次按键扫描
010C 7590FF 58 MOV P1,#0FFH
A51 MACRO ASSEMBLER ADDSUB 09/13/2007 01:58:08 PAGE 2
010F 120119 59 LCALL KEYSCAN
0112 1201BC 60 LCALL JSDPBL
0115 12019D 61 LCALL DISPDPBL
0118 32 62 TIME0_RE: RETI
63
64 ;按键扫描
0119 00 65 KEYSCAN: NOP
011A 209011 66 NEXT_UP: JB P1.0,NEXT_DN ;+键
011D 200024 67 JB KEYBIT,SCAN_RE
0120 D200 68 SETB KEYBIT
0122 0530 69 INC DPBL
0124 E530 70 MOV A,DPBL
0126 B4C91B 71 CJNE A,#201,SCAN_RE ;大于200反回20
0129 753014 72 MOV DPBL,#20
012C 2144 73 AJMP SCAN_RE
012E 209111 74 NEXT_DN: JB P1.1,NEXT_NC ;-键
0131 200010 75 JB KEYBIT,SCAN_RE
0134 D200 76 SETB KEYBIT
0136 1530 77 DEC DPBL
0138 E530 78 MOV A,DPBL
013A B41307 79 CJNE A,#19,SCAN_RE ;小于20反回200
013D 7530C8 80 MOV DPBL,#200
0140 2144 81 AJMP SCAN_RE
0142 C200 82 NEXT_NC: CLR KEYBIT ;清标志用于等待下一次按键
0144 7590FF 83 SCAN_RE: MOV P1,#0FFH
0147 22 84 RET
85
86 ;LCD1602要用到的一些子程序
87 ;写命令(入口参数CMD_BYTE)
0148 C2A0 88 WRITE_CMD: CLR RS
014A C2A1 89 CLR RW
014C E52E 90 MOV A,CMD_BYTE
014E F580 91 MOV LCDPORT,A
0150 D2A2 92 SETB E
0152 00 93 NOP
0153 00 94 NOP
0154 C2A2 95 CLR E
0156 120197 96 LCALL DELAY0
0159 22 97 RET
98
99 ;写显示数据(入口参数DAT_BYTE)
015A D2A0 100 WRITE_DAT: SETB RS
015C C2A1 101 CLR RW
015E E52F 102 MOV A,DAT_BYTE
0160 F580 103 MOV LCDPORT,A
0162 D2A2 104 SETB E
0164 00 105 NOP
0165 00 106 NOP
0166 C2A2 107 CLR E
0168 120197 108 LCALL DELAY0
016B 22 109 RET
110
111 ;LCD显示初始化
016C 752E30 112 INITLCD: MOV CMD_BYTE,#30H
016F 120148 113 LCALL WRITE_CMD
0172 752E30 114 MOV CMD_BYTE,#30H
0175 120148 115 LCALL WRITE_CMD
0178 752E30 116 MOV CMD_BYTE,#30H
017B 120148 117 LCALL WRITE_CMD
017E 752E38 118 MOV CMD_BYTE,#38H ;设定工作方式
0181 120148 119 LCALL WRITE_CMD
0184 752E0C 120 MOV CMD_BYTE,#0CH ;显示状态设置
0187 120148 121 LCALL WRITE_CMD
018A 752E01 122 MOV CMD_BYTE,#01H ;清屏
018D 120148 123 LCALL WRITE_CMD
0190 752E06 124 MOV CMD_BYTE,#06H ;输入方式设置
A51 MACRO ASSEMBLER ADDSUB 09/13/2007 01:58:08 PAGE 3
0193 120148 125 LCALL WRITE_CMD
0196 22 126 RET
127 ;延时子程序
0197 7DA0 128 DELAY0: MOV R5,#0A0H
0199 00 129 DELAY1: NOP
019A DDFD 130 DJNZ R5,DELAY1
019C 22 131 RET
132
133 ;显示变量
019D 752E85 134 DISPDPBL: MOV CMD_BYTE,#85H
01A0 120148 135 LCALL WRITE_CMD
01A3 85312F 136 MOV DAT_BYTE,LEDBAI
01A6 12015A 137 LCALL WRITE_DAT
01A9 752F2E 138 MOV DAT_BYTE,#"."
01AC 12015A 139 LCALL WRITE_DAT
01AF 85322F 140 MOV DAT_BYTE,LEDSHI
01B2 12015A 141 LCALL WRITE_DAT
01B5 85332F 142 MOV DAT_BYTE,LEDGE
01B8 12015A 143 LCALL WRITE_DAT
01BB 22 144 RET
145
146 ;计算显示的值
01BC E530 147 JSDPBL: MOV A,DPBL
01BE 75F064 148 MOV B,#64H
01C1 84 149 DIV AB
01C2 4430 150 ORL A,#30H
01C4 F531 151 MOV LEDBAI,A
01C6 E5F0 152 MOV A,B
01C8 75F00A 153 MOV B,#0AH
01CB 84 154 DIV AB
01CC 4430 155 ORL A,#30H
01CE F532 156 MOV LEDSHI,A
01D0 E5F0 157 MOV A,B
01D2 4430 158 ORL A,#30H
01D4 F533 159 MOV LEDGE,A
01D6 22 160 RET
161 END
A51 MACRO ASSEMBLER ADDSUB 09/13/2007 01:58:08 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
B. . . . . . . . . D ADDR 00F0H A
CMD_BYTE . . . . . N NUMB 002EH A
DAT_BYTE . . . . . N NUMB 002FH A
DELAY0 . . . . . . C ADDR 0197H A
DELAY1 . . . . . . C ADDR 0199H A
DISPDPBL . . . . . C ADDR 019DH A
DPBL . . . . . . . N NUMB 0030H A
E. . . . . . . . . B ADDR 00A0H.2 A
IE . . . . . . . . D ADDR 00A8H A
INITLCD. . . . . . C ADDR 016CH A
JSDPBL . . . . . . C ADDR 01BCH A
KEYBIT . . . . . . B ADDR 0020H.0 A
KEYSCAN. . . . . . C ADDR 0119H A
KEYTIME. . . . . . N NUMB 0035H A
LCDPORT. . . . . . D ADDR 0080H A
LEDBAI . . . . . . N NUMB 0031H A
LEDGE. . . . . . . N NUMB 0033H A
LEDSHI . . . . . . N NUMB 0032H A
LEDSM. . . . . . . N NUMB 0034H A
MAIN . . . . . . . C ADDR 0030H A
NEXT_DN. . . . . . C ADDR 012EH A
NEXT_NC. . . . . . C ADDR 0142H A
NEXT_UP. . . . . . C ADDR 011AH A
P0 . . . . . . . . D ADDR 0080H A
P1 . . . . . . . . D ADDR 0090H A
P2 . . . . . . . . D ADDR 00A0H A
RS . . . . . . . . B ADDR 00A0H.0 A
RW . . . . . . . . B ADDR 00A0H.1 A
SCAN_RE. . . . . . C ADDR 0144H A
TH0. . . . . . . . D ADDR 008CH A
TIME0_1. . . . . . C ADDR 0100H A
TIME0_RE . . . . . C ADDR 0118H A
TL0. . . . . . . . D ADDR 008AH A
TMOD . . . . . . . D ADDR 0089H A
TR0. . . . . . . . B ADDR 0088H.4 A
WRITE_CMD. . . . . C ADDR 0148H A
WRITE_DAT. . . . . C ADDR 015AH A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?