1 引言
隨著人們生活環(huán)境的不斷改善和美化,在許多場合可以看到彩色霓虹燈。 LED 彩燈由于其豐富的燈光色彩,低廉的造價以及控制簡單等特點而得到了廣泛的應(yīng)用,用彩燈來裝飾已經(jīng)成為一種時尚。但目前市場上各式樣的 LED 彩燈控制器大多數(shù)用全硬件電路實現(xiàn),電路結(jié)構(gòu)復(fù)雜、功能單一,這樣一旦制作成品只能按照固定的模式閃亮,不能根據(jù)不同場合、不同時間段的需要來調(diào)節(jié)亮燈時間、模式、閃爍頻率等動態(tài)參數(shù)。這種彩燈控制器結(jié)構(gòu)往往有芯片過多、電路復(fù)雜、功率損耗大等缺點。此外從功能效果上看,亮燈模式少而且樣式單調(diào),缺乏用戶可操作性,影響亮燈效果。因此有必要對現(xiàn)有的彩燈控制器進行改進。
2 設(shè)計原理
2.1 MCS51
引腳說明
MCS單片機都采用40引腳的雙列直插封裝方式。圖1為引腳排列圖, 40條引腳說明如下:
(1)主電源引腳Vss和Vcc
① Vss接地
② Vcc正常操作時為+5伏電源
(2)外接晶振引腳XTAL1和XTAL2
① XTAL1內(nèi)部振蕩電路反相放大器的輸入端,是外接晶體的一個引腳。當(dāng)采用外部振蕩器時,此引腳接地。
② XTAL2內(nèi)部振蕩電路反相放大器的輸出端。是外接晶體的另一端。當(dāng)采用外部振蕩器時,此引腳接外部振蕩源。
圖1 8051引腳排列圖
(3)控制或與其它電源復(fù)用引腳RST/VPD,ALE/PROG,EA和/Vpp
① RST/VPD 當(dāng)振蕩器運行時,在此引腳上出現(xiàn)兩個機器周期的高電平(由低到高跳變),將使單片機復(fù)位
在Vcc掉電期間,此引腳可接上備用電源,由VPD向內(nèi)部提供備用電源,以保持內(nèi)部RAM中的數(shù)據(jù)。
② ALE/PROG正常操作時為ALE功能(允許地址鎖存)提供把地址的低字節(jié)鎖存到外部鎖存器,ALE 引腳以不變的頻率(振蕩器頻率的1/6)周期性地發(fā)出正脈沖信號。因此,它可用作對外輸出的時鐘,或用于定時目的。但要注意,每當(dāng)訪問外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖,ALE 端可以驅(qū)動(吸收或輸出電流)八個LSTTL電路。 對于EPROM型單片機,在EPROM編程期間,此引腳接收編程脈P沖(PROG功能)
③PSEN外部程序存儲器讀選通信號輸出端,在從外部程序存儲取指令(或數(shù)據(jù))期間,在每個機器周期內(nèi)兩次有效。同樣可以驅(qū)動八LSTTL輸入。
④ EA/Vpp 、EA/Vpp為內(nèi)部程序存儲器和外部程序存儲器選擇端。當(dāng)EA/Vpp為高電平時,訪問內(nèi)部程序存儲器,當(dāng)/Vpp 為低電平時,則訪問外部程序存儲器。
對于EPROM型單片機,在EPROM編程期間,此引腳上加21伏EPROM編程電源(Vpp)。
(4)輸入/輸出引腳P0.0 - P0.7,P1.0 - P1.7,P2.0 - P2.7,P3.0 - P3.7。
① P0口(P0.0 - P0.7)是一個8位漏極開路型雙向I/O口,在訪問外部存儲器時,它是分時傳送的低字節(jié)地址和數(shù)據(jù)總線,P0口能以吸收電流的方式驅(qū)動八個LSTTL負(fù)載。
② P1口(P1.0 - P1.7)是一個帶有內(nèi)部提升電阻的8位準(zhǔn)雙向I/O口。能驅(qū)動(吸收或輸出電流)四個LSTTL負(fù)載……
③ P2口(P2.0 - P2.7)是一個帶有內(nèi)部提升電阻的8位準(zhǔn)雙向I/O口,在訪問外部存儲器時,它輸出高8位地址。P2口可以驅(qū)動(吸收或輸出電流)四個LSTTL負(fù)載。
④ P3口(P3.0 - P3.7)是一個帶有內(nèi)部提升電阻的8位準(zhǔn)雙向I/O口。能驅(qū)動(吸收或輸出電流)四個LSTTL負(fù)載。
2.2 LED顯示數(shù)碼管
LED有共陰極和共陽極兩種。如圖所示。二極管的陰極連接在一起,通常此公共陰極接地,而共陽極則將發(fā)光二極管的陽極連接在一起,接入+5V的電壓。一位顯示器由8個發(fā)光二極管組成,其中7個發(fā)光二極管構(gòu)成字型“8”的各個筆劃(段)a~g,另一個小數(shù)點為dp發(fā)光二極管。當(dāng)在某段發(fā)光二極管施加一定的正向電壓時,該段筆劃即亮;不加電壓則暗。為了保護各段LED不被損壞,需外加限流電。
LED數(shù)碼管結(jié)構(gòu)原理圖
AT89C2051芯片的20個引腳功能為:
VCC 電源電壓。
GND 接地。
RST 復(fù)位輸入。當(dāng)RST變?yōu)楦唠娖讲⒈3?個機器周期時,所有I/O引腳復(fù)位至“1”。
XTAL1 反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。
XTAL2 來自反向振蕩放大器的輸出。
P1口 8位雙向I/O口。引腳P1.2~P1.7提供內(nèi)部上拉,當(dāng)作為輸入并被外部下拉為低電平時,它們將輸出電流,這是因內(nèi)部上拉的緣故。P1.0和P1.1需要外部上拉,可用作片內(nèi)精確模擬比較器的正向輸入(AIN0)和反向輸入(AIN1),P1口輸出緩沖器能接收20mA電流,并能直接驅(qū)動LED顯示器;P1口引腳寫入“1” 后,可用作輸入。在閃速編程與編程校驗期間,P1口也可接收編碼數(shù)據(jù)。
P3口 引腳P3.0~P3.5與P3.7為7個帶內(nèi)部上拉的雙向I/0引腳。P3.6在內(nèi)部已與片內(nèi)比較器輸出相連,不能作為通用I/O引腳訪問。P3口的輸出緩沖器能接收20mA的灌電流;P3口寫入“1”后,內(nèi)部上拉,可用輸入。P3口也可用作特殊功能口。
2.3 中斷指令
在CPU和外設(shè)交換信息時,存在著快速CPU和慢速外設(shè)間的矛盾,機器內(nèi)部有時也可能出現(xiàn)突發(fā)事件,為此,計算機中通常采用中斷技術(shù)。
CPU和外設(shè)并行工作,當(dāng)外設(shè)數(shù)據(jù)準(zhǔn)備好( 或有某種突發(fā)事件發(fā)生)時向CPU提出請求,CPU暫停正在執(zhí)行的程序轉(zhuǎn)而為該外設(shè)服務(wù)(或處 理緊急事件),處理完畢再回到原斷點繼續(xù)執(zhí)行原程序。
中斷優(yōu)先級:當(dāng)有多個中斷源同時 向CPU申請中斷時,CPU優(yōu)先響應(yīng)最需緊急處理的中斷請求,處理完畢再響應(yīng)優(yōu)先級別較低的 ,這種預(yù)先安排的響應(yīng)次序。
中斷的嵌套:在中斷系統(tǒng)中,高優(yōu)先級的 中斷請求能中斷正在進行的較低級的中斷源處理,
(1)中斷技術(shù)是實時控制中的常用技術(shù),51系列單片機有三個內(nèi)部中斷,二個外部中斷。所謂 外部中斷就是在外部引腳上有產(chǎn)生中斷所需要的信號。
每個中斷源有固定的中斷服務(wù)程序的入口地址(稱矢量地址或向量地址)。當(dāng)CPU響應(yīng)中斷以 后單片機內(nèi)部硬件保證它能自動的跳轉(zhuǎn)到該地址。因此,此地址是應(yīng)該熟記的,在匯編程序 中,中斷服務(wù)程序應(yīng)存放在正確的向量地址內(nèi)。
(或存放一條轉(zhuǎn)移指令);而在C語言中是靠Interrupt n的關(guān)鍵字n自動設(shè)置的。
(2)單片機的中斷是靠內(nèi)部的寄存器管理的,這就是中斷允許寄存器IE,中斷優(yōu)先權(quán)寄存器IP ,必須在CPU開中斷即開全局中斷開關(guān)EA,開各中斷源的中斷開關(guān),CPU才能響應(yīng)該中斷源的 中斷請求,其中缺一不可。
(3)從程序表面看來,主程序和中斷服務(wù)程序好象是沒有關(guān)連的,只有掌握中斷響應(yīng)的過程, 才能理解中斷的發(fā)生和返回,看得懂中斷程序,并能編寫高質(zhì)量中斷程序。
表2.1 常用中斷
符號名 稱中 斷 引 起 原 因中斷服務(wù)程序入口
INT0外部中斷0P3.2引腳的低電平或下降沿信號0003H
INT1外部中斷1
P3.3引腳的低電平或下降沿信號0013H
T0定時器0中斷定時計數(shù)器0計數(shù)回零溢出000BH
T1定時器1中斷定時計數(shù)器1計數(shù)回零溢出001BH
T2定時器2中斷定時計數(shù)器2中斷(TF2或T2EX信號)002BH
TI/RI串行口中斷串行通信完成一幀數(shù)據(jù)發(fā)送或接收引起中斷0023H
3 硬件原理圖
晶振(12MHz)定時1秒,對于12MHz的晶振而言,其時鐘周期T=1/f=1/12us,而89C51的一個機器周期包括12個時鐘周期,所以一個機器周期為1us,對于T0而言,使之工作于16-bit,最大計時為65536*1=65536us,需要多次定時才能實現(xiàn)一秒定時。
4 軟件設(shè)計
4.1 流程圖
4.2 源程序
ORG 0000H ;中斷入口程序;
LJMP START
ORG 0003H
RETI
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
RETI
CLEAR: RET; ; 初始化程序
;START:ACALL CLEAR ; 主 程 序
STAR1:MOV P3,#0FFH
JNB P3.2,F(xiàn)UN2
JNB P3.3,F(xiàn)UN3 ;關(guān)閉按紐
JNB P3.4,F(xiàn)UN0
JNB P3.5,F(xiàn)UN1
JNB F0,STAR1 ;曾經(jīng)有鍵按下F0置1
RET;
FUN0:LCALL DL10MS ;消除抖動
JB P3.4,STAR1
WAITL0:JNB P3.4,WAITL0 ;等待鍵釋放
SETB F0
FUN01:LCALL FUN00
LCALL STAR1
LJMP FUN01;
FUN1:LCALL DL10MS ;消除抖動
JB P3.5,STAR1
WAITL1:JNB P3.5,WAITL1 ;等待鍵釋放
SETB F0
FUN10:LCALL FUN11
LCALL STAR1
LJMP FUN10;
FUN2:LCALL DL10MS ;消除抖動
JB P3.2,STAR1
WAITL2:JNB P3.2,WAITL2 ;等待鍵釋放
SETB F0
FUN20:LCALL FUN22
LCALL STAR1
LJMP FUN20;
FUN3:LCALL DL10MS ;消除抖動
JB P3.3,STAR1
WAITL3:JNB P3.3,WAITL3 ;等待鍵釋放
CLR F0
MOV P1,#0FFH ;關(guān)顯示
LJMP STAR1;
FUN00:MOV A,#0FEH ;從P1.0到P1.7移動點亮
FUN000:MOV P0,A
LCALL DL05S
JNB ACC.7,OUT
RL A
AJMP FUN000
OUT: RET;
FUN11:MOV A,#0FEH ;從P1.0到P1.7依次點亮
FUN111:MOV P1,A
LCALL DL05S
JZ OUT
RL A
ANL A,P1
AJMP FUN111;
FUN22:MOV A,#0FEH ;間隔點亮
FUN222:MOV P1,A
LCALL DL01S
CPL A
RL A
MOV P1,A
LCALL DL01S
RET;
FUN33: MOV A,#01H ;逐點熄滅
FUN333: MOV P1,A
LCALL DL01S
JNZ OUT
RL A
ORL A,P1
AJMP FUN333
DL01S:MOV R2,#0FFH ; 延時程序
MOV R7,#02H
LOOP1: DJNZ R2,LOOP1
LOOP5:DJNZ R7,DL512
RET
DL10MS:MOV R3,#14H
LOOP2: LCALL DL512
DJNZ R3,LOOP2
RET
DL05S:MOV R4,#0AH
LOOP3: LCALL DL10MS
DJNZ R4,LOOP3
RET
DL30S:MOV R5,#03H
LOOP4:LCALL DL05S
DJNZ R5,LOOP4
RET
END
4.2一秒鐘定時程序
MOV B,#0AH ;允許中斷
MOV TMOD,#01H ;工作方式1
MOV TH0,#0B0H
MOV TL0,#3CH
SETB TR0 ;啟動計數(shù)
SETB EA ;開中斷
BU:JBC TF0,SHI
SJMP BU
SHI:MOV TH0,#3CH
MOV TL0,#0B0H
RET
評論
查看更多