C51之74HC595的使用
阿新 • • 發佈:2019-01-08
/*
名稱: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_() /* 定義空指令 */