74HC595驅動(2線串行通信)

 

/*****************************************************************************
FileName : hc595.c
Function : 74HC595驅動程序---驅動74HC595,3入8出 
Author   : mike
Email    : [email protected]	
Version  : V1.0
Date     : 2019-07-12
Note     : 
*****************************************************************************/
#define u8                          unsigned char  
#define BIT(n)                      (1 << n)

#define HC595_INIT()                //初始化爲輸出
  
#define HC595_SI_HIGH()             P2 |= BIT(3)//Serial data---串行數據輸入  
#define HC595_SI_LOW()              P2 &= ~BIT(3)     
#define HC595_SCK_HIGH()            P2 |= BIT(6)//storage register clock---存儲寄存器時鐘  
#define HC595_SCK_LOW()             P2 &= ~BIT(6)  
#define HC595_RCK_HIGH()            P2 |= BIT(4)//shift register clock---移位寄存器時鐘  
#define HC595_RCK_LOW()             P2 &= ~BIT(4)     
  
void hc595_send_data(u8 dat)//寫數據---1片74HC595  
{  
    u8 i;  
      
    for(i = 0;i < 8;i ++)  
    {  
        if(dat & 0x80)  
        {  
            HC595_SI_LOW();    //低亮< 如果需要高亮HC595_SI_HIGH() >        
        }  
        else  
        {  
            HC595_SI_HIGH();              
        }  
        dat <<= 1;  
        HC595_SCK_LOW();    //從SCK產生一上升沿(移入數據)  
        //asm("nop");asm("nop");asm("nop");asm("nop"); //稍做延時  
        HC595_SCK_HIGH();  
    }  
       //送數據  
    HC595_RCK_LOW();  
    //asm("nop");asm("nop");asm("nop");asm("nop"); //稍做延時  
    HC595_RCK_HIGH();  
    as//asm("nop");asm("nop");asm("nop");asm("nop"); //稍做延時  
    HC595_RCK_LOW();  
}  
  
void hc595_send_data(u32 dat)//寫數據---4片74HC595級聯  
{  
    u8 i;  
      
    for(i = 0;i < 32;i ++)  
    {  
        if(dat & 0x80000000)  
        {  
            HC595_SI_LOW();    //低亮 <如果需要高亮HC595_SI_HIGH() >        
        }  
        else  
        {  
            HC595_SI_HIGH();              
        }  
        dat <<= 1;  
        HC595_SCK_LOW();//從SCK產生一上升沿(移入數據)  
        //asm("nop");asm("nop");asm("nop");asm("nop"); //稍做延時  
        HC595_SCK_HIGH();  
    }  
       //送數據  
    HC595_RCK_LOW();  
    //asm("nop");asm("nop");asm("nop");asm("nop"); //稍做延時  
    HC595_RCK_HIGH();  
    //asm("nop");asm("nop");asm("nop");asm("nop"); //稍做延時  
    HC595_RCK_LOW();  
}  

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章