头文件
#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
文档为doc格式