图2
图1就是我们试验板上的拨码开关和四个指示灯,拨码开关拨向左边为高电平(为1),拨码开关拨向右边为低电平(为0),右边指示灯也点亮, 原理图见图2所示。
这个实验实现的功能是: 根据拨码的编码方式进行显示,显示为8421BCD码,例如:将图1中拨码开关2和3拨向右边,则显示6(低电平有效);程序如下:
ORG 1000H
A_BIT EQU 20H
B_BIT EQU 21H
YI EQU 22H
ER EQU 23H
SI EQU 24H
BA EQU 25H
HUO1 EQU 26H
HUO2 EQU 27H
MOV A_BIT,#0
MOV A_BIT,#0
MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
START: LCALL DISP
MOV YI,#0
MOV ER,#0
MOV SI,#0
MOV BA,#0
JB P0.0,STAR1
LCALL DELAY
JB P0.0,STAR1
MOV YI,#1
STAR1: JB P0.1,STAR2
LCALL DELAY
JB P0.1,STAR2
MOV ER,#2
STAR2: JB P0.2,STAR3
LCALL DELAY
JB P0.2,STAR3
MOV SI,#4
STAR3: JB P0.3,STAR4
LCALL DELAY
JB P0.3,STAR4
MOV BA,#8
STAR4: CLR C
MOV A,YI
ADD A,ER
ADD A,SI
ADDC A,BA
MOV A_BIT,A
JNC STAR5
MOV B_BIT,#1
STAR5: MOV B_BIT,#0
LJMP START
DISP: MOV DPTR,#NUMTAB ;指定查表启始地址
MOV A,A_BIT;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P1,A ;送出个位的7段代码
CLR P2.0 ;开个位显示
CALL DELAY;显示1毫秒
SETB P2.0;关闭个位显示
MOV A,B_BIT ;取十位数
MOVC A,@A+DPTR
MOV P1,A
CLR P2.1
ACALL DELAY
SETB P2.1
RET
DELAY: NOP
MOV R4,#2 ;1毫秒延时子程序
D1: MOV R5,#248
DJNZ R5,$
DJNZ R4,D1
RET
NUMTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB 80H,90H,88H,83H,0C7H,0A0H,86H,8EH
END
上一篇:节约端口线及器件的新型键盘程序
下一篇:单片机AT89C系列的解密原理