C51之74HC595的使用

/*
名稱:74HC595的使用
說明:74HC595是一個8位串行輸入、並行輸出的位移緩存器:並行輸出爲三態輸出。在SCK 的上升沿,串行數據由SDL輸入到內部的8位位移緩存器,並由Q7’輸出,而並行輸出則是在LCK的上升沿將在8位位移緩存器的數據存人到8位並行輸出緩存器。當串行數據輸入端OE的控制信號爲低使能時,並行輸出端的輸出值等於並行輸出緩存器所存儲的值。而當OE爲高電位,也就是輸出關閉時,並行輸出端會維持在高阻抗狀態。

這裏需要注意一點的就是,在芯片需要產生上升沿或者下降沿的時候:本質上就是將其對應引腳進行高低電平的轉換。當然中間需要根據需要保持一定的時間(可以用空指令)。

具體引腳及使用說明見:百度百
https://baike.baidu.com/item/74HC595/9886491?fr=aladdin

*/


//向HC595發送串行數據
void HC595SendData(unsigned char SendVal)
{  
  unsigned char i;

  for(i=0;i<8;i++) 
   {
        if((SendVal<<i)&0x80) Out=1; //set dataline high  0X80  最高位與SendVal左移的最高位 進行邏輯運算
            else Out=0;                // 如果爲真 Out= 1  


        //產生數據移位信號
        S_CLK=0;  
        //delay_ms(1);
        NOP();   //短暫延時產生一定寬度的脈衝信號
        NOP();   //短暫延時
        S_CLK=1;

   }


 //產生數據輸出信號
  R_CLK=0; //set dataline low
        //delay_ms(1);
  NOP();  //短暫延時
  NOP();  //短暫延時
    NOP();
  R_CLK=1;  //


}

// 頭文件中定義的IO
sbit Out =P3^4;  //串行數據線
sbit R_CLK =P3^5;  //數據並行輸出控制
sbit S_CLK =P3^6;  //串行時鐘線


#define  NOP() _nop_()  /* 定義空指令 */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章