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

STM32 ———— 数码管简介

[复制链接]
feixiang20 发布时间:2018-1-16 18:12
本帖最后由 feixiang20 于 2018-1-16 20:34 编辑
" G" V2 [, n7 @+ h$ W7 x3 {8 \
+ P: U# q! X2 n; }这次实验,我们将学习如何驱动数码管。在前面几章的学习中,我们掌握了 STM32 的 IO 口最基本的操作。 本次实验对 IO 口操作就不过多解释了,我们将实现数码管间隔 1 秒循环显示 0-f的功能 。3 y4 l* }7 Q4 ?( U! v
0 r$ v  _7 x, N5 J; q
数码管简介& j; P; i, }1 Q* z' L, J0 X0 \
数码管是一种半导体发光器件,其基本单元是发光二极管。数码管也称 LED数码管,不同行业人士对数码管的称呼不一样,其实都是同样的产品。数码管按段数可分为七段数码和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP)这个小数点可以更精确的表示数码管想要显示的内容;按能显示多少个(8)可分为 1位、2 位、3 位、4 位、5 位、6 位、7位等数码管。按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公极(COM)的数码管,共阳数码管在应用时应将公共极 COM 接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极 COM 接到地线 GND 上,当某一字段发光二极管的阳极为高电时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。
! Y8 Q( O( B1 X5 m1 L- v3 c; |' l; Z) [

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

' U6 _: {$ u  `) I- a8 i4 Z1 n  g数码管硬件电路
# }0 B6 O( \! }( g0 e0 q- l
3 k8 X2 _/ f0 ^; U 1.jpg
( L! p2 H2 i8 {9 j9 w7 Z- \7 b) l! a- \3 S) ?8 ^' A
上面的数码管原理图,我们将数码管的管脚接在单片机的 PC0-PC7 口的,也就是和前面的 led 管脚是一样的。
4 x( K. P5 @7 `: |; f数码管初始化
4 h2 C6 X8 k% P8 ^void smg_init()
3 [3 q0 v, W/ A# M$ `{
7 u; y5 p# V# u9 ?9 N" LGPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化 GPIO
: k) [0 B: N. @; c/* 开启 GPIO 时钟 */0 g: V2 A  D; g9 z0 L
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);# j* k- }  d. ?0 \
/* 配置 GPIO 的模式和 IO 口 */0 S! A, ^) {: i% L' ]: j( [
GPIO_InitStructure.GPIO_Pin=smg_du; //选择你要设置的 IO 口
( t# e( u1 K6 ]) m5 E7 Y9 ?9 d! ZGPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;2 S5 G4 {' Z% O5 [4 E  Y+ B
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
8 z' x6 c& E- ~* RGPIO_Init(GPIOC,&GPIO_InitStructure); /* 初始化 GPIO */
/ f& _7 N2 N6 Y- M$ t}8 M+ s. U7 j7 B) u- t. R
9 X* c8 |1 g6 _
$ o4 f) V8 e1 ?% D
数码管端口定义% M/ T% y: A3 }0 u% Z8 a% e$ S
#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
. G0 h) n* d3 K+ s: u" H7 T) `  l, m/ h* z* D0 h. y
# ^9 x9 f  n% P; d
数码管显示 函数! t) I( z8 G( d: v8 p
void smg_display()  //静态数码管显示
2 J- f$ h! C, l8 e' |{
0 a- O; a+ e- X1 Eu8 i;
( f" w- e6 ~/ Q) @" yfor(i=0;i<16;i++)% s( b& }0 m! v5 g4 y" e" `
{0 z+ D% ~" ]( U: H6 k: o
GPIO_Write(GPIOC,(u16)(~smgdu));8 |- n# y( v* m2 \: ~9 g! w
delay_ms(1000); ; I! c) P+ n6 ]+ j3 N
} 3 J# R" ]  d1 Y
}% G( U( J& D. a* e, `
( l; O+ O$ m8 Z: e

1 _. l; b- |- u$ v数码管的段选数据保存在数组 smgdu 内,如下 :
2 @2 y2 Y3 I8 g9 t0 d% Gu8 smgdu[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};//0~F 数码管段选数据由于使用的是共阳数码管,因此需要对其取反送入数码管显示。
# e. P* o' H9 f- h" [" u/ [( C5 R) _4 u

# F! K, f; u, R. y3 [2 x0 _! o主函数
; R. e! t4 O' l* V: p6 W  uint main()
/ o1 g0 h" c$ J9 z{                  5 t; l$ i' U: G/ L) j' G
        smg_init();         //数码管端口初始化函数, ~( v- L" B" {+ T- T5 G, n% N
        while(1)+ R$ p  q* J3 ~& Q& o
        {
* C( h; ]7 R; Z. i# t9 R# @: G                smg_display();        //静态数码管显示) X* g$ @' }! [. I  [) M
        }        & s" f, M) H. i0 k
}$ v! W) d: F4 _, E+ `% f

' Y' @! B" d6 k, I2 ]6 v这次的历程分享的虽然简单,但是很实用,在以后的学习和实验中我们都离不来数码管作为显示,到后面我们学习完了RTC可以来做一个数码管的时钟。所以大家要加油哦。
! G5 `% Z, x8 B

评分

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

查看全部评分

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

举报

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

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版