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

STM32 ———— 数码管简介

[复制链接]
feixiang20 发布时间:2018-1-16 18:12
本帖最后由 feixiang20 于 2018-1-16 20:34 编辑
+ ?7 g' @/ g* A. T3 |5 _/ }5 ~+ `: t2 ?" ^# ~
这次实验,我们将学习如何驱动数码管。在前面几章的学习中,我们掌握了 STM32 的 IO 口最基本的操作。 本次实验对 IO 口操作就不过多解释了,我们将实现数码管间隔 1 秒循环显示 0-f的功能 。- }: J# a4 ]8 ]2 p/ A+ Z0 h

( x3 j& x2 ]5 U# \: l: t2 B4 U2 @数码管简介. e3 V" y3 {$ u4 d- j9 D
数码管是一种半导体发光器件,其基本单元是发光二极管。数码管也称 LED数码管,不同行业人士对数码管的称呼不一样,其实都是同样的产品。数码管按段数可分为七段数码和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP)这个小数点可以更精确的表示数码管想要显示的内容;按能显示多少个(8)可分为 1位、2 位、3 位、4 位、5 位、6 位、7位等数码管。按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公极(COM)的数码管,共阳数码管在应用时应将公共极 COM 接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极 COM 接到地线 GND 上,当某一字段发光二极管的阳极为高电时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。
- q) `9 [% p$ U7 x, ~9 m( r6 I, }7 N: g8 s" ]

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

% k: M3 x4 Z6 D8 _9 g! q7 U数码管硬件电路
; d; Q' z2 C3 I) x2 j& A/ m
' m( |. ~4 \! s# G2 j 1.jpg 6 m% q: Y) k7 R- y

3 B. l) V0 ^0 I' J4 y4 D6 }) @( u9 W上面的数码管原理图,我们将数码管的管脚接在单片机的 PC0-PC7 口的,也就是和前面的 led 管脚是一样的。
% e3 g" a8 [4 `% d" u5 I数码管初始化
+ s3 C5 R3 V% G8 q/ O* ?void smg_init()
* S/ x5 s1 J6 s1 s% g: m{
4 V4 j: D4 h7 c3 G. sGPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化 GPIO3 l) K3 [/ r) M- L; X3 u
/* 开启 GPIO 时钟 */5 b: [" \0 e) `& s
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
: k% ^8 W) F. t/* 配置 GPIO 的模式和 IO 口 */' y1 P. w' b: T
GPIO_InitStructure.GPIO_Pin=smg_du; //选择你要设置的 IO 口% `# W: V0 L% p/ J' F- H) O# k
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
/ p. N6 c+ I: h% eGPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
& ~/ R' ~7 O& P$ l  W/ K! u" _GPIO_Init(GPIOC,&GPIO_InitStructure); /* 初始化 GPIO */
7 l4 D* E0 M2 D& e}2 F( N/ w6 ~7 U* ^

+ ]$ F  J1 E# m9 y9 F) H
9 U2 f: F3 N% [1 s/ V5 y数码管端口定义; F8 a, v  h2 m. ~; V5 g
#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% T9 Y4 p+ g, ?

) ]7 ?3 h2 ]3 P( \* M2 S
4 D9 j: T: u3 y数码管显示 函数9 x$ F* i5 {4 T( o, ]! M) Q
void smg_display()  //静态数码管显示+ S" c! `; c+ h' B
{
# [0 J5 a6 A9 h5 F6 O$ W' I  lu8 i;, t5 ?+ u5 K$ s6 F
for(i=0;i<16;i++)
, f' `! `( D: g9 Z, X$ L" C{( a6 i& _  |1 h  ?% Z0 t  y& T% q
GPIO_Write(GPIOC,(u16)(~smgdu));
5 h6 z% F: f8 N& J; udelay_ms(1000); 9 c# F1 V9 R. M3 m
}
2 h8 P$ \0 ?$ a4 V5 S1 z}
1 j. X& u- }0 A* F3 L
+ y6 Z2 R* |* L  O& D2 I
* ?2 _6 }' v! U数码管的段选数据保存在数组 smgdu 内,如下 :
  Z4 b) c* p, V% e: Tu8 smgdu[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};//0~F 数码管段选数据由于使用的是共阳数码管,因此需要对其取反送入数码管显示。
' p- B, o- R, E$ R; Q% ~6 I& \& R; S7 y
2 w9 X7 P8 P9 r) W1 V6 e! Y
主函数
1 D7 a( z0 x* _) Z/ Nint main()
9 e4 Q$ l9 i& v) u. V) f{                  5 v& {  ~* Y- S# t: z  P) V. V
        smg_init();         //数码管端口初始化函数6 W" h& ?% ?* m( S) u. @7 [
        while(1)
1 W2 J$ n0 l& F2 \4 z: d5 l) S) D        {0 E$ F" ^, f' s* A0 ?
                smg_display();        //静态数码管显示/ |) L# c2 j$ ?4 z2 }+ T
        }        
/ k! _) M1 S0 b. U- I- {}) g- Q8 r+ H  I+ T& o7 U3 L2 \

4 e8 p0 j. d6 [2 S$ ^这次的历程分享的虽然简单,但是很实用,在以后的学习和实验中我们都离不来数码管作为显示,到后面我们学习完了RTC可以来做一个数码管的时钟。所以大家要加油哦。- n! `: B2 w. R$ p7 v" O# }0 V0 t

评分

参与人数 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 手机版