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

STM32 ———— 数码管简介

[复制链接]
feixiang20 发布时间:2018-1-16 18:12
本帖最后由 feixiang20 于 2018-1-16 20:34 编辑
+ O8 \& x2 T% }+ r) _3 Y; E) `
& u1 ]: ?; p  c. `# D' J这次实验,我们将学习如何驱动数码管。在前面几章的学习中,我们掌握了 STM32 的 IO 口最基本的操作。 本次实验对 IO 口操作就不过多解释了,我们将实现数码管间隔 1 秒循环显示 0-f的功能 。$ `$ F. h; S; O* H; X3 `: `" L: K
6 F. y/ Q( C; h; L, y0 G9 _, a
数码管简介
' [9 {2 K2 g4 `1 E+ X& v数码管是一种半导体发光器件,其基本单元是发光二极管。数码管也称 LED数码管,不同行业人士对数码管的称呼不一样,其实都是同样的产品。数码管按段数可分为七段数码和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP)这个小数点可以更精确的表示数码管想要显示的内容;按能显示多少个(8)可分为 1位、2 位、3 位、4 位、5 位、6 位、7位等数码管。按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公极(COM)的数码管,共阳数码管在应用时应将公共极 COM 接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极 COM 接到地线 GND 上,当某一字段发光二极管的阳极为高电时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。7 \- Z# V) O& t; F2 u- |! g/ {
' U/ C" S4 [9 W

; H. i' s) H& M& H2 p! gled 数码管(LED Segment Displays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。led 数码管常用段数一般为 7 段有的另加一个小数点,还有一种是类似于 3位“+1”型。位数有半位,1,2,3,4,5,6,8,10 位等等,led 数码管根据LED 的接法不同分为共阴和共阳两类,了解 LED 这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。图 2 是共阴和共阳极数码管的内部电路,它们的发光原理是一样的只是它们的电源极性不同而已。颜色有红,绿,蓝,黄等几种。led 数码管广泛用于仪表,时钟,车站,家电等场合。选用时要注意产品尺寸颜色,功耗,亮度,波长等。
' P, ~9 g9 Q5 E" m2 S  Z3 V( H: }0 w1 b. g- R( w3 @& v. q
数码管硬件电路+ F) f' I/ J# Y: s1 N
3 |2 X& m' \# A, A2 @- g. G
1.jpg
  x/ a% ~; L+ U; j- K7 H9 V1 b( p3 d; B  Y/ N8 T) v  z8 q! a
上面的数码管原理图,我们将数码管的管脚接在单片机的 PC0-PC7 口的,也就是和前面的 led 管脚是一样的。
8 C$ h5 R  d9 U: H0 j, c数码管初始化
/ A" ~' @& Z# B( N- h% ^2 ^! Xvoid smg_init()
; _9 Z) S4 b$ O8 i" t0 ]{
; i# Q; l- L6 \. s) a$ k. i1 iGPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化 GPIO4 r" w, g! h/ j7 u4 Y
/* 开启 GPIO 时钟 */" c* E+ R1 f' d) p  }1 k9 R
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
. ?7 Y: n5 e2 e7 R/* 配置 GPIO 的模式和 IO 口 */
' S  \$ D; l) J$ F' {GPIO_InitStructure.GPIO_Pin=smg_du; //选择你要设置的 IO 口7 H) e, y) u* O+ \
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;7 x8 S. H0 y! |9 R8 P8 E
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;4 I, \% q/ W% z1 d0 p$ ~: B
GPIO_Init(GPIOC,&GPIO_InitStructure); /* 初始化 GPIO */
2 w, G( m8 |0 ~! _9 i}9 i' |7 Y. {" e' Q% A
% b; D' t4 c( o8 @; K; M
$ I. t# P( O/ E. @% ]6 v
数码管端口定义+ S6 ], H3 }! R. l* I* c  R/ Y
#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~PC76 {8 M! E: M- B
8 X+ U: f( m0 U$ S5 [5 [/ ]
$ c7 o0 x- A# r
数码管显示 函数! q# s6 d' F% k  M7 m8 ~
void smg_display()  //静态数码管显示
: E# l4 {- k# Y) c1 J{
: ]1 U' W: H: N" @u8 i;
' x1 V7 A4 b" E, R+ zfor(i=0;i<16;i++)* R' y. [; A, |
{
$ p* X! t6 z, t- ^GPIO_Write(GPIOC,(u16)(~smgdu));
; G/ z0 e+ b& w) F  [4 y. B* Odelay_ms(1000);
  d; Z/ l1 u1 q} & c) n+ o6 u0 _
}
9 u- y' U$ O; o
, a  S; A* r* Q. O; L
+ a6 P; O7 I) E: ^数码管的段选数据保存在数组 smgdu 内,如下 :
' q; w3 V% X; F( C' S$ wu8 smgdu[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};//0~F 数码管段选数据由于使用的是共阳数码管,因此需要对其取反送入数码管显示。+ B3 E9 k! ~' C( }  H# B
  X, _# j3 ~, z: i
1 |* p8 j/ S$ b. X. X& v0 j
主函数
" N; _5 {7 x/ gint main()
7 j. T4 l7 I( \! _' [7 R{                  * I. w7 f0 [- I" A, O) m  a
        smg_init();         //数码管端口初始化函数# ?& X- N# Z( R% o- T( x
        while(1)! K9 o- v8 B8 [$ ?; u8 q1 J0 F) i
        {4 H: e% z, [5 Y* [- {( Y6 T
                smg_display();        //静态数码管显示
: J; C8 j: o; O8 z0 u        }        , B9 z, U+ x" n' R$ T
}# A6 x+ l; X" q8 `/ o
! e& \% t: b8 I5 ~7 p0 {$ m
这次的历程分享的虽然简单,但是很实用,在以后的学习和实验中我们都离不来数码管作为显示,到后面我们学习完了RTC可以来做一个数码管的时钟。所以大家要加油哦。3 u- N" m: c/ M! @( t( \

评分

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