stm32 74hc573 驱动程序 带电路图

发布时间:2013-10-04 15:23:07   来源:文档文库   
字号:

头文件

#ifndef __74HC573_H__

#define __74HC573_H__

#define HC573_LE_W_PIN GPIO_Pin_1

#define HC573_LE_W_GPIO GPIOB

#define HC573_LE_W_GPIO_CLK RCC_APB2Periph_GPIOB

#define HC573_LE_W_H() GPIOB->BSRR = HC573_LE_W_PIN

#define HC573_LE_W_L() GPIOB->BRR = HC573_LE_W_PIN

#define HC573_LE_D_PIN GPIO_Pin_10

#define HC573_LE_D_GPIO GPIOB

#define HC573_LE_D_GPIO_CLK RCC_APB2Periph_GPIOB

#define HC573_LE_D_H() GPIOB->BSRR = HC573_LE_D_PIN

#define HC573_LE_D_L() GPIOB->BRR = HC573_LE_D_PIN

#define HC573_DATA0_PIN GPIO_Pin_11

#define HC573_DATA0_GPIO GPIOB

#define HC573_DATA0_GPIO_CLK RCC_APB2Periph_GPIOB

#define HC573_DATA0_H() GPIOB->BSRR = HC573_DATA0_PIN

#define HC573_DATA0_L() GPIOB->BRR = HC573_DATA0_PIN

#define HC573_DATA1_PIN GPIO_Pin_2

#define HC573_DATA1_GPIO GPIOB

#define HC573_DATA1_GPIO_CLK RCC_APB2Periph_GPIOB

#define HC573_DATA1_H() GPIOB->BSRR = HC573_DATA1_PIN

#define HC573_DATA1_L() GPIOB->BRR = HC573_DATA1_PIN

#define HC573_DATA2_PIN GPIO_Pin_0

#define HC573_DATA2_GPIO GPIOB

#define HC573_DATA2_GPIO_CLK RCC_APB2Periph_GPIOB

#define HC573_DATA2_H() GPIOB->BSRR = HC573_DATA2_PIN

#define HC573_DATA2_L() GPIOB->BRR = HC573_DATA2_PIN

#define HC573_DATA3_PIN GPIO_Pin_6

#define HC573_DATA3_GPIO GPIOA

#define HC573_DATA3_GPIO_CLK RCC_APB2Periph_GPIOA

#define HC573_DATA3_H() GPIOA->BSRR = HC573_DATA3_PIN

#define HC573_DATA3_L() GPIOA->BRR = HC573_DATA3_PIN

#define HC573_DATA4_PIN GPIO_Pin_4

#define HC573_DATA4_GPIO GPIOA

#define HC573_DATA4_GPIO_CLK RCC_APB2Periph_GPIOA

#define HC573_DATA4_H() GPIOA->BSRR = HC573_DATA4_PIN

#define HC573_DATA4_L() GPIOA->BRR = HC573_DATA4_PIN

#define HC573_DATA5_PIN GPIO_Pin_3

#define HC573_DATA5_GPIO GPIOA

#define HC573_DATA5_GPIO_CLK RCC_APB2Periph_GPIOA

#define HC573_DATA5_H() GPIOA->BSRR = HC573_DATA5_PIN

#define HC573_DATA5_L() GPIOA->BRR = HC573_DATA5_PIN

#define HC573_DATA6_PIN GPIO_Pin_5

#define HC573_DATA6_GPIO GPIOA

#define HC573_DATA6_GPIO_CLK RCC_APB2Periph_GPIOA

#define HC573_DATA6_H() GPIOA->BSRR = HC573_DATA6_PIN

#define HC573_DATA6_L() GPIOA->BRR = HC573_DATA6_PIN

#define HC573_DATA7_PIN GPIO_Pin_7

#define HC573_DATA7_GPIO GPIOA

#define HC573_DATA7_GPIO_CLK RCC_APB2Periph_GPIOA

#define HC573_DATA7_H() GPIOA->BSRR = HC573_DATA7_PIN

#define HC573_DATA7_L() GPIOA->BRR = HC573_DATA7_PIN

void HC573Init(void) ;

void HC573_W_code(u8 data) ;

void HC573_D_code(u8 data) ;

void HC573_DPY_num(int32_t num) ;

#endif

c文件

//////////////////////////////////////////////////////////////////////////////////

//说明:用两片74hc573驱动两个四位数码管,HC573_DPY_num(int32_t num)只会让数码管显示一次,使用需加循环。

//作者:Ryanyanshuai

//修改日期:2013/10/4

//版本:V1.0

//交流加qq1018718155

//////////////////////////////////////////////////////////////////////////////////

#include "stm32f10x.h"

#include "stm32f10x_rcc.h"

#include "stm32f10x_gpio.h"

#include "74HC573.h"

#include "delay.h"

u8 LED7CC[] ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; //共“阴”极数码管的码表

//static void delay(u32 t)

//{

// u32 i;

// while(t--)

// for (i = 0; i < 1; i++);

//}

void HC573Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure; //定义结构体

RCC_APB2PeriphClockCmd(HC573_LE_W_GPIO_CLK | HC573_LE_D_GPIO_CLK | HC573_DATA0_GPIO_CLK | HC573_DATA1_GPIO_CLK | \

HC573_DATA2_GPIO_CLK | HC573_DATA3_GPIO_CLK | HC573_DATA4_GPIO_CLK | HC573_DATA0_GPIO_CLK | HC573_DATA6_GPIO_CLK | \

HC573_DATA7_GPIO_CLK , ENABLE); //使能io时钟

GPIO_InitStructure.GPIO_Pin = HC573_LE_D_PIN; //配置io

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(HC573_LE_D_GPIO, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = HC573_LE_W_PIN;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(HC573_LE_W_GPIO, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = HC573_DATA0_PIN;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(HC573_DATA0_GPIO, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = HC573_DATA1_PIN;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(HC573_DATA1_GPIO, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = HC573_DATA2_PIN;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(HC573_DATA2_GPIO, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = HC573_DATA3_PIN;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(HC573_DATA3_GPIO, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = HC573_DATA4_PIN;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(HC573_DATA4_GPIO, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = HC573_DATA5_PIN;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(HC573_DATA5_GPIO, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = HC573_DATA6_PIN;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(HC573_DATA6_GPIO, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = HC573_DATA7_PIN;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(HC573_DATA7_GPIO, &GPIO_InitStructure);

HC573_LE_D_L();

HC573_LE_W_L();

HC573_DATA0_H();

HC573_DATA1_H();

HC573_DATA2_H();

HC573_DATA3_H();

HC573_DATA4_H();

HC573_DATA5_H();

HC573_DATA6_H();

HC573_DATA7_H();

}

void HC573_W_code(u8 bitdata) //位码函数

{

HC573_DATA7_H(); //将某以为置低,其他全部设置为高

HC573_DATA6_H();

HC573_DATA5_H();

HC573_DATA4_H();

HC573_DATA3_H();

HC573_DATA2_H();

HC573_DATA1_H();

HC573_DATA0_H();

switch (bitdata)

{

case 1 : HC573_DATA7_L() ;

break;

case 2 : HC573_DATA6_L() ;

break;

case 3 : HC573_DATA5_L() ;

break;

case 4 : HC573_DATA4_L() ;

break;

case 5 : HC573_DATA3_L() ;

break;

case 6 : HC573_DATA2_L() ;

break;

case 7 : HC573_DATA1_L() ;

break;

case 8 : HC573_DATA0_L() ;

break;

}

}

void HC573_D_code(u8 blodata) //段码函数

{

if(blodata & 0x01) //取与表示取出blodata的相应位置

HC573_DATA0_H();

else

HC573_DATA0_L();

if(blodata & 0x02)

HC573_DATA1_H();

else

HC573_DATA1_L();

if(blodata & 0x04)

HC573_DATA2_H();

else

HC573_DATA2_L();

if(blodata & 0x08)

HC573_DATA3_H();

else

HC573_DATA3_L();

if(blodata & 0x10)

HC573_DATA4_H();

else

HC573_DATA4_L();

if(blodata & 0x20)

HC573_DATA5_H();

else

HC573_DATA5_L();

if(blodata & 0x40)

HC573_DATA6_H();

else

HC573_DATA6_L();

if(blodata & 0x80)

HC573_DATA7_H();

else

HC573_DATA7_L();

}

void HC573_DPY_num(int32_t num)

{

u8 wei,i ;

int32_t numin;

if(num<10) //判断有几位要显示

wei=1;

else if(num<100)

wei=2;

else if(num<1000)

wei=3;

else if(num<10000)

wei=4;

else if(num<100000)

wei=5;

else if(num<1000000)

wei=6;

else if(num<10000000)

wei=7;

else

wei=8;

for(i=1;i<=wei;i++) //显示

{

HC573_W_code( i );

HC573_LE_W_H();

delay_us(1);

HC573_LE_W_L();

HC573_D_code( LED7CC[numin%10] );

HC573_LE_D_H();

delay_us(1);

HC573_LE_D_L();

numin /= 10; //numin=numin/10

delay_us(100);

HC573_D_code( 0x00 );

HC573_LE_D_H();

delay_us(1);

HC573_LE_D_L();

}

}

本文来源:https://www.2haoxitong.net/k/doc/cf58e0b26bec0975f465e247.html

《stm32 74hc573 驱动程序 带电路图.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式