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