zoukankan      html  css  js  c++  java
  • 74HC595 for STM32 源代码【worldsing笔记】

    74HC595是硅结构的CMOS器件, 兼容低电压TTL电路,遵守JEDEC标准。 74HC595是具有8位移位寄存器和一个存储器,三态输出功能。 移位寄存器和存储器是分别的时钟。 数据在SHcp(移位寄存器时钟输入)的上升沿输入到移位寄存器中,在STcp(存储器时钟输入)的上升沿输入到存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。 移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。

    8位串行输入/输出或者并行输出移位寄存器,具有高阻关断状态。三态。

    将串行输入的8位数字,转变为并行输出的8位数字,例如控制一个8位数码管,将不会有闪烁。

    特点

    8位串行输入 /8位串行或并行输出 存储状态寄存器,三种状态

    输出寄存器(三态输出:就是具有高电平、低电平和高阻抗三种输出状态的门电路。)可以直接清除 100MHz的移位频率

    输出能力

    并行输出,总线驱动; 串行输出;标准中等规模集成电路

    595移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。

    参考数据

    Cpd决定动态的能耗,

    Pd=Cpd×VCC×f1+∑(CL×VCC^2×f0)

    F1=输入频率,CL=输出电容 f0=输出频率(MHz) Vcc=电源电压

    引脚说明

    image

    符号 引脚 描述

    Q0…Q7 8位并行数据输出,其中Q0为第15脚

    GND 第8脚 地

    Q7’ 第9脚 串行数据输出

    MR 第10脚 主复位(低电平)

    SHCP 第11脚 移位寄存器时钟输入

    STCP 第12脚 存储寄存器时钟输入

    OE 第13脚 输出有效(低电平)

    DS 第14脚 串行数据输入

    VCC 第16脚 电源

    image 

    注释

    H=高电平状态

    L=低电平状态

    ↑=上升沿

    ↓=下降沿

    Z=高阻

    NC=无变化

    ×=无效

    当MR为高电平,OE为低电平时,数据在SHCP上升沿进入移位寄存器,在STCP上升沿输出到并行端口。

    74HC595.c

    ------------------------------------------------------------------------------------------------------------------------------------------------------

    #include "stm32f10x.h"
    #include "stm32f10x_rcc.h"
    #include "stm32f10x_gpio.h"
    
    #include "74HC595.h"
    /* 延时模块82615468 sp-320-12
     * */
    static void delay(u32 t)
    {
    	u32 i;
    	while(t--)
    		for (i = 0; i < 1; i++);
    }
    
    
    void HC595Init(void)
    {
    	GPIO_InitTypeDef GPIO_InitStructure;
    	RCC_APB2PeriphClockCmd(HC595_CLK_GPIO_CLK | HC595_DATA_GPIO_CLK | HC595_CS_GPIO_CLK, ENABLE);
    	
    	GPIO_InitStructure.GPIO_Pin = HC595_CLK_PIN;
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    	GPIO_Init(HC595_CLK_GPIO, &GPIO_InitStructure);
    	
    	GPIO_InitStructure.GPIO_Pin = HC595_DATA_PIN;
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    	GPIO_Init(HC595_DATA_GPIO, &GPIO_InitStructure);
    
    	GPIO_InitStructure.GPIO_Pin = HC595_CS_PIN;
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    	GPIO_Init(HC595_CS_GPIO, &GPIO_InitStructure);
    	HC595_CLK_H();
    	HC595_DATA_H();
    	HC595_CS_H();
    	
    }
    void HC595Send(u8 data)
    {
      u8 j;
      for (j = 8; j > 0; j--)
    	{
        if(data & 0x80)
    		   HC595_DATA_H();
    		else
    			HC595_DATA_L();
        HC595_CLK_L();              //上升沿发生移位
    		delay(1);
        data <<= 1;
        HC595_CLK_H();
    		delay(1);
      }
    	//HC595Load();
    }
    
    void HC595Load(void)
    {
    	HC595_CS_L();
    	HC595_CS_H();
    }
    
    /*
    void LedRowOn(u8 Row7_0, u8 Row15_8, u8 Row16_23,u8 Row31_24)
    {
    	HC595Send(Row15_8);
    	HC595Send(Row7_0);
    	HC595Send(Row31_24);
    	HC595Send(Row16_23);
    	HC595Load();
    }
    */
    
    void LedRowOut(u32 Data)
    {
    	HC595Send(Data >> 24);
    	HC595Send(Data >> 16);
    	HC595Send(Data >> 8);
    	HC595Send(Data >> 0);
    	HC595Load();
    }
    
    //end of file	
    	

    74HC595.h

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    #ifndef __74HC595_H__
    #define __74HC595_H__

    #define HC595_CLK_PIN          GPIO_Pin_6
    #define HC595_CLK_GPIO          GPIOA
    #define HC595_CLK_GPIO_CLK      RCC_APB2Periph_GPIOA
    #define HC595_CLK_H()           GPIOA->BSRR = HC595_CLK_PIN
    #define HC595_CLK_L()         GPIOA->BRR  = HC595_CLK_PIN

    #define HC595_CS_PIN          GPIO_Pin_7
    #define HC595_CS_GPIO           GPIOA
    #define HC595_CS_GPIO_CLK       RCC_APB2Periph_GPIOA
    #define HC595_CS_H()            GPIOA->BSRR = HC595_CS_PIN
    #define HC595_CS_L()         GPIOA->BRR  = HC595_CS_PIN

    #define HC595_DATA_PIN        GPIO_Pin_10
    #define HC595_DATA_GPIO         GPIOE
    #define HC595_DATA_GPIO_CLK     RCC_APB2Periph_GPIOE
    #define HC595_DATA_H()          GPIOE->BSRR = HC595_DATA_PIN
    #define HC595_DATA_L()       GPIOE->BRR  = HC595_DATA_PIN

    void HC595Send(u8 data);
    void HC595Init(void);
    void HC595Load(void);
    void LedRowOn(u8 Row7_0, u8 Row15_8, u8 Row16_23,u8 Row31_24);
    void LedRowOut(u32 Data);

    #endif

    74HC595 for stm32 源代码下载

  • 相关阅读:
    Android TextView里显示两种颜色
    Android 命令管理项目
    ANT build.xml文件详解
    Android Camera进行拍照
    Android 4.2以上的手机USB调试设置
    Android MediaPlayer和SurfaceView播放视频
    Android VideoView播放视频
    Android MediaRecorder录制音频
    Android Handler消息传递机制
    Android SurfaceView
  • 原文地址:https://www.cnblogs.com/worldsing/p/3313629.html
Copyright © 2011-2022 走看看