【藍橋杯單片機02】LED的基本控制
廣東職業技術學院 歐浩源
在CT107D單片機綜合訓練平台實現LED的基本控制和其他單片機開發平台不一樣,不單單是控制幾個LED實現跑馬燈這么簡單。因為在這個平台上要掌握74CH138譯碼器和74HC573鎖存器的使用才能實現對LED的基本控制。因此,這個單元的重點不是LED的控制,而是掌握譯碼器和鎖存器的基本使用。
1、74HC138:三八譯碼器
用非專業的語言來解釋,這個芯片實現的功能就是用3個輸入引腳,實現8個輸出引腳,而且這個八個輸出引腳中只要一個低電平。對於這個芯片,你不需要搞清楚它的內部結構和工作原理,只需要把真值表記住就行了。注意:是要記住。
2、74HC573:鎖存器
用非專業的語言來解釋,鎖存器就是能夠把輸出的數據保存住,不會受到輸入變化的影響。
573鎖存器有20個引腳,D1~D8是數據輸入端,Q1~Q8是數據輸出端,LE為鎖存控制端。當鎖存使能端LE為高時,573的鎖存對於數據是透明的(也就是說輸出同步)。當鎖存使能變低時,符合建立時間和保持時間的數據會被鎖存。
簡單的說就是,LE為高電平時,Q1~Q8輸出和D1~D8輸入是一樣的;LE為低電平時,Q1~Q8輸出不受D1~D8輸入的變化影響。明白這個就掌握了該鎖存器的使用。
3、74HC02:或非門
從電路原理圖上可以分析出,單片機的WR引腳或者GND和譯碼器的Y4引腳作為74HC02的輸入。可以通過J13的跳帽選擇是WR還是GND作為74HC02的輸入。如果譯碼器的Y4輸出低電平,那么74HC02的輸出Y4C將為高電平,而該引腳接到74HC573鎖存器的LE引腳,這時候鎖存器處於數據聯通的開放狀態,也就是單片機可以控制LED燈。如果單片機不向外設輸出數據,或者譯碼器的Y4沒有輸出低電平的話,則74HC573處於鎖存狀態,即單片機不能控制LED燈。
4、單元訓練題目
5、參考源碼
#include "reg52.h" sbit HC138_A = P2^5; sbit HC138_B = P2^6; sbit HC138_C = P2^7; void Delay(unsigned int time) { while(time--); while(time--); } /*======================================================= *通過HC138譯碼器控制HC573鎖存器 *參數:n--HC138譯碼器低電平引腳 4:Y4輸出低電平 5:Y5輸出低電平 6:Y6輸出低電平 7:Y7輸出低電平 8:Y4~Y7全部輸出高電平 *·返回值:無。 *設計:歐浩源 廣東職業技術學院 & 小蜜蜂科教 *時間:2018年1月26日 =======================================================*/ void Init74HC138(unsigned char n) { switch(n) { case 4: HC138_A = 0; HC138_B = 0; HC138_C = 1; break; case 5: HC138_A = 1; HC138_B = 0; HC138_C = 1; break; case 6: HC138_A = 0; HC138_B = 1; HC138_C = 1; break; case 7: HC138_A = 1; HC138_B = 1; HC138_C = 1; break; case 8: HC138_A = 0; HC138_B = 0; HC138_C = 0; break; } } void LEDRunning() { char i = 0; P0 = 0xaa; Delay(60000); Delay(60000); P0 = 0x55; Delay(60000); Delay(60000); for(i = 0; i < 3; i++) { P0 = 0x00; Delay(60000); P0 = 0xff; Delay(60000); } for(i = 0; i < 8; i++) { P0 <<= 1; Delay(60000); } for(i = 0; i < 8; i++) { P0 <<= 1; P0 |= 1; Delay(60000); } } main() { Init74HC138(4); while(1) { LEDRunning(); } }