【藍橋杯單片機02】LED的基本控制


【藍橋杯單片機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();                                
        }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM