3.1.1 硬件電路
硬件電路如圖3.1所示。AT89S51是MCS-51系列單片機中的一種,通常采用40腳DIP封裝, 1腳~8腳是4個并行輸入/輸出端口(P0口、P1口、P2口、P3口)中的一個,稱為P1口,8條口線用P1。0~P1。7表示,這8個引腳均可帶最大20mA灌電流負載,可以直接驅(qū)動發(fā)光二極管,圖示電路中D0~D7為8只LED,各經(jīng)300Ω電阻限流后接在+5V電源與P1端口之間。圖示電路中18、19腳所接晶振和電容與單片機內(nèi)部電路組成振蕩器,為單片機提供工作時鐘。9腳所接RC電路構(gòu)成單片機上電復位電路,單片機只有經(jīng)過復位才能開始執(zhí)行程序。

圖3.1 AT89S51單片機P1口外接8只LED發(fā)光二極管
工作原理
當P1。0~P1。7中的某端口為低電平時,對應的發(fā)光二極管亮,為高電平滅。我們只要控制P1口各位的電平狀態(tài),就可以控制8只LED的亮與滅。例如使(P1)=01010101B=55H, D7、D5、D3、D14只LED亮,D6、D4、D2、D04只LED滅,從效果上看亮與滅是相間隔的;反之,使(P1)=10101010B=AAH,則另外4只LED亮,若反復以一定時間間隔不斷從P1口輪流輸出55H和AAH,則P1口上8只LED會呈現(xiàn)流水彩燈的效果。
3.1.2 控制程序
實現(xiàn)上述8只LED發(fā)光二極管控制的程序非常簡單,可以用不同的指令來編程。以下是幾種模式彩燈的控制程序。
1. 將立即數(shù)送P1口的程序
ORG 0000H ; 定義程序從程序存貯器0000H單元開始存放
LOOP: MOV P1,#55H ; 立即數(shù)55H送P1口,4只LED亮
SJMP LOOP ; 原地踏步
END ; 程序結(jié)束
第一條指令指明程序在程序存貯中的存貯位置,第二條指令將立即數(shù)55H傳送到P1口,對應的LED燈亮,第三條指令是一條無條件轉(zhuǎn)移指令,即單片機執(zhí)行完上一條指令后,會不斷反復指行這條指令,直到電源斷電,第四條是程序結(jié)束指令(本例程序演示效果參見隨書光盤)。
2. 通過累加器A控制P1口的程序
ORG 0000H
LOOP: MOV A,#0AAH ;將立即數(shù)AAH送累加器A
MOV P1, A ;累加器A中的數(shù)送P1端口
SJMP LOOP ;轉(zhuǎn)移到LOOP
END
3. 流水式彩燈程序
最簡單的流水式彩燈程序也是簡單的,程序流程圖如圖3.2所示,程序如下。

圖3.2 最簡單的流水式彩燈程序流程圖
ORG 0000H
LOOP: MOV P1,#55H ;將立即數(shù)55H送P1端口
LCALL TIME ;調(diào)延時子程序TIME
MOV P1,#0AAH ;將立即數(shù)AAH送P1端口
LCALL TIME ;調(diào)延時子程序TIME
SJMP LOOP ;轉(zhuǎn)移到LOOP
TIME: MOV R6,#200 ;延時子程序TIME
TIME1:MOV R7,#200
TIME2:NOP
NOP
NOP
DJNZ R7,TIME2
DJNZ R6,TIME1
RET
END
4. 開幕式與閉幕式彩燈程序
ORG 0000H
LJMP MAIN ;跳轉(zhuǎn)到主程序
ORG 0030H
MAIN: MOV R0,#8 ;R0送循環(huán)次數(shù)8
MOV DPTR,#TAB ;給數(shù)據(jù)指針賦值
LOOP: MOV A,#00H ;
MOVC A,@ A + DPTR
MOV P1,A
LCALL TIME
INC DPL
DJNZ R0,LOOP
SJMP MAIN
TIME: MOV R6,#200
TIME1: MOV R7,#200
TIME2: NOP
NOP
NOP
DJNZ R7,TIME2
DJNZ R6,TIME1
RET
TAB: DB 81H,0C3H,0E7H,0FFH,18H,3CH,7EH,0FFH
END
3.1.3 源程序的編輯、編譯、下載
打開“偉福”模擬仿真軟件進行程序的編輯、編譯。
打開“ISP下載軟件”將目標文件下載到ISP-4實驗開發(fā)板上的AT89S51單片機芯片,觀察程序運行結(jié)果。
