你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 ———— 数码管简介

[复制链接]
feixiang20 发布时间:2018-1-16 18:12
本帖最后由 feixiang20 于 2018-1-16 20:34 编辑 : l/ P: A+ N6 M' E0 n

1 \- f; n: o9 j! K$ {这次实验,我们将学习如何驱动数码管。在前面几章的学习中,我们掌握了 STM32 的 IO 口最基本的操作。 本次实验对 IO 口操作就不过多解释了,我们将实现数码管间隔 1 秒循环显示 0-f的功能 。4 c7 B9 G% e  k# J' {$ a
5 K% ^; h% O& V7 x3 n
数码管简介
- R- k# I" @& t2 K# T, C数码管是一种半导体发光器件,其基本单元是发光二极管。数码管也称 LED数码管,不同行业人士对数码管的称呼不一样,其实都是同样的产品。数码管按段数可分为七段数码和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP)这个小数点可以更精确的表示数码管想要显示的内容;按能显示多少个(8)可分为 1位、2 位、3 位、4 位、5 位、6 位、7位等数码管。按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公极(COM)的数码管,共阳数码管在应用时应将公共极 COM 接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极 COM 接到地线 GND 上,当某一字段发光二极管的阳极为高电时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。! p6 R7 A+ K9 Z2 |6 ~: w

% H1 W$ N; O* n' v6 t5 o
5 H% p) e( P* s$ S: a+ e" aled 数码管(LED Segment Displays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。led 数码管常用段数一般为 7 段有的另加一个小数点,还有一种是类似于 3位“+1”型。位数有半位,1,2,3,4,5,6,8,10 位等等,led 数码管根据LED 的接法不同分为共阴和共阳两类,了解 LED 这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。图 2 是共阴和共阳极数码管的内部电路,它们的发光原理是一样的只是它们的电源极性不同而已。颜色有红,绿,蓝,黄等几种。led 数码管广泛用于仪表,时钟,车站,家电等场合。选用时要注意产品尺寸颜色,功耗,亮度,波长等。: S8 ]! B% `8 ~: _% e- A8 K% P

. M3 v5 I7 J0 l# u1 h, D数码管硬件电路
5 k- V# `7 y# g3 V4 I  @! R8 R. t) T: B9 B
1.jpg . K- w' J. P, r% x5 j# T/ H/ {7 A0 B

8 n( @! a) J/ t( s上面的数码管原理图,我们将数码管的管脚接在单片机的 PC0-PC7 口的,也就是和前面的 led 管脚是一样的。
- c. [! r& w2 r- p4 h# ]+ i! q8 W数码管初始化/ M" E6 B0 ~" s3 `' u/ m$ G
void smg_init()
# P$ V% }$ M. X# d4 m# y% R( E" v1 e{' H/ P" M- c+ b4 L8 B  n# V% T
GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化 GPIO3 S( p, B8 L9 b! y6 o6 L
/* 开启 GPIO 时钟 */! w8 @0 G( `7 e/ b4 c" u  ^( a
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);. k4 B2 J$ y* K- s. U9 m& S
/* 配置 GPIO 的模式和 IO 口 */
1 E* g+ ?) O; k; F. J3 S' o. lGPIO_InitStructure.GPIO_Pin=smg_du; //选择你要设置的 IO 口  x: x) R$ F: o0 `, F- {
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
0 P: v" z3 ?( ?. a% q$ ^GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
/ L: s$ R0 M  q- [9 U7 oGPIO_Init(GPIOC,&GPIO_InitStructure); /* 初始化 GPIO */. K0 O& ?. S1 D- Z- X3 q
}
5 X* i  t' f& s
/ M& L% H& f8 z+ F9 u/ O4 i) R( B
; J& y5 T4 {! b8 M* p数码管端口定义
: B% T) d. {9 H" y$ L#define smg_du    (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
! t+ Y, ?6 j- ?, @
( M6 F. e$ z2 }* i" X( G0 t0 b: A' Q, Y
数码管显示 函数
: O7 E) T& ]' Gvoid smg_display()  //静态数码管显示
& J' p% i6 j0 w7 N  q% ?% B& i{ + v0 f  K. g" K, }
u8 i;
% l7 G; S9 E% X' t- K! y+ Jfor(i=0;i<16;i++)
, E- L" {6 E, R  h3 s6 W- n6 [{; [: }7 h3 e% r% ]" O' z
GPIO_Write(GPIOC,(u16)(~smgdu));
0 v. @& _' `4 [delay_ms(1000); 1 b- R0 W' G0 L- N
} ! X# X* X, [% y) @9 z& ^
}
2 k( c% x0 B: C$ i( g, o' m$ T! D$ v% q9 N
3 b2 T9 z5 h0 `: `* N
数码管的段选数据保存在数组 smgdu 内,如下 :7 f+ U8 N. z- t6 L
u8 smgdu[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};//0~F 数码管段选数据由于使用的是共阳数码管,因此需要对其取反送入数码管显示。/ Q3 w* h- `/ ]- l5 E

7 c! P: R( k! q% N. H
: x7 X2 A) u% h  k  D) Y2 C# N主函数
9 G# t* k3 Q, f2 b' I1 Lint main()5 ^9 e) p, W" h" Y( G
{                  " M0 S# a: p/ L" I+ _& L
        smg_init();         //数码管端口初始化函数
3 `( ~5 b% l- ], u; n+ F        while(1)/ G3 B( F; ]/ S
        {
4 _/ G, Y9 m7 X9 x3 b  K/ d                smg_display();        //静态数码管显示
4 b3 ?5 J6 C7 U; B1 a        }        
. P3 a: x, Z% J- {" @, Q}
0 X/ ^5 v& C" e7 h) c+ b/ s0 J' Q! w% b$ j* ~  N, ^/ O
这次的历程分享的虽然简单,但是很实用,在以后的学习和实验中我们都离不来数码管作为显示,到后面我们学习完了RTC可以来做一个数码管的时钟。所以大家要加油哦。* a: J( Q6 U  S

评分

参与人数 1 ST金币 -5 收起 理由
Inc_brza -5 标题不合格,请别用“--------”做标题.

查看全部评分

收藏 评论1 发布时间:2018-1-16 18:12

举报

1个回答
cloudmr 回答时间:2018-3-24 22:57:16

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版