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