利用80C31單片機(jī)串行口實(shí)現(xiàn)多個(gè)LED顯示的一種簡(jiǎn)單方法
在單片機(jī)系統(tǒng)中,常常用數(shù)碼管(LED)做顯示器。一般的顯示器為4位或8位,即需要4個(gè)或8個(gè)LED。實(shí)現(xiàn)這種顯示的方法比較多,也比較簡(jiǎn)單。但是,對(duì)于多個(gè)LED顯示,就必須采取必要的措施才能實(shí)現(xiàn)。本文介紹一種設(shè)計(jì)方法,利用該方法設(shè)計(jì)的多路LED顯示系統(tǒng)具有硬件結(jié)構(gòu)簡(jiǎn)單,軟件編程方便,價(jià)格低廉的特點(diǎn),經(jīng)在儲(chǔ)蓄所大屏幕利率顯示屏中應(yīng)用,效果很好。
1 硬件電路
80C31單片機(jī)是MCS-51系列單片機(jī)的一種,它廣泛應(yīng)用于各種小型控制系統(tǒng)中。我們知道,80C31單片機(jī)有一個(gè)串行口可用于串行通訊,筆者發(fā)現(xiàn)它在方式0狀態(tài)下,還可以擴(kuò)展并行I/O口,從而實(shí)現(xiàn)多個(gè)LED顯示,其硬件原理如圖1所示。其中,74HC164為串行輸入、并行輸出移位寄存器,74HC164為單向總線驅(qū)動(dòng)器,LED采用5EF1183KR型共陰極數(shù)碼管。
當(dāng)80C31 單片機(jī)復(fù)位時(shí),串行口為方式0狀態(tài),即工作在移位寄存器方式,波特率為振蕩頻率的十二分之一。參看圖2,器件執(zhí)行任何一條將SBUF作為目的寄存器的命令時(shí),數(shù)據(jù)便開始從RXD端發(fā)送。在寫信號(hào)有效時(shí),相隔一個(gè)機(jī)器周期后發(fā)送控制端SEND有效,即允許RXD發(fā)送數(shù)據(jù),同時(shí),允許從TXD端輸出移位脈沖。第一幀(8位)數(shù)據(jù)發(fā)送完畢時(shí),各控制信號(hào)均恢復(fù)原狀態(tài),只有TI保持高電平,呈中斷申請(qǐng)狀態(tài)。第一個(gè)74HC164把第一幀數(shù)據(jù)并行輸出,LED1顯示該數(shù)據(jù)(發(fā)送時(shí)序如圖2所示)。然后,用軟件將TI清零,發(fā)送第二幀數(shù)據(jù)。第二幀數(shù)據(jù)發(fā)送完畢,LED1顯示第二幀數(shù)據(jù),第一幀數(shù)據(jù)串行輸入給第二個(gè) 74HC164,LED2顯示第一幀數(shù)據(jù)。依此類推,直到把數(shù)據(jù)區(qū)內(nèi)所有數(shù)據(jù)發(fā)送出去。應(yīng)該注意,數(shù)據(jù)全部發(fā)送完后,第一幀數(shù)據(jù)在最后一個(gè)LED顯示。由于TXD端最多可以驅(qū)動(dòng)8個(gè)TTL門,當(dāng)LED顯示器超過8個(gè)時(shí),我們采用74HC244芯片驅(qū)動(dòng)。每個(gè)74HC244有8路驅(qū)動(dòng),每一路可驅(qū)動(dòng)8個(gè) LED,即每增加一個(gè)74HC244,可增加64個(gè)LED驅(qū)動(dòng)。
2 軟件編程
該軟件程序采用MCS-51系列單片機(jī)匯編語言編制,并把顯示程序作為一個(gè)子程序,以便在主程序中調(diào)用。設(shè)LED為共限極顯示器,共有64個(gè),顯示區(qū)首地十在內(nèi)部RAM 20H單元,需顯示的數(shù)據(jù)以BCD碼依次存放在顯示區(qū),軟件清單如下:
[!--empirenews.page--]
主程序
ORG 0000H
SJMP START
ORG 0020H
MOV R6,#40H
MOV R0,#20H
LCALL TRXD
SJMP $
顯示子程序
TRXD:MOV DPTR,#DTAB
DL0:MOV A,@R0
MOVC A,@A+DPTR
MOV SBUF,A
DL1:JNB TI,DL1
CLR TI
INC RO
DJNZ R6,DL0
RET
DTAB:3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH