【基于STM32】Stduino拓展学习(一)四位数码管
本文转载自:http://www.stduino.com/forum.php?mod=viewthread&tid=63&extra=page%3D1=
关键词:
51、stm32、arduino、stduino单片机、stduino UNO&Nano、四位数码管
说明:
数码管(七段显示器)能够显示 0〜9 十个字符,生活中进场在一些只需要显示数字的地方出现,例如电子秤,食堂刷卡终端,电梯楼层显示等等。数码管有多种型号,其中显示4 位数的为四位数码管。
在讲解四位数码管之前,我们先介绍一位数码管,也是最简单的一种。如下图:
一位数码管的数字共有七段,每一段实际是一独立的 LED ,因此数码管也被称为七段数码管。通过控制LED 输入的高低电平控制亮灭,从而变化出0〜9 这9 个字符(如下图)。
共阳极,即七段 LED 公共同一个阳极,那么通过控制每一段是否接地来控制亮灭(接地,则电路导通,点亮;反之交替)。共波长,即七段LED 共享同一个波导接地,然后通过控制每一段输入的高电平控制亮灭(如下图)。
有一些数码管带有 IC ,能够通过集成电路进行控制。但是这个数码管比较原始,一个七段数码管需要更长的IO 口,需要我们自己手动写每个一个字符的高配置。
四位数码管就是集合了四个单位的数码管,其也包括共阴型与共阳型两种。我们知道七段数码管需要插孔 IO 口,四位数码管每个数码管的数字不同,那么就需要进行单独控制。所以应该需要32 个IO 口,显然这会占用过多的端口。
实际,四位数码管每只有一个数码管显示字形,其他三个数码管断电不显示。四个数码管依次循环显示,当频率足够大时,人眼由于视觉残留的缘故,就会觉得四个数码管是同时点亮的,看到连续的显示效果。这就好像,,每个帧都是不同的,但是播放的速度足够快( 24 帧每秒),人眼就会觉得画面动起来了。
这样,四位数码管只需要连接 12 个插座。其中有时用来控制单位数码管的8 个LED ,称为段码;另外四个用来控制选择点亮和熄灭的数码管(每次只有一个点亮)。
实验目的:
点亮数码管,并实时显示程序运行的时间(秒)。
器材:
Stduino纳米/ UNO; 4 位数码管;杜邦线;面包板; 220 Ω电阻
电路连接:
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">整数秒= 0; </font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">void setup()</font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">{
</font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> //将您的安装代码放在这里,可以运行一次:</font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> pinMode(1,OUTPUT); // A </font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> pinMode(2,OUTPUT); // B </font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> pinMode(3,OUTPUT); // C </font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> pinMode(4 ,OUTPUT); // D </font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> pinMode(5,OUTPUT); // E </font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> pinMode(6,OUTPUT); // F </font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> pinMode(7,OUTPUT); // G </font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> pinMode(8,OUTPUT); // DP </font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> pinMode(19 ,OUTPUT); // 1 </font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> pinMode(18,OUTPUT); // 2 </font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> pinMode(17,OUTPUT); // 3 </font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> pinMode(16,OUTPUT); // 4 </font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> digitalWrite(19,LOW); </font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> digitalWrite(18,LOW); </font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> digitalWrite(17,LOW); </font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> digitalWrite(16,LOW); </font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">} </font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">// void SevSegInit()</font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">void showNum(int num,bool point = false)</font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> {
if(point)</font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> {
</font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> digitalWrite(8,HIGH); // DP,TRUE </font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> } else {
</font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> digitalWrite(8,LOW); // DP,FALSE </font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> } </font></font>
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;"> switch(num)</font></font>
<font style=<