INC A

LCALL DELAY

CJNE A,#10,LOOP

MOV A,#0

AJMP LOOP ;在此中间能按排任意程序,这里仅作示范。

;主程序到此结束

DISP: ;定时器T0的中断响应程序

PUSH ACC ;ACC入栈

PUSH PSW ;PSW入栈

MOV TH0,#HIGH(65536-2000) ;定时时间为2000个周期,约 2170 微秒( 11.0592M )

MOV TL0,#LOW(65536-2000)

SETB FIRST

SETB SECOND ;关显示

MOV A,#DISPBUFF ;显示缓冲区首地址

ADD A,Counter

MOV R0,A

MOV A,@R0 ;根据计数器的值取对应的显示缓冲区的值

MOV DPTR,#DISPTAB ;字形表首地址

MOVC A,@A+DPTR ;取字形码

MOV P0,A ;将字形码送P0位(段口)

MOV A,Counter ;取计数器的值

JZ DISPFIRST ;如果是0则显示第一位

CLR SECOND ;不然显示第二位

AJMP DISPNEXT

DISPFIRST:

CLR FIRST ;显示第一位

DISPNEXT:

INC Counter ;计数器加1

MOV A,Counter

DEC A ;如果计数器计到2,则让它回0

DEC A

JZ RSTCOUNT

AJMP DISPEXIT

RSTCOUNT:

MOV Counter,#0 ;计数器的值只能是0或1

DISPEXIT:

POP PSW

POP ACC

RETI

DELAY: ;延时130毫秒

PUSH PSW

SETB RS0

MOV R7,#255

D1: MOV R6,#255

D2: NOP

NOP

NOP

NOP

DJNZ R6,D2

DJNZ R7,D1

POP PSW

RET

DISPTAB:DB 28H,7EH,0a4H,64H,72H,61H,21H,7CH,20H,60H

END

从上面的单片机程序能看出,动态显示和静态显示相比,程序稍有点复杂,不过,这是值得的。这个程序有一定的通用性,只要改变端口的值及计数器的值就能显示更多位数了。

关于接口,总线,驱动就介绍完了,您有什么想法可以联系小编。