stm32数码管(STM32嵌入式-数码管实验)
这一章,我们将向大家介绍如何驱动数码管。在前面几章的学习中,我们掌握了 STM32 的 IO 口最基本的操作。 本章我们 IO 口操作就不过多解释了,在本章中,我们将实现数码管间隔 1 秒循环显示 0-F 的功能。
1.1 数码管简介
管是一种半导体发光器件,其基本单元是发光二极管。数码管也称 LED数码管,不同行业人士对数码管的称呼不一样,其实都是同样的产品。数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP)这个小数点可以更精确的表示数码管想要显示的内容;按能显示多少个(8)可分为 1 位、2 位、3 位、4 位、5 位、6 位、7位等数码管。按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极 COM 接到 5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极 COM 接到地线 GND 上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。led 数码管(LED Segment Displays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。led 数码管常用段数一般为 7 段有的另加一个小数点,还有一种是类似于 3位“ 1”型。位数有半位,1,2,3,4,5,6,8,10 位等等,led 数码管根据LED 的接法不同分为共阴和共阳两类,了解 LED 的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。图 2 是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。颜色有红,绿,蓝,黄等几种。led 数码管广泛用于仪表,时钟,车站,家电等场合。选用时要注意产品尺寸颜色,功耗,亮度,波长等。下面将介绍常用 LED 数码管内部引脚图.
1.2 数码管硬件电路
通过前面的学习,我们学会了如何使用 GPIO 输入输出模式,因此就可以很简单的根据电路来驱动数码管进行显示,首先我们来看在我们开发板上面数码管的原理图。
通过上面的原理图,我们可以看到数码管是接在单片机的 PC0-PC7 口的,也就是和前面的 LED 管脚是一样的。
1.3 例程程序
1) 初始化函数
1 /********************************************************************
***********
* 函 数 名 : smg_init
* 函数功能 : 数码管端口初始化函数
* 输 入 : 无
* 输 出 : 无
*********************************************************************
**********/
void smg_init()
{
GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初
始化 GPIO
/* 开启 GPIO 时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
/* 配置 GPIO 的模式和 IO 口 */
GPIO_InitStructure.GPIO_Pin=smg_duan; //选择你要设置的 IO 口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure); /* 初始化 GPIO */
}
2)输出端口定义
#define smg_duan (GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7)//PC0~PC7
3)数码管显示函数
1void static_smg_display()
//静态数码管显示
{
u8 i;
for(i=0;i<16;i )
{
GPIO_Write(GPIOC,(u16)(~smgduan[i]));
delay_ms(1000);
}
}
数码管的段选数据保存在数组 smgduan 内,如下:
u8 smgduan[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};//0~F 数码管段选数据由于使用的是共阳数码管,因此需要对其取反送入数码管显示。
4)主函数
1#include "public.h"
#include "smg.h"
/****************************************************************************
* Function Name : main
* Description : Main program.
* Input : None
* Output : None
* Return : None
****************************************************************************/
int main()
{
smg_init(); //ÊýÂë¹Ü¶Ë¿Ú³õʼ»¯º¯Êý
while(1)
{
static_smg_display(); //¾²Ì¬ÊýÂë¹ÜÏÔʾ
}
}
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com