一、主要元器件和原理
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)