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 + -
显示快捷键?