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

STM32 ———— 数码管简介

[复制链接]
feixiang20 发布时间:2018-1-16 18:12
本帖最后由 feixiang20 于 2018-1-16 20:34 编辑
# V' @3 ?# p% M. n! G
9 z8 R# r$ D+ l; k- d( \3 L  q1 E, A" }这次实验,我们将学习如何驱动数码管。在前面几章的学习中,我们掌握了 STM32 的 IO 口最基本的操作。 本次实验对 IO 口操作就不过多解释了,我们将实现数码管间隔 1 秒循环显示 0-f的功能 。; @9 L- T; {4 D+ R) A0 C$ B

$ _8 u, `9 ?0 A* d数码管简介
" c8 Y+ p& m0 Z6 d7 R数码管是一种半导体发光器件,其基本单元是发光二极管。数码管也称 LED数码管,不同行业人士对数码管的称呼不一样,其实都是同样的产品。数码管按段数可分为七段数码和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP)这个小数点可以更精确的表示数码管想要显示的内容;按能显示多少个(8)可分为 1位、2 位、3 位、4 位、5 位、6 位、7位等数码管。按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公极(COM)的数码管,共阳数码管在应用时应将公共极 COM 接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极 COM 接到地线 GND 上,当某一字段发光二极管的阳极为高电时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。
! B# d# P' r: Y) N3 Y5 `! q. i% }  b
8 ^  ?% g5 f5 k  ~4 U  A
: `" ?. s/ \9 O4 Y, \( wled 数码管(LED Segment Displays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。led 数码管常用段数一般为 7 段有的另加一个小数点,还有一种是类似于 3位“+1”型。位数有半位,1,2,3,4,5,6,8,10 位等等,led 数码管根据LED 的接法不同分为共阴和共阳两类,了解 LED 这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。图 2 是共阴和共阳极数码管的内部电路,它们的发光原理是一样的只是它们的电源极性不同而已。颜色有红,绿,蓝,黄等几种。led 数码管广泛用于仪表,时钟,车站,家电等场合。选用时要注意产品尺寸颜色,功耗,亮度,波长等。
& ^) c3 O1 j& [0 c+ e* e- c: }1 N5 a9 Q: N
数码管硬件电路
+ j6 i0 W3 I9 A$ w4 {) t0 U. t; F3 T! q
1.jpg 7 P3 b' X8 `7 Z4 g1 Y- C1 J  A# e
9 S% `3 X0 n, L; A. w% ~
上面的数码管原理图,我们将数码管的管脚接在单片机的 PC0-PC7 口的,也就是和前面的 led 管脚是一样的。
* b3 g  v1 @/ N, T5 n- L0 X# _数码管初始化
6 u! U# Y+ W" U" V- mvoid smg_init()
9 }* C2 a- w- O4 F. C{5 j  T" D* L, P& e
GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化 GPIO. {) F) ]& l9 B* ?7 ^* K
/* 开启 GPIO 时钟 */  s: t0 g& r: y. P
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);& z7 t( d' X8 w+ J) _( r
/* 配置 GPIO 的模式和 IO 口 */2 j5 C$ w4 ?4 N3 h: E
GPIO_InitStructure.GPIO_Pin=smg_du; //选择你要设置的 IO 口( a" z0 b2 t0 p6 F# U; O1 B: i
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
* O3 V2 _5 e9 |/ p/ J0 `GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
4 F) y) V6 O! {8 Y$ Y4 O! ]GPIO_Init(GPIOC,&GPIO_InitStructure); /* 初始化 GPIO */
. A( t% n+ y; M$ e" d}7 c4 `; k  R! g+ J$ x

2 [$ W4 K( i# w5 \( J0 D6 h  x4 C
% s  |+ z, |, Z  ]4 l& b数码管端口定义, u3 Z: h. @  r- j8 V' A) X" {
#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
, n3 N. ?+ {) e& E/ k
6 s+ K' @, G  ~8 P+ }
$ d! @( |) _! r, z数码管显示 函数
: K. b+ |2 s+ [9 @' nvoid smg_display()  //静态数码管显示+ L4 w) e8 B8 @) N
{
1 B4 {* [9 ?5 u: B; h% u+ Ou8 i;4 m( J: }6 Q; \& K
for(i=0;i<16;i++)) K/ k  `# m9 h1 B
{( ]: ~3 I+ u9 V% h$ i
GPIO_Write(GPIOC,(u16)(~smgdu));. p) l7 W5 {* x
delay_ms(1000);
- @3 C2 i/ }1 g5 B3 r$ }} 5 @: t8 V' L% i4 A6 ]6 a% K
}" f# t# r. P8 @9 B+ x, q! G

. u8 a3 K( Y5 o8 Q% E1 T7 n) v$ O1 v; v& m  T$ {: Q  r
数码管的段选数据保存在数组 smgdu 内,如下 :
3 B; o/ G, o, d; g" ?; t& ru8 smgdu[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};//0~F 数码管段选数据由于使用的是共阳数码管,因此需要对其取反送入数码管显示。; i% h7 P, ~3 ^9 y( R9 t2 H) _- s
/ C. R' I1 ~6 E1 U' T8 G& X

& ?- K; L; w5 L6 i' [# M主函数
9 s, p4 b4 O) Y4 S8 r) S. Aint main(). f% X" \7 x+ d" L" [6 u
{                  
# ]3 z9 t3 b. y; H+ o$ V        smg_init();         //数码管端口初始化函数
2 M! G2 E7 ?1 H+ @8 l        while(1)
+ U5 D% f/ M6 I4 Y5 y5 G1 P: Y        {* F* B1 H- X4 v$ U5 i+ y2 r' b
                smg_display();        //静态数码管显示
/ |7 n, ~# b% X2 u        }        
9 n0 v3 d+ z* R/ c}
. o2 Z3 m0 N* `; e7 E+ z
5 ~" f0 q+ N; U' v% _这次的历程分享的虽然简单,但是很实用,在以后的学习和实验中我们都离不来数码管作为显示,到后面我们学习完了RTC可以来做一个数码管的时钟。所以大家要加油哦。8 Y6 P2 _5 _) W8 ?) Y8 p

评分

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

查看全部评分

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

举报

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

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版