1. 程式人生 > >C51之74HC595的使用

C51之74HC595的使用

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

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

*/


//向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_()  /* 定義空指令 */