初始显示的内容_STM32实例数码管显示实验

本文介绍了一个使用STM32F1芯片通过IO口控制共阳数码管显示的实验。首先讲解了数码管的基本原理和类型,然后详细阐述了硬件设计,包括数码管模块电路和GPIO初始化。在软件设计部分,展示了数码管初始化函数和主函数的代码实现,以每隔1秒显示0-F的段码数据为例。
摘要由CSDN通过智能技术生成

    在前面章节中我们已经介绍了如何控制STM32 的IO 口输出高低电平,本章我们通过另外一个实验来讲述STM32 IO 口的输出。通过STM32F1 芯片的IO 口控制板载的一个共阳数码管显示。

数码管介绍

    数码管是一种半导体发光器件,其基本单元是发光二极管。数码管也称LED数码管,不同行业人士对数码管的称呼不一样,其实都是同样的产品。数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP),这个小数点可以更精确的表示数码管想要显示的内容;按能显示多少个(8)可分为1 位、2 位、3 位、4 位、5 位、6 位、7 位等数码管。按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND 上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。

    了解LED 数码管的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。LED 数码管广泛用于仪表,时钟,车站,家电等场合。选用时要注意产品尺寸颜色,功耗,亮度,波长等。下面将介绍常用LED 数码管内部引脚图,如下图所示。

d1058eaf87b42094caef0a7f0b287b8f.png

    如果开发板上使用的是一个共阳数码管,即8 个LED 的阳极全部并联一起引出,阴极分别引出如A、B...DP。如果要让共阳极数码管显示数字0,即对应的段ABCDEF 要点亮即给它低电平,其他的段熄灭即给它高电平

硬件设计

    通常数码管模块电路如下图所示。

308435a7dce24cf6802c0d3cb4199d65.png

0153a38cfcd2f38d7386d986ae10a53e.png

    相同网络标号表示它们是连接在一起的,因此数码管的8 个段选口(A-DP)是连接在STM32 的PC0-7 管脚上,这个和LED 模块电路是共用PC0-7 引脚的,因此控制数码管时也会控制LED,控制LED 也会控制数码管。由于开发板上使用的数码管是共阳,所以要点亮对应的数码管段,需要让PC 引脚输出一个低电平。

    本章我们所要实现的功能是让数码管间隔1 秒显示0-F。

软件设计

  • 数码管初始化函数

在工程中新建smg.c 文件,里面代码如下:

#include "smg.h"/************************************************************** 函数名: SMG_Init* 函数功能: 数码管初始化* 输入: 无* 输出: 无**************************************************************/void SMG_Init(){GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化GPIO/* 开启GPIO 时钟*/RCC_APB2PeriphClockCmd(SMG_PORT_RCC,ENABLE);/* 配置GPIO 的模式和IO 口*/GPIO_InitStructure.GPIO_Pin=SMG_PIN; //选择你要设置的IO 口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(SMG_PORT,&GPIO_InitStructure); /* 初始化GPIO */}

    SMG_Init()函数用来初始化蜂鸣器的端口及时钟,同样的在函数内我们看到有几个参数不是库函数内的,这种情况一般是我们自己定义的宏,通常放在对应的头文件内,我们打开smg.h,可以看到如下代码:

#ifndef _smg_H#define _smg_H#include "system.h"/* 数码管时钟端口、引脚定义*/#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)#define SMG_PORT_RCC RCC_APB2Periph_GPIOCvoid SMG_Init(void);//数码管初始化#endif

    里面就将数码管的GPIO 端口及管脚进行了宏定义,这样做是方便大家移植程序,只需要对这个宏修改就能实现数码管的初始化修改。

主函数

    我们打开工程中main.c 文件,里面代码如下:

/************************************************************* 函数名: main* 函数功能: 主函数* 输入: 无* 输出: 无************************************************************/int main(){  u8 i=0;  SysTick_Init(72);  LED_Init();  SMG_Init();  while(1)  {    for(i=0;i<16;i++)    {      GPIO_Write(SMG_PORT,(u16)(~smgduan[i]));      delay_ms(1000);    }  }}

    主函数实现的功能比较简单,首先将使用到的外设硬件进行初始化,然后进入while 循环,通过GPIO_Write 库函数将数码管段码数据发送到数码管段选口,我们将0-F 的段码数据存储在smgduan 数组内,这是共阴数码管的段码数据,而我们使用的数码管是共阳,只需要将此数据取反即可。smgduan 数组如下:

//0~Fu8 smgduan[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值