74HC595/四位按键 驱动四位数码管

一、主要元器件和原理GD32F303RCT6 74HC595 共阳数码管 按键(图片数码管名字有误)风中凌乱的笔记:A1A2A3A4下拉工作模式。给A1A2A3A4一个低电平。当abcdefg来一个高电平时,数码管亮。GPIO_CTL0(GPIOB) &= 0x0FFFF000;表示配置PA3,PA4,PA5,PA6脚GPIO_CTL0(GPIOB) |= 0x03333000;表示PA3,PA4,PA5,PA6的工作模式為推挽輸出0011=0x3(00為推挽輸出,11為50M
摘要由CSDN通过智能技术生成

一、主要元器件和原理

GD32F303RCT6 74HC595 共阳数码管 按键(图片数码管名字有误)
风中凌乱的笔记:
A1A2A3A4下拉工作模式。给A1A2A3A4一个低电平。当abcdefg来一个高电平时,数码管亮。
GPIO_CTL0(GPIOB) &= 0x0FFFF000;表示配置PA3,PA4,PA5,PA6脚
GPIO_CTL0(GPIOB) |= 0x03333000;表示PA3,PA4,PA5,PA6的工作模式為推挽輸出0011=0x3(00為推挽輸出,11為50MHz)
局部static,只初始化一次,不再作第二次初始化。
void led_Init(void)
{
INT8U ucFlag = 0;
static INT8U ucNumber = 0;

     ucFlag++;      第一次初始化后,ucFlag = 1,第二次初始化也为1 

     ucNumber++;  第一次初始化后,ucNumbe = 1,第二次初始化为2,…

………………………
}
Define定义一般放在.h文件,.c可以直接调用.h文件。如果放在.c文件,其他的.c文件不能用。

const INT8U LED_data[]={0x3f,0x06,0x5b,0x4f,0x66, 0x71};数组值固定不变
static
extern const INT8U LED_data[]; 用于外部声明

线路连接:
DG_D1---->PB6
DG_D2---->PB5
DG_D3---->PB4
DG_D4---->PB3
按键原理等后续有空再补充

二、原理图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、程序

DigiDrv.c

#include "DigiDrv.h"
//数码管段选                       0     1     2    3      4     5     6     7     8     9     A     B     C      D    E     F     G      R     S     W    灭
const INT8U GucDigiDispData[] = {
   0XC0, 0XF9, 0XA4, 0XB0, 0X99, 0X92, 0X82, 0XF8, 0X80, 0X90, 0X88, 0X83, 0XC6, 0XA1, 0X86, 0X8E, 0XC2, 0XAF, 0X92, 0X81, 0XFF};
//const INT8U GucDigiDispData[] = {0X3F, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7D, 0X07, 0X7F, 0X6F, 0X77, 0X7C, 0X39, 0X5E, 0X79, 0X71, 0XBF};

void DigiDrvInit(void)
{
   
    rcu_periph_clock_enable(RCU_AF);
    rcu_periph_clock_enable(RCU_GPIOB);
    
    AFIO_PCF0 &= 0xF8FFFFFF;     //置零
    AFIO_PCF0 |= (1<<25);       // 置1     禁用JTAG,使能SWD模式 010(关闭JTAG功能,设为普通IO口使用)
    
    gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, DIGI_PORT);   // 位控制脚
    gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_15);
    
    
    gpio_bit_reset(GPIOB, DIGI_PORT);   //      关闭数码管显示 ,复位引脚值   
}
//74HC595驱动程序
void DigiDrvWriteData(INT8U ucData)
{
   
    INT8U i;                            
                          //时钟线低电平
    for (i = 0; i < 8; i++)            
    {
    
        if (ucData & 0x80)              //判断数据高低            
            DIGI_DS_CLR;
        else 
            DIGI_DS_SET;
        
        ucData = (ucData << 1)
  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zmiyhl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值