⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 file3.lst

📁 单片机学习系统附的实验源代码
💻 LST
字号:

PAGE 1





    1:				;这是数码显示程序
    2:				;实验现象:数码管从右边开始,从1(不带小数点)依次循环显示到F.(带小数点),总共32个字符
    3:				;着重介绍的是如何查表,如何制作数码管对应的段码等,以及如何扫描数码管!
    4:				;每个显示以后的延时是前面程序涉及到的,这里只是简单地调用了一下,如果这个调用很短,并且
    5:				;显示的数位刚好8位,会怎么样呢?======那就是动态扫描的概念了,那就不是一个一个的显示
    6:				;表现出来的我们就看到了一串数字76543210,其实还是一个一个地显示,只不过,我们眼睛
    7:				;由于视觉暂留的缘故,看到的是一串罢了!
    8:
    9:
   10:
   11:		B	 B7	        beep   bit  p3.7    ;定义蜂明器
   12:
   13:		D      0080			segdata equ p0      ;数据 输出
   14:		B      00A7			sege    equ p2.7    ;显示 选中
   15:		B      00A6			segb    equ p2.6    ;位 选
   16:		B      00A5			segd    equ p2.5    ;段 选
   17:
   18:		N      0000		org 00h                 ;程序开始
   19:	  0000	02 00 30		jmp main                ;主程序开始处
   20:
   21:		N      0030		org 030h                ;主程序从30H开始
   22:	  0030	75 81 30	 main:mov sp,#30h           ;设置堆栈
   23:	  0033	12 00 3B	      lcall rest            ;调用初始化程序
   24:	  0036	12 00 4C	      lcall pro_8led        ;调用数码管显示程序
   25:	  0039	80 F5		      jmp main              ;返回
   26:
   27:				;********* 初始化程序  **************
   28:
   29:	  003B	74 00		rest:mov a,#00h              ;清寄存器
   30:	  003D	75 F0 00	     mov b,#00h              ;清寄存器
   31:	  0040	75 80 00		 mov p0,#0               ;禁止数码管显示
   32:	  0043	75 A0 FF		 mov p2,#255             ;
   33:	  0046	85 FF 90		 mov p1,0ffh             ;禁止LED显示
   34:	  0049	C2 B7		     clr beep                ;禁止蜂鸣器
   35:	  004B	22		     ret                     ;返回
   36:
   37:				;********  数码管显示程序  ***************
   38:				;显示程序对应的硬件部分请注意查看图纸,由于我们使用的数码管采用的是动态扫描
   39:				;并且,段选和位选是分别使用了缓冲处理,因此,每次送出数据都需要经过两个步骤
   40:				;首先把数据放在数据总线上,然后在相应的段或者位缓冲器输出时钟端给出一个
   41:				;时钟,数据立即送出,从而达到实现了数据段位码的显示
   42:				;以后的动态显示和这里的解释一样,就不做重复解释说明。只要看懂这个程序,
   43:				;在以后的程序中也是一样的
   44:				;在实际设计当中,也可以根据我们这个设计作为参考,采用这种动态扫描的方式
   45:				;一方面可以节约线路板空间,另一方面,软件编程实现简单
   46:
   47:	  004C	C2 A7		pro_8led:clr sege               ;显示选中,如果是clr sege表示选中存储器
   48:	  004E	75 F0 20			mov b,#32                ;一共显示32个数字
   49:	  0051	C2 D3				clr psw.3                ;重新设置寄存器组
   50:	  0053	D2 D4				setb psw.4               ;
   51:
   52:	  0055	78 00				mov r0,#00h              ;数据显示从0开始
   53:	  0057	79 01				mov r1,#01h              ;数码管从第1个开始
   54:	  0059	89 80		   loop:mov segdata,r1           ;送出需要显示数据对应的位
   55:	  005B	D2 A6		        setb segb
   56:	  005D	00		        nop

PAGE 2



   57:	  005E	C2 A6		        clr segb                 ;这个操作就是让数据输出并得到锁存
   58:
   59:	  0060	E8			   	mov a,r0                 ;准备第一个数据
   60:	  0061	90 00 9F			mov dptr,#tab_nu         ;获得表头
   61:	  0064	93				movc a,@a+dptr           ;得到第一个数据
   62:
   63:	  0065	F5 80				mov segdata,a            ;输出到显示数据的段
   64:	  0067	D2 A5				setb segd
   65:	  0069	00				nop
   66:	  006A	C2 A5				clr segd                 ;这个操作就是让数据输出并得到锁存
   67:
   68:	  006C	12 00 83	        lcall delay              ; 500 ms 延时
   69:	  006F	12 00 83	        lcall delay              ; 1   s  延时
   70:	  0072	08		        inc r0                   ;准备下一个数据
   71:	  0073	E9		        mov a,r1                 ;准备下一位数码管
   72:	  0074	33		        rlc a                    ;设置下一个数码管
   73:	  0075	40 05		        jc c1                    ;8位全部显示,转移
   74:	  0077	F9		        mov r1,a                 ;否则,设置下一位
   75:	  0078	D5 F0 DE	        djnz b,loop              ;32个数没有显示完,返回显示
   76:	  007B	22		        ret                      ;否则返回主程序
   77:
   78:	  007C	79 01		c1:     mov r1,#1                  ;8位显示完,重新开始循环
   79:	  007E	C3		        clr c                    ;设置显示位
   80:	  007F	D5 F0 D7	        djnz b,loop              ;32位显示完则返回重新显示
   81:	  0082	22		        ret                      ;否则返回到主程序
   82:				;*************  数码管显示   *******************************
   83:
   84:				;*************  软件延时 500ms  *****************************
   85:	  0083	C0 D0		delay:  push psw              ; 保存原来的寄存器内容
   86:	  0085	C2 D3		        clr psw.3             ;
   87:	  0087	C2 D4				clr psw.4             ; 设置新的寄存器组
   88:	  0089	78 02				mov r0,#2             ; 延时参数1
   89:	  008B	79 FA				mov r1,#250           ; 延时参数2
   90:	  008D	7A 02				mov r2,#2             ; 延时参数3
   91:	  008F	D8 FE		    dl1:djnz r0,dl1           ; 延时循环1
   92:	  0091	78 FA		    	mov r0,#250           ;
   93:	  0093	D9 FA		    dl2:djnz r1,dl1           ; 延时循环2
   94:	  0095	78 F0		        mov r0,#240           ;
   95:	  0097	79 F8		        mov r1,#248           ;
   96:	  0099	DA F4		    dl3:djnz r2,dl1           ; 延时循环3
   97:	  009B	00				nop                   ; 定时精度调整
   98:	  009C	D0 D0				pop psw               ;  恢复原来的寄存器
   99:	  009E	22		        ret                   ;   返回
  100:				;**********************************************************
  101:
  102:				;**********************************************************
  103:				;这是数字显示表格,其中 带小数点的数字比不带小数点的数字大16
  104:				; 比如 0 的显示代码为 0;那么 0.的显示代码为 16;如此类推
  105:
  106:	  009F			tab_nu:
  107:	  009F	C0 F9 A4 B0	             db 0c0h,  0f9h, 0a4h,  0b0h,  99h ,  92h ,  82h, 0f8h ; 数字0-7 不带小数点代码
	  00A3	99 92 82 F8
  108:	  00A7	80 90 88 83	             db 80h ,  90h,  88h ,  83h ,  0c6h,  0a1h,  86h, 8eh  ; 数字8-f   不带小数点代码
	  00AB	C6 A1 86 8E
  109:	  00AF	40 79 24 30	             db 40h ,  79h,  24h ,  30h ,  19h ,  12h ,  02h, 78h  ; 数字0-7  带小数点代码
	  00B3	19 12 02 78
  110:	  00B7	00 10 08 03	             db 00h ,  10h,  08h ,  03h ,  46h ,  21h ,  06h, 0eh  ; 数字8-f   带小数点代码
	  00BB	46 21 06 0E

PAGE 3



  111:
  112:				      end             ;
  113:





                     register banks used:  ---

          0  个错误




PAGE 4





	       L I S T   O F   S Y M B O L S
	       =============================


SYMBOL				  TYPE     VALUE	LINE
------------------------------------------------------------
AC				  BIT	      D6
ACC				  DATA	      E0
B				  DATA	      F0
BEEP				  BIT	      B7	  11
C1				  CODE	    007C	  78
CY				  BIT	      D7
DELAY				  CODE	    0083	  85
DL1				  CODE	    008F	  91
DL2				  CODE	    0093	  93
DL3				  CODE	    0099	  96
DPH				  DATA	      83
DPL				  DATA	      82
EA				  BIT	      AF
ES				  BIT	      AC
ET0				  BIT	      A9
ET1				  BIT	      AB
EX0				  BIT	      A8
EX1				  BIT	      AA
EXTI0				  CODE	    0003
EXTI1				  CODE	    0013
F0				  BIT	      D5
IE				  DATA	      A8
IE0				  BIT	      89
IE1				  BIT	      8B
INT0				  BIT	      B2
INT1				  BIT	      B3
IP				  DATA	      B8
IT0				  BIT	      88
IT1				  BIT	      8A
LOOP				  CODE	    0059	  54
MAIN				  CODE	    0030	  22
OV				  BIT	      D2
P				  BIT	      D0
P0				  DATA	      80
P1				  DATA	      90
P2				  DATA	      A0
P3				  DATA	      B0
PCON				  DATA	      87
PRO_8LED			  CODE	    004C	  47
PS				  BIT	      BC
PSW				  DATA	      D0
PT0				  BIT	      B9
PT1				  BIT	      BB
PX0				  BIT	      B8
PX1				  BIT	      BA
RB8				  BIT	      9A
RD				  BIT	      B7
REN				  BIT	      9C
RESET				  CODE	    0000
REST				  CODE	    003B	  29

PAGE 5



SYMBOL				  TYPE     VALUE	LINE
------------------------------------------------------------
RI				  BIT	      98
RS0				  BIT	      D3
RS1				  BIT	      D4
RXD				  BIT	      B0
SBUF				  DATA	      99
SCON				  DATA	      98
SEGB				  NUMBER    00A6	  15
SEGD				  NUMBER    00A5	  16
SEGDATA				  NUMBER    0080	  13
SEGE				  NUMBER    00A7	  14
SINT				  CODE	    0023
SM0				  BIT	      9F
SM1				  BIT	      9E
SM2				  BIT	      9D
SP				  DATA	      81
T0				  BIT	      B4
T1				  BIT	      B5
TAB_NU				  CODE	    009F	 106
TB8				  BIT	      9B
TCON				  DATA	      88
TF0				  BIT	      8D
TF1				  BIT	      8F
TH0				  DATA	      8C
TH1				  DATA	      8D
TI				  BIT	      99
TIMER0				  CODE	    000B
TIMER1				  CODE	    001B
TL0				  DATA	      8A
TL1				  DATA	      8B
TMOD				  DATA	      89
TR0				  BIT	      8C
TR1				  BIT	      8E
TXD				  BIT	      B1
WR				  BIT	      B6

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -