以前总觉得led显示没什么了不起,可当自己真正接触到这一方面时才发现它还是很有技术含量的。尤其是led点阵,对一个工程师的要求太高了,串入并出几乎是唯一选择,可是又得尽量不占用单片机宝贵的uart。对时序的要求就上来了。这还只是一方面,其他的比如双色,灰度,彩色就更难了。
我觉得数码管的显示算是比较简单的,我用两片hc595级联控制8个数码管加8个按键(留待以后补充),一片做段码,一片做位码,先把程序贴出来,硬件待我制作成功再将原理图贴出来。
需要说明的是,这段程序在Proteus上得到了验证
程序如下(没有注释,有时间补充):
SLCK bit p2.2
sDA bit p2.0
sCLK bit p2.1
org 0000h
ljmp main
org 000bh
ljmp display
ORG 0040H
MAIN: mov r0,#32h
MOV R2,#8
mov r3,#8
mov r4,#8
mov r1,#0feh
mov tmod,#01h
mov th0,#0fbh
mov tl0,#1dh
mov ie,#82h
setb tr0
sjmp $
DISPLAY: PUSH ACC
mov th0,#0fbh
mov tl0,#1dh
CLR SLCK
DISP: MOV A,R1
disp0: clr sclk
rlc a
mov sda,c
setb sclk
djnz r2,disp0
mov r2,#8
mov a,r1
RL a
mov r1,a
mov a,@r0
MOV DPTR,#TAB
MOVC A,@A+DPTR
disp10: clr sclk
rlc a
mov sda,c
setb sclk
djnz r3,disp10
setb slck
mov r3,#8
inc r0
djnz r4,out
mov r4,#8
mov r0,#32h
out: POP ACC
reti
tab: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
END