stm32驱动hc595

时间:2024-04-04 21:35:05

根据网上资料:

stm32驱动hc595

 stm32驱动hc595

595具体使用的步骤:
第一步:目的:将要准备输入的位数据移入74HC595数据输入端上。
方法:送位数据到_595。
第二步:目的:将位数据逐位移入74HC595,即数据串入
方法:SH产生一上升沿,将DS上的数据移入74HC595中.从高到低
第三步:目的:并行输出数据。即数据并出
方法:ST产生一上升沿,将由DS上已移入数据寄存器中的数据
送入到输出锁存器。 

源码:

//三引脚都接5V上啦电阻

uint8_t tab[]={0x00,0x04,0x06,0x08,0x10,0x20,0x40,0xff};
void HC595TransData(uint8_t SendVal)    ;
static void delay(u32 t)
{
u32 i;
while(t--)
for (i = 0; i < 1; i++);
}


/*--ZQP的74HC595的初始化*/  
void HC595_Init(void)  
{  
    GPIO_InitTypeDef GPIO_InitS;  
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  
  
    GPIO_InitS.GPIO_Pin = GPIO_Pin_8;  
    GPIO_InitS.GPIO_Mode = GPIO_Mode_Out_OD;  
    GPIO_InitS.GPIO_Speed = GPIO_Speed_50MHz;  
    GPIO_Init(GPIOA, &GPIO_InitS);  
                                  
    GPIO_InitS.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12;  
    GPIO_InitS.GPIO_Mode = GPIO_Mode_Out_PP;  
    GPIO_InitS.GPIO_Speed = GPIO_Speed_50MHz;  
    GPIO_Init(GPIOA, &GPIO_InitS);  
}  
  
  
void HC595TransData(uint8_t SendVal)   //高位先发
{  
  uint8_t i;  
  for(i=0; i<8; i++)  //8位移出
  {   
  GPIO_ResetBits(GPIOA,GPIO_Pin_12) ;    //SH
    if ((SendVal & 0x80) != 0 )   
        GPIO_SetBits(GPIOA,GPIO_Pin_8);   //ds脚 
    else   
        GPIO_ResetBits(GPIOA,GPIO_Pin_8);  
     delay(100);  
    GPIO_SetBits(GPIOA,GPIO_Pin_12);  
    delay(100);
    SendVal<<=1;
  }  
     GPIO_SetBits(GPIOA,GPIO_Pin_11);   // ST
     delay_us(200);  
     GPIO_ResetBits(GPIOA,GPIO_Pin_11);  
     delay_us(150); 
}  


参考:

http://www.360doc.com/content/15/0707/16/12109864_483371213.shtml

http://www.51hei.com/chip/1799.html