原创 74HC595驱动8段数码管的程序

2013-12-24 14:58 2922 21 21 分类: MCU/ 嵌入式 文集: 硬件小模块
//使用STM32F103作为MCU,74HC595驱动8段数码管的程序

#define HC595_OE_H()          GPIO_SetBits(GPIOB, GPIO_Pin_12)
#define HC595_OE_L()        GPIO_ResetBits(GPIOB, GPIO_Pin_12)
#define HC595_RCK_H()          GPIO_SetBits(GPIOB, GPIO_Pin_13)
#define HC595_RCK_L()        GPIO_ResetBits(GPIOB, GPIO_Pin_13)
#define HC595_SCK_H()          GPIO_SetBits(GPIOB, GPIO_Pin_14)
#define HC595_SCK_L()        GPIO_ResetBits(GPIOB, GPIO_Pin_14)
#define HC595_DAT_H()          GPIO_SetBits(GPIOB, GPIO_Pin_15)
#define HC595_DAT_L()        GPIO_ResetBits(GPIOB, GPIO_Pin_15)

void HC595_init(void)
{
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    GPIO_SetBits(GPIOB, GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);
    HC595_start();
}

void HC595_start(void)
{
    HC595_OE_L();
}

void HC595_stop(void)
{
    HC595_OE_H();
}

void HC595_shift_byte(uint8_t byte)
{
    uint8_t i = 0;
    for (i = 0; i < 8; i++) {
        if (byte & 0x80)
            HC595_DAT_L();
        else
            HC595_DAT_H();
        HC595_SCK_L();
        HC595_SCK_H();
        byte = byte << 1;
    }
    HC595_RCK_L();
    HC595_RCK_H();
}

//每执行HC595_shift_byte一次,串联起来的8段数码管就会将自己的显示往左边推移一位;
//HC595_shift_byte的入口参数byte的二进制,刚好对应8段数码管的段位;
//是不是很森破呢~


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
21
关闭 站长推荐上一条 /3 下一条