一、静态显示方式
1、连接
所有LED的位选均共同连接到+VCC或GND,每个LED的8根段选线分别连接一个8位并行I/O口,从该I/O口送出相应的字型码显示字型。
2、这种连接方式的缺点就是需要的数据线太多:我们可以计算一下:8*4+1=33根,然而在现实中是不可能实现的
二、动态显示方式
1、连接
所有LED的段选线共同连接在一起共用一个 8位I/O口,而每个LED的位选分别由一根相应的I/O口线控制。因此必须采用动态扫描显示方式,每一个时刻只选通其中一个LED,同时在段选口送出该位LED的字型码。
2、同样我们来看看这个需要多少的数据线:8+8=16,比前面少了至少一半的数据线,更适合现实使用
3、动态显示的基本原理
电路的接法决定了必须采用逐位扫描显示方式。
即从段选口送出某位LED的字型码,然后选通该位LED, 并保持一段延时时间。然后选通下一位,直到所有位扫 描完。
其实对于我们用户而言,虽然动态的是间断的显示信号,但是因为时间间隔很短,在人眼视觉上就可以认为数码管是一起亮的
Count EQU 30H
SP1 BIT P3.2
ORG 0
START: MOV Count,#00H
NEXT: MOV A, Count
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
WT: JNB SP1,WT;上电不会WT循环,WT循环表示上次按键未释放
WAIT: JB SP1,WAIT ;无键按下或按键释放,WAIT循环
LCALL DELY10MS ;有键按下,延时10ms
JB SP1,WAIT;10ms后按键为释放状态,无效按键,WAIT循环
INC Count;按键按下超过10ms有效按键,count增1
MOV A, Count
CJNE A,#51,NEXT;count!=51转NEXT处理
LJMP START;count=51回到初始状态,count从0计起
DELY10MS: MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
TABLE: DB
0FCH,60H,0DAH,0F2H,066H,0B6H,0BEH,0E0H,0FEH,0F6H
END
上面是没有使用中断方式的,如果使用中断的话。就是:
COUNT EQU 20H
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INTT0
MAIN:
MOV SP,#40H
MOV P0,#00H
MOV P2,#00H
SETB EX0
SETB EA
SETB IT0
MOV COUNT,#0
WAIT:
MOV A,COUNT
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
SJMP WAIT
INTT0:
MOV A,COUNT
INC A
MOV COUNT, A
CJNE A,#51,NEXT
MOV COUNT,#00H
NEXT: RETI
TABLE:
DB 0FCH,60H,0DAH,0F2H,066H,0B6H,0BEH,0E0H,0FEH,0F6H
END