74HC595點亮8個LED燈


一、原理介紹

595有兩個寄存器,都是8位的,如下所示:

595是串入並出帶有鎖存功能移位寄存器,它的使用方法簡單:

 - -  在正常使用時 /SCLR接高電平,/G接低電平。

 - -  從SER每輸入一位數據,串行輸入時鍾SCK上升沿有效一次,直到八位數據輸入完畢 

 - - 輸出時鍾上升沿有效一次,此時,輸入的數據就被送到了輸出端。

 

 

不同的595引腳名稱會不一樣,但是功能是一樣的。大家看引腳序號即可。以下是595引腳圖:

595具體使用的步驟:
第一步:目的:將要准備輸入的位數據移入74HC595數據輸入端上。(用到SER數據輸入引腳)
方法:送位數據到595。

第二步:目的:將位數據逐位移入74HC595,即數據串入(用到SCK引腳移位寄存器
方法:SCK 產生一上升沿,將595上的數據移入74HC595中的移位寄存器中,從低到高

第三步:目的:並行輸出數據。即數據並出(用到RCK引腳鎖存器
方法:RCK 產生一上升沿,將由SER上已移入數據寄存器中的數據送入到輸出鎖存器。 


二、proteus  仿真畫圖

 由於手頭上沒有595的硬件,用proteus進行仿真。

 接線:

         單片機的P1.4接按鍵;

         單片機的P1.5接 LED;(起初用來測試按鍵,可忽略)

         單片機的P2.0接595的DS(即SER)

    單片機的P2.1接595的SH_CP(即SCK)

    單片機的P2.2接595的ST_CP(即RCK)

         595的8個輸出口,接8個LED燈的正極

功能:

         按下按鍵,8個LED燈亮起;(長按、短按)

         松開按鍵,8個LED燈熄滅;

 

三、單片機程序

 1、定義io、標志位

sbit SER_595=P2^0;     // DS 串行數據輸入端
sbit RCK_595=P2^2;    // ST_CP 數據:移位寄存器--To--存儲寄存器 (上升沿)
sbit SCK_595=P2^1;     // SH_CP 數據移位:QA--QB--QC-- ... --QH   (上升沿)

sbit Button=P1^4;        //按鍵
sbit LED=P1^5;          
uchar Btn_State=1;      //按鍵狀態標志
uchar Count_Put=0xFF;   //取反標志

 

2、發送數據函數:

//發送數據
void HC595_Send_Data(uchar send_data)
{
    uchar i;
    for(i=0;i<8;i++)
    {
        if((send_data<<i)&0x80)//判斷最高位是否是1
            SER_595=1;          //是1,則使SER=1,
        else  SER_595=0;        //是0,則使SER=0
        
        SCK_595=0;//上升沿(移入數據)
        _nop_();
        _nop_();
        SCK_595=1;            
    }
}

函數功能解釋:

  (1)一次只能發送8位數據,循環8次以下工作:

  - - 將這8位數據和先向左移 i 位,再和0x80做與運算,從而判斷數據的第一位是0還是1,進而使SER=0或者1

  - - 接着給SCK_595一個上升沿脈沖,微妙級,將最高位數據0或者1送入595的移位寄存器

 (2)i從0開始,也就是從數據的最高位開始,假如數據為01101100,則0先被送至移位寄存器,接着是1,以此類推。

3、輸出數據函數:

//輸出數據
void HC595_Put_Data()
{
    RCK_595=0;
        _nop_();
        _nop_();        
    RCK_595=1;
}        

4、主函數:

void main()
{
      LED=1;//初始關閉
        while(1){    
            
            //按鍵控制8個LED燈
            if(Button!=Btn_State)  //按下 Button=0  Btn_State=1
            {
                    HC595_Send_Data(0xFF&Count_Put);
                    HC595_Put_Data();
                   Count_Put=~Count_Put;
                    LED=~LED;
                    Btn_State=Button;  //Button=0  Btn_State=0                        
            }                
        }                                                                        
}

 

四、現象

 

另外:看到有篇文章寫的很好,大家可以去看看這個:

http://www.21ic.com/jichuzhishi/datasheet/74HC595/data/757249.html

 


免責聲明!

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



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