找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4|回复: 0
收起左侧

STM32F103ZET6学习记录-数码管部分

[复制链接]
ID:1151132 发表于 2025-5-20 21:13 | 显示全部楼层 |阅读模式
  相关的准备工作和LED总体类似(因为数码管和LED用的线路是相同的都是GPIOC的前八个引脚)

区别只在定义宏的时候将LED_PORT_RCC\LED_PORT\LED_PIN改为SMG_PORT_RCC\SMG_PORT\SMG_PIN即可,其余均完全类似,挂接总线和初始化的管脚操作均类似。

当然为了方便管理和提高程序的可移植性我们还是创建了一个名为SMG的文件夹。(在魔术棒中配置相应的编译路径)。

之后将初始化函数调用到主函数中即可。

以上都是和LED实验的相似点。

之后不同的是,我们用数码管显示一般通过

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)

函数。该函数可以对指定的GPIOx进行值写入,也就是批量。通常我们会使用好几段数码管来显示我们的目标。再使用ResetBits和SetBits函数会很繁琐。

此时我们可以将我们要显示的目标转换成数码管中对应的二进制,换算成16进制的数,保存在一个数组当中,之后我们再对数组进行调用即可。





因为数码管分共阳和共阴连接。但是我们不必写两组数组。

我们可只写共阴的数组,若是共阳解法我们就取反,共阴就直接调用即可/******************************************************************/
/*******************************主函数部分***********************/
/******************************************************************/
#include "system.h"
#include "SysTick.h"
#include "led.h"
#include "smg.h"
unsigned int  Number[]=
{   
        0x3f,//0 --- 0011 1111  
        0x06,//1 --- 0000 0110
        0x5b,//2 --- 0101 1011
        0x4f,//3 --- 0100 1111
        0x66,//4 --- 0110 0110
        0x6d,//5 --- 0110 1101
        0x7d,//6 --- 0111 1101
        0x07,//7 --- 0000 0111
        0x7f,//8 --- 0111 1111
        0x6f,//9 --- 0110 1111
        0x77,//a --- 0111 0111
        0x7c,//b --- 0111 1100
        0x39,//c --- 0011 1001
        0x5e,//d --- 0101 1110
        0x79,//e --- 0111 1001
        0x71 //f --- 0111 0001
};
int main()
{
        u16 i=0;
        SysTick_Init(72);
        LED_Init();
        SMG_init();
        while(1)
        {
                if(i > 15)
                        i=0;
                GPIO_Write(SMG_PORT,~Number[ i]);
                delay_ms(1000);
                i++;
        }
}/*****************************************/
/*******************smg头文件*************/
/****************************************/
#ifndef _SMG_H
#define _SMG_H

#include "stm32f10x.h"

#define SMG_PORT_RCC         RCC_APB2Periph_GPIOC
#define SMG_PORT                         GPIOC
#define SMG_PIN                                GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7
void SMG_init(void);


#endif
/********************************************/
/******************数码管.c文件***************/
/********************************************/
#include "smg.h"

void SMG_init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(SMG_PORT_RCC,ENABLE);
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
        GPIO_Init(SMG_PORT,&GPIO_InitStructure);
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表