adddec.lst
来自「01单片机网站51单片机开发板全部配套程序」· LST 代码 · 共 178 行
LST
178 行
A51 MACRO ASSEMBLER ADDDEC 11/05/03 22:24:07 PAGE 1
DOS MACRO ASSEMBLER A51 X4.86
OBJECT MODULE PLACED IN ADDDEC.OBJ
ASSEMBLER INVOKED BY: C:\C51EVAL\BIN\A51.EXE ADDDEC.A51 DB EP
LOC OBJ LINE SOURCE
1 ;程序名: MCS51实验板配套程序-按键控制+1-1程序,最大255
2 ;电路介绍:显示由一片74164驱动4位共阴数码管
3 ; DsDat-p1.4;DsClk-p1.5;Gw-p1.0;Sw-p1.1;Bw-p1.2;Qw-p1.3
4 ;www.01mcu.net www.01mcu.com 2003/5/11编写
5 ;********************************************************************
0094 6 xsdat bit p1.4 ;定义驱动74164的数据脚为p1.4
0095 7 xsclk bit p1.5 ;74164的时钟
0090 8 gw bit p1.0 ;个位显示控制脚
0091 9 sw bit p1.1 ;十位
0092 10 bw bit p1.2 ;百位
0093 11 qw bit p1.3 ;千位
00B2 12 Sadd bit p3.2 ;+key
00B3 13 sdec bit p3.3 ;-key
0030 14 sjgw equ 30h ;显示数据存储器
0031 15 sjsw equ 31h
0032 16 sjbw equ 32h
0033 17 sjqw equ 33h
0035 18 temp equ 35h ;当前数据
19 ;--------------------------------
0000 758140 20 mov sp,#40h
0003 753500 21 mov temp,#0
0006 D2B2 22 main : setb sadd
0008 20B203 23 jb sadd,n1
000B 12001D 24 lcall addkey ;+键按下
000E 120053 25 n1: lcall display ;调用显示子程序
0011 20B303 26 jb sdec,n2
0014 12002E 27 lcall deckey ;-键按下
0017 120053 28 n2: lcall display
001A 020006 29 ljmp main ;循环显示
30
31 ;--------------------------------
001D 7805 32 addkey: mov r0,#5 ;消键抖
001F D2B2 33 addloop: setb sadd
0021 120053 34 lcall display
0024 30B2F8 35 jnb sadd,addloop ;键一直=0,循环等待抬起
0027 D8F6 36 djnz r0,addloop
0029 0535 37 inc temp ;当前数据+1
002B 113F 38 acall t2_10 ;十进制转换
002D 22 39 ret
40 ;---------------------------------
002E 7805 41 deckey: mov r0,#5 ;消键抖
0030 D2B3 42 decloop: setb sdec
0032 120053 43 lcall display
0035 30B3F8 44 jnb sdec,decloop ;键一直=0,循环等待抬起
0038 D8F6 45 djnz r0,decloop
003A 1535 46 dec temp ;当前数据-1
003C 113F 47 acall t2_10 ;十进制转换
003E 22 48 ret
49 ;转换成两位十进制
003F 75F064 50 t2_10: mov b,#100
0042 E535 51 mov a,temp
0044 84 52 div ab
0045 F532 53 mov sjbw,a ;提取百位
0047 E5F0 54 mov a,b
0049 75F00A 55 mov b,#10
004C 84 56 div ab
004D F531 57 mov sjsw,a ;提取十位
004F 85F030 58 mov sjgw,b ;个位
A51 MACRO ASSEMBLER ADDDEC 11/05/03 22:24:07 PAGE 2
0052 22 59 ret
60 ;************************************************************************
61 ;74164显示程序,使用RS1=1,RS0=0的1区
62 ;---------------------------------------------------------
0053 C0E0 63 display: PUSH ACC ;保存ACC
0055 C0D0 64 push psw
0057 C2D4 65 clr rs1
0059 D2D3 66 setb rs0 ;使用第一区工作寄存器
005B 9000A4 67 mov dptr,#xstab
005E E530 68 mov a,sjgw ;取得数据
0060 93 69 movc a,@a+dptr ;提取字模
0061 118F 70 acall dsout ;调用送出子程序
0063 C290 71 clr gw
0065 119B 72 acall ds1ms ;调用显示1ms延时程序
0067 D290 73 setb gw
0069 E531 74 mov a,sjsw
006B 93 75 movc a,@a+dptr ;提取字模
006C 118F 76 acall dsout ;送出
006E C291 77 clr sw
0070 119B 78 acall ds1ms ;显示1ms
0072 D291 79 setb sw
0074 E532 80 mov a,sjbw
0076 93 81 movc a,@a+dptr ;提取字模
0077 118F 82 acall dsout ;送出
0079 C292 83 clr bw
007B 119B 84 acall ds1ms ;显示1ms
007D D292 85 setb bw
007F E533 86 mov a,sjqw
0081 93 87 movc a,@a+dptr ;提取字模
0082 118F 88 acall dsout ;送出
0084 C293 89 clr qw
0086 119B 90 acall ds1ms ;显示1ms
0088 D293 91 setb qw
008A D0D0 92 pop psw
008C D0E0 93 POP ACC ;出栈
008E 22 94 ret ;返回调用
95 ;---送出循环----------
008F 96 dsout:
008F 7808 97 MOV R0,#8 ;传送一个字节8位
0091 33 98 dSLOOP: RLC A ;右移
0092 9294 99 MOV xsdat,C ;送数据到数据口
0094 D295 100 SETB xsclk ;送一时钟
0096 C295 101 CLR xsclk
0098 D8F7 102 DJNZ R0,dSLOOP
009A 22 103 RET
104 ;---显示延时----------
009B 790A 105 ds1ms: mov r1,#10
009D 7A64 106 ds1lo: mov r2,#100
009F DAFE 107 djnz r2,$
00A1 D9FA 108 djnz r1,ds1lo
00A3 22 109 ret ;延时返回
110 ;************************************************************************
111 ;显示字表(共阴)
00A4 112 xstab: DB 3FH,06H,5BH,4FH ;"0","1","2","3"
00A8 113 DB 66H,6DH,7DH,07H ;"4","5","6","7"
00AC 114 DB 7FH,6FH,77H,7cH ;"8","9","A","B"
00B0 115 DB 39H,5eh,79h,71h ;"C","D","E","F"
116
117 end
A51 MACRO ASSEMBLER ADDDEC 11/05/03 22:24:07 PAGE 3
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
ADDKEY . . . . . . C ADDR 001DH A
ADDLOOP. . . . . . C ADDR 001FH A
B. . . . . . . . . D ADDR 00F0H A
BW . . . . . . . . B ADDR 0090H.2 A
DECKEY . . . . . . C ADDR 002EH A
DECLOOP. . . . . . C ADDR 0030H A
DISPLAY. . . . . . C ADDR 0053H A
DS1LO. . . . . . . C ADDR 009DH A
DS1MS. . . . . . . C ADDR 009BH A
DSLOOP . . . . . . C ADDR 0091H A
DSOUT. . . . . . . C ADDR 008FH A
GW . . . . . . . . B ADDR 0090H.0 A
MAIN . . . . . . . C ADDR 0006H A
N1 . . . . . . . . C ADDR 000EH A
N2 . . . . . . . . C ADDR 0017H A
P1 . . . . . . . . D ADDR 0090H A
P3 . . . . . . . . D ADDR 00B0H A
PSW. . . . . . . . D ADDR 00D0H A
QW . . . . . . . . B ADDR 0090H.3 A
RS0. . . . . . . . B ADDR 00D0H.3 A
RS1. . . . . . . . B ADDR 00D0H.4 A
SADD . . . . . . . B ADDR 00B0H.2 A
SDEC . . . . . . . B ADDR 00B0H.3 A
SJBW . . . . . . . N NUMB 0032H A
SJGW . . . . . . . N NUMB 0030H A
SJQW . . . . . . . N NUMB 0033H A
SJSW . . . . . . . N NUMB 0031H A
SP . . . . . . . . D ADDR 0081H A
SW . . . . . . . . B ADDR 0090H.1 A
T2_10. . . . . . . C ADDR 003FH A
TEMP . . . . . . . N NUMB 0035H A
XSCLK. . . . . . . B ADDR 0090H.5 A
XSDAT. . . . . . . B ADDR 0090H.4 A
XSTAB. . . . . . . C ADDR 00A4H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?