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

📄 file7.lst

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





    1:				;    这是  读取键盘的子程序
    2:				;    主要内容为:如何定义位,如何得到按键状态,防止键盘干扰的方法
    3:				;    以及如何处理读入的键值
    4:				;    思路:首先在某一引脚输出一个电平,然后读入引脚的电平,如果刚好相反
    5:				;    那么可能有按键发生,但是不排除干扰,为了防止干扰,需要软件延时20ms
    6:				;    消除干扰,然后,等待用户释放,否则,可能重复的到某种结果,发生意外情况
    7:				;现象;我们按不同的按键,会用数码管在不同的位置显示不同的结果1/2/3来
    8:
    9:
   10:		B	 B7	    beep   bit  p3.7          ;  蜂鸣器定义
   11:
   12:		D      0080		segdata equ p0      ;数据 输出
   13:		B      00A7		sege    equ p2.7    ;显示 选中
   14:		B      00A6		segb    equ p2.6    ;位 选
   15:		B      00A5		segd    equ p2.5    ;段 选
   16:
   17:		B	 B3		key1   bit   p3.3         ;  按键引脚定义
   18:		B	 B4		key2   bit   p3.4         ;
   19:		B	 B5		key3   bit   p3.5         ;
   20:		N      0046		key    equ   46h          ;  按键寄存单元
   21:
   22:
   23:		N      0000		org 00h
   24:	  0000	02 00 30		jmp main
   25:
   26:		N      0030		org 030h
   27:
   28:	  0030	75 81 30	   main:mov sp,#30h           ;首先定义
   29:	  0033	12 00 3E	        lcall REST            ;初始化子程序
   30:	  0036	12 00 A7	     lp:lcall pro_key         ;调用键盘查询子程序
   31:	  0039	12 00 52	        lcall KEYPR           ;用来显示所查询到的键值
   32:	  003C	80 F8		       jmp lp                 ;反复调用,不断查询
   33:
   34:	  003E			   REST:
   35:	  003E	74 00				mov a,#00h
   36:	  0040	75 F0 00			mov b,#00h
   37:	  0043	75 80 00			mov p0,#0
   38:	  0046	85 FF 90			mov p1,0ffh
   39:	  0049	75 46 00	        mov key,#00h
   40:	  004C	75 A0 FF		    mov p2,#255
   41:	  004F	C2 B7		        clr beep
   42:	  0051	22		      RET
   43:
   44:	  0052	E5 46		  KEYPR: mov a,key                           ;键值在累加器KEY中
   45:	  0054	60 50		         jz  PROEND                          ;如果 A= 0,表示没有按键,返回
   46:	  0056	B4 01 1A	         cjne a,#1,k1                        ; A= 1 ,用户按了第一个键
   47:	  0059	74 01		         mov a,#1                            ;处理 A = 1的情况
   48:	  005B	90 00 EB	         mov dptr,#tab_nu                    ;查表
   49:	  005E	93		         movc a,@a+dptr
   50:
   51:	  005F	C2 A7		         clr sege                            ;选中显示
   52:	  0061	F5 80		         mov segdata,a                       ;显示 "1"
   53:	  0063	D2 A5		         setb segd
   54:	  0065	00		         nop
   55:	  0066	C2 A5		         clr segd
   56:

PAGE 2



   57:	  0068	75 80 01	         mov segdata,#1                      ;显示 "1"
   58:	  006B	D2 A6		         setb segb
   59:	  006D	00		         nop
   60:	  006E	C2 A6		         clr segb
   61:
   62:	  0070	02 00 A6	         jmp  PROEND                         ;处理完成,子程序返回
   63:				                                             ;以下分别处理 KEY = 2,3 的情况
   64:	  0073	B4 02 18	     k1: cjne a,#2,k2
   65:	  0076	74 02		         mov a,#2
   66:	  0078	90 00 EB	         mov dptr,#tab_nu
   67:	  007B	93		         movc a,@a+dptr
   68:	  007C	F5 80		         mov segdata,a                      ;显示 "2"
   69:	  007E	D2 A5		         setb segd
   70:	  0080	00		         nop
   71:	  0081	C2 A5		         clr segd
   72:
   73:	  0083	75 80 02	         mov segdata,#2                      ;显示 "2"
   74:	  0086	D2 A6		         setb segb
   75:	  0088	00		         nop
   76:	  0089	C2 A6		         clr segb
   77:
   78:	  008B	02 00 A6	         jmp PROEND
   79:	  008E	B4 03 15	     k2: cjne a,#3, PROEND
   80:	  0091	74 03		         mov a,#3
   81:	  0093	90 00 EB	         mov dptr,#tab_nu
   82:	  0096	93		         movc a,@a+dptr
   83:	  0097	F5 80		         mov segdata,a                      ;显示 "3"
   84:	  0099	D2 A5		         setb segd
   85:	  009B	00		         nop
   86:	  009C	C2 A5		         clr segd
   87:
   88:	  009E	75 80 04	         mov segdata,#4                      ;显示 "3"
   89:	  00A1	D2 A6		         setb segb
   90:	  00A3	00		         nop
   91:	  00A4	C2 A6		         clr segb
   92:	  00A6	22		  PROEND:ret
   93:
   94:	  00A7			pro_key:                 ;键盘查询子程序
   95:	  00A7	D2 B3			setb key1            ;首先输出高电平,检测低电平的到来
   96:	  00A9	D2 B4			setb key2            ;不同电路,可能检测方式不一样
   97:	  00AB	D2 B5			setb key3
   98:	  00AD	20 B3 08		jb key1,ke1          ;如果用户没有按第一个键,到第下个处理部分,
   99:	  00B0	75 46 01		mov key,#1           ;表示用户按了第一个键
  100:	  00B3	12 00 CF		lcall delay20ms      ;软件延时,防止干扰
  101:	  00B6	80 EF			jmp pro_key          ;重新查询,直到用户释放按键
  102:	  00B8	20 B4 08	ke1:jb key2,ke2          ;处理第二个按键,如果没有到下一个处理部分
  103:	  00BB	75 46 02	    mov key,#2           ;以下和第一个处理单元相似。
  104:	  00BE	12 00 CF		lcall delay20ms
  105:	  00C1	80 E4			jmp pro_key
  106:	  00C3	20 B5 08	ke2:jb key3,ke3
  107:	  00C6	75 46 03	    mov key,#3
  108:	  00C9	12 00 CF		lcall delay20ms
  109:	  00CC	80 D9			jmp pro_key
  110:	  00CE	22		ke3:ret
  111:				;************  定时20 ms  *************
  112:	  00CF			delay20ms:
  113:	  00CF	C0 D0		        push psw              ; 保存原来的寄存器单元
  114:	  00D1	C2 D3		        clr psw.3             ; 设置新的寄存器

PAGE 3



  115:	  00D3	C2 D4			    clr psw.4             ;
  116:	  00D5	78 02			    mov r0,#2             ; 延时参数1
  117:	  00D7	79 FA				mov r1,#250           ; 延时参数2
  118:	  00D9	7A 01				mov r2,#1             ; 延时参数3
  119:	  00DB	D8 FE		    dl1:djnz r0,dl1           ; 延时循环1
  120:	  00DD	78 FA		    	mov r0,#250           ; 重新设置循环数据
  121:	  00DF	D9 FA		    dl2:djnz r1,dl1           ; 开始第二道循环
  122:	  00E1	78 F0		        mov r0,#240           ;
  123:	  00E3	79 F8		        mov r1,#248           ;
  124:	  00E5	DA F4		    dl3:djnz r2,dl1           ; 第三道循环
  125:	  00E7	00				nop                   ;  修正定时精度
  126:	  00E8	D0 D0				pop psw               ;  恢复原来的寄存器组
  127:	  00EA	22		        ret                   ;  返回
  128:				;***********  end  *******************
  129:
  130:				;这是数字显示表格,其中 带小数点的数字比不带小数点的数字大16
  131:				;比如 0 的显示代码为 0;那么 0.的显示代码为 16;如此类推
  132:
  133:	  00EB			tab_nu:
  134:	  00EB	C0 F9 A4 B0	       db 0c0h,  0f9h, 0a4h, 0b0h,   99h ,  92h ,  82h, 0f8h ; 数字0-7 不带小数点代码
	  00EF	99 92 82 F8
  135:	  00F3	80 90 88 83	       db 80h ,  90h,  88h ,  83h ,  0c6h,  0a1h,  86h, 8eh  ; 数字8-f   不带小数点代码
	  00F7	C6 A1 86 8E
  136:	  00FB	40 79 24 30	       db 40h ,  79h,  24h ,  30h ,  19h ,  12h ,  02h, 78h  ; 数字0-7  带小数点代码
	  00FF	19 12 02 78
  137:	  0103	00 10 08 03	       db 00h ,  10h,  08h ,  03h ,  46h ,  21h ,  06h, 0eh  ; 数字8-f   带小数点代码
	  0107	46 21 06 0E
  138:
  139:				      end    ;告诉编译器本程序到此结束,一定需要加上,否则编译通不过。
  140:





                     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	  10
CY				  BIT	      D7
DELAY20MS			  CODE	    00CF	 112
DL1				  CODE	    00DB	 119
DL2				  CODE	    00DF	 121
DL3				  CODE	    00E5	 124
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
K1				  CODE	    0073	  64
K2				  CODE	    008E	  79
KE1				  CODE	    00B8	 102
KE2				  CODE	    00C3	 106
KE3				  CODE	    00CE	 110
KEY				  NUMBER    0046	  20
KEY1				  BIT	      B3	  17
KEY2				  BIT	      B4	  18
KEY3				  BIT	      B5	  19
KEYPR				  CODE	    0052	  44
LP				  CODE	    0036	  30
MAIN				  CODE	    0030	  28
OV				  BIT	      D2
P				  BIT	      D0
P0				  DATA	      80
P1				  DATA	      90
P2				  DATA	      A0
P3				  DATA	      B0
PCON				  DATA	      87
PROEND				  CODE	    00A6	  92
PRO_KEY				  CODE	    00A7	  94
PS				  BIT	      BC

PAGE 5



SYMBOL				  TYPE     VALUE	LINE
------------------------------------------------------------
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	    003E	  34
RI				  BIT	      98
RS0				  BIT	      D3
RS1				  BIT	      D4
RXD				  BIT	      B0
SBUF				  DATA	      99
SCON				  DATA	      98
SEGB				  NUMBER    00A6	  14
SEGD				  NUMBER    00A5	  15
SEGDATA				  NUMBER    0080	  12
SEGE				  NUMBER    00A7	  13
SINT				  CODE	    0023
SM0				  BIT	      9F
SM1				  BIT	      9E
SM2				  BIT	      9D
SP				  DATA	      81
T0				  BIT	      B4
T1				  BIT	      B5
TAB_NU				  CODE	    00EB	 133
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 + -