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

STM32 ———— 数码管简介

[复制链接]
feixiang20 发布时间:2018-1-16 18:12
本帖最后由 feixiang20 于 2018-1-16 20:34 编辑 - N; i; @3 p7 B' c! ]
# l! u2 P! N: D- Q5 [/ _
这次实验,我们将学习如何驱动数码管。在前面几章的学习中,我们掌握了 STM32 的 IO 口最基本的操作。 本次实验对 IO 口操作就不过多解释了,我们将实现数码管间隔 1 秒循环显示 0-f的功能 。
+ r9 |: g+ g8 H" l8 g- D' N) V. ~6 ^* i% e$ T/ p2 G
数码管简介% Q2 ]* [8 _5 f
数码管是一种半导体发光器件,其基本单元是发光二极管。数码管也称 LED数码管,不同行业人士对数码管的称呼不一样,其实都是同样的产品。数码管按段数可分为七段数码和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP)这个小数点可以更精确的表示数码管想要显示的内容;按能显示多少个(8)可分为 1位、2 位、3 位、4 位、5 位、6 位、7位等数码管。按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公极(COM)的数码管,共阳数码管在应用时应将公共极 COM 接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极 COM 接到地线 GND 上,当某一字段发光二极管的阳极为高电时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。. U, y& y6 Y5 Z, K( [) P9 j

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

& {% w9 p9 @" |# _数码管硬件电路% v  d5 n+ u6 V  v) q9 e8 C1 L# j

: f* ~9 p- Q4 v* G7 D! N 1.jpg
9 s. b- \( T, Z+ ^
; j: k0 l( R  c  l$ |& @上面的数码管原理图,我们将数码管的管脚接在单片机的 PC0-PC7 口的,也就是和前面的 led 管脚是一样的。
/ u) ]% H( r! w数码管初始化
8 ]- `/ t: N2 d1 A( Y4 ]0 c. O1 mvoid smg_init()
! c8 n, A# ^2 y$ K{
2 I5 O  |& }) q* xGPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化 GPIO& x3 P* [8 K- E  r
/* 开启 GPIO 时钟 */) d2 ]# |% L  [: R( n; B" H# }3 H
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);& l9 q: E; J! S- D
/* 配置 GPIO 的模式和 IO 口 */, `/ R- W4 J* P- ^+ h
GPIO_InitStructure.GPIO_Pin=smg_du; //选择你要设置的 IO 口
; l, B  k( \; ?2 bGPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;, ]1 h; }& g: K
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
$ \$ m* {  b+ w* E' J, w6 E( k. k" aGPIO_Init(GPIOC,&GPIO_InitStructure); /* 初始化 GPIO */( Z- ?, G; s- w) }; \. [$ x
}
# A- [5 P& ]0 z9 u* T( L. K/ @" J" Q, \
) j- a: u& m$ _0 U( N( z6 T( a- v0 q! n+ T
数码管端口定义
- F. ]# |7 ]9 c9 o#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( s0 c( S! f& ?; ?5 t, ~  o$ M6 T
5 P' i& h7 W( |  A( h+ D- D
, ^$ U& j/ @) F2 K8 x, U
数码管显示 函数1 m: Z. [% Q4 H4 I4 o5 ?* G4 ^$ `
void smg_display()  //静态数码管显示) r, K; Y* B2 p2 M# y$ ^' m
{ ' S- d" \( w0 N  f6 G
u8 i;. a2 a  U" u* N9 v( m# ?0 |8 ^
for(i=0;i<16;i++)* D9 j% R+ c  ]4 I) y0 V
{
$ Y2 K% U: b  b$ ^5 j* X" @GPIO_Write(GPIOC,(u16)(~smgdu));
! ]6 i: d( }$ |7 e5 z/ [, r9 b) ?delay_ms(1000);
0 C  q; S( U# u9 l- r}
0 T9 `7 l' s/ y& _6 N4 l2 d}7 R- S) y/ W0 f# t/ p
  T5 b" q1 }* B- ~5 C% O

* N) V* C0 M: }7 d( W8 p- `数码管的段选数据保存在数组 smgdu 内,如下 :" G3 `$ C0 W6 b& Z. T
u8 smgdu[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};//0~F 数码管段选数据由于使用的是共阳数码管,因此需要对其取反送入数码管显示。
. {+ U, ]7 [/ C, l( X7 f/ n; Y: J% n; i1 U; ]4 I# H2 H. f; O; c

& u( a0 P$ f1 L$ n5 d. D8 l主函数
$ a- C  n7 u/ N, u9 r& k1 k1 eint main()  T6 r1 u  w' r
{                  
1 P  L/ P- Y4 o3 X7 C' A        smg_init();         //数码管端口初始化函数
' o9 g5 }/ T8 E7 g! M" H        while(1)" r" Z9 i4 M8 k  w
        {3 s; c0 V/ p# P4 t) k$ F2 D: [
                smg_display();        //静态数码管显示0 a1 \! |  M% B( Z
        }        
6 p2 E, K+ d- O+ G, I7 ]- i0 j5 p& t; [}
. J; `: T+ b) X& f$ b  Y" C
" }) D2 d% S3 t0 k8 k  r! y6 `这次的历程分享的虽然简单,但是很实用,在以后的学习和实验中我们都离不来数码管作为显示,到后面我们学习完了RTC可以来做一个数码管的时钟。所以大家要加油哦。
8 [) w" N3 z1 C

评分

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