在线时间15 小时
UID3660373
ST金币292
蝴蝶豆0
注册时间2020-7-18
该用户从未签到
中级会员
- 最后登录
- 2020-9-29
|
关键词: 51 ; STM32 ;Arduino ;Stduino单片机; Stduino UNO和Nano;四位数码管
从大部分开始,我们将介绍更多的电子元件。其中大多数大家可能并不熟悉,但是如果你把前面的 37 个传感器都测试过了,这些对你来说不过是稍微复杂,繁琐一些。 学习这些扩展的电子元件,不需要从头到尾学习一遍。就是在你需要用到它的时候,知道有这么个东西,然后再来看看就好。原理很简单,会用就行。 说明:数码管(七段显示器)能够显示 0〜9 十个字符,生活中进场在一些只需要显示数字的地方出现,例如电子秤,食堂刷卡终端,电梯楼层显示等等。数码管有多种型号,其中显示4 位数的为四位数码管。 在讲解四位数码管之前,我们先介绍一位数码管,也是最简单的一种。如下图: 一位数码管的数字共有七段,每一段实际是一独立的 LED ,因此数码管也被称为七段数码管。通过控制LED 输入的高低电平控制亮灭,从而变化出0〜9 这9 个字符(如下图)。 共阳极,即七段 LED 公共同一个阳极,那么通过控制每一段是否接地来控制亮灭(接地,则电路导通,点亮;反之交替)。共波长,即七段LED 共享同一个波导接地,然后通过控制每一段输入的高电平控制亮灭(如下图)。 有一些数码管带有 IC ,能够通过集成电路进行控制。但是这个数码管比较原始,一个七段数码管需要更长的IO 口,需要我们自己手动写每个一个字符的高配置。 四位数码管就是集合了四个单位的数码管,其也包括共阴型与共阳型两种。我们知道七段数码管需要插孔 IO 口,四位数码管每个数码管的数字不同,那么就需要进行单独控制。所以应该需要32 个IO 口,显然这会占用过多的端口。 实际,四位数码管每只有一个数码管显示字形,其他三个数码管断电不显示。四个数码管依次循环显示,当频率足够大时,人眼由于视觉残留的缘故,就会觉得四个数码管是同时点亮的,看到连续的显示效果。这就好像,,每个帧都是不同的,但是播放的速度足够快( 24 帧每秒),人眼就会觉得画面动起来了。 这样,四位数码管只需要连接 12 个插座。其中有时用来控制单位数码管的8 个LED ,称为段码;另外四个用来控制选择点亮和熄灭的数码管(每次只有一个点亮)。
实验目的:点亮数码管,并实时显示程序运行的时间(秒)。
器材: Stduino纳米/ UNO; 4 位数码管;杜邦线;面包板; 220 Ω电阻
电路连接:
代码展示: - int second = 0;
- void setup()
- {
- // put your setup code here, to run once:
- pinMode(1,OUTPUT);//A
- pinMode(2,OUTPUT);//B
- pinMode(3,OUTPUT);//C
- pinMode(4,OUTPUT);//D
- pinMode(5,OUTPUT);//E
- pinMode(6,OUTPUT);//F
- pinMode(7,OUTPUT);//G
- pinMode(8,OUTPUT);//DP
-
- pinMode(19,OUTPUT);//1
- pinMode(18,OUTPUT);//2
- pinMode(17,OUTPUT);//3
- pinMode(16,OUTPUT);//4
-
-
- digitalWrite(19,LOW);
- digitalWrite(18,LOW);
- digitalWrite(17,LOW);
- digitalWrite(16,LOW);
- }
- //void SevSegInit()
- void showNum(int num, bool point=false)
- { if(point)
- {
- digitalWrite(8,HIGH);//DP,TRUE
- }else{
- digitalWrite(8,LOW);//DP,FALSE
- }
- switch(num)
- {
- case 0:
- digitalWrite(1,HIGH);
- digitalWrite(2,HIGH);
- digitalWrite(3,HIGH);
- digitalWrite(4,HIGH);
- digitalWrite(5,HIGH);
- digitalWrite(6,HIGH);
- digitalWrite(7,LOW);
- break;
-
- case 1:
- digitalWrite(1,LOW);
- digitalWrite(2,HIGH);
- digitalWrite(3,HIGH);
- digitalWrite(4,LOW);
- digitalWrite(5,LOW);
- digitalWrite(6,LOW);
- digitalWrite(7,LOW);
- break;
-
- case 2:
- //2
- digitalWrite(1,HIGH);//A
- digitalWrite(2,HIGH);//B
- digitalWrite(3,LOW);//C
- digitalWrite(4,HIGH);//D
- digitalWrite(5,HIGH);//E
- digitalWrite(6,LOW);//F
- digitalWrite(7,HIGH);//G
- break;
-
- case 3:
- //3
- digitalWrite(1,HIGH);//A
- digitalWrite(2,HIGH);//B
- digitalWrite(3,HIGH);//C
- digitalWrite(4,HIGH);//D
- digitalWrite(5,LOW);//E
- digitalWrite(6,LOW);//F
- digitalWrite(7,HIGH);//G
-
- break;
-
- case 4:
- digitalWrite(1,LOW);//A
- digitalWrite(2,HIGH);//B
- digitalWrite(3,HIGH);//C
- digitalWrite(4,LOW);//D
- digitalWrite(5,LOW);//E
- digitalWrite(6,HIGH);//F
- digitalWrite(7,HIGH);//G
- break;
-
- case 5:
- digitalWrite(1,HIGH);//A
- digitalWrite(2,LOW);//B
- digitalWrite(3,HIGH);//C
- digitalWrite(4,HIGH);//D
- digitalWrite(5,LOW);//E
- digitalWrite(6,HIGH);//F
- digitalWrite(7,HIGH);//G
- break;
- case 6:
- digitalWrite(1,HIGH);//A
- digitalWrite(2,LOW);//B
- digitalWrite(3,HIGH);//C
- digitalWrite(4,HIGH);//D
- digitalWrite(5,HIGH);//E
- digitalWrite(6,HIGH);//F
- digitalWrite(7,HIGH);//G
- break;
- case 7:
- digitalWrite(1,HIGH);//A
- digitalWrite(2,HIGH);//B
- digitalWrite(3,HIGH);//C
- digitalWrite(4,LOW);//D
- digitalWrite(5,LOW);//E
- digitalWrite(6,LOW);//F
- digitalWrite(7,LOW);//G
- break;
- case 8:
- digitalWrite(1,HIGH);//A
- digitalWrite(2,HIGH);//B
- digitalWrite(3,HIGH);//C
- digitalWrite(4,HIGH);//D
- digitalWrite(5,HIGH);//E
- digitalWrite(6,HIGH);//F
- digitalWrite(7,HIGH);//G
- break;
- case 9:
- digitalWrite(1,HIGH);//A
- digitalWrite(2,HIGH);//B
- digitalWrite(3,HIGH);//C
- digitalWrite(4,HIGH);//D
- digitalWrite(5,LOW);//E
- digitalWrite(6,HIGH);//F
- digitalWrite(7,HIGH);//G
- break;
- }
- }
- void setNum(int num)
- {
-
- int d0=num%10;
- int d1=(num%100)/10;
- int d2=(num/100)%10;
- int d3=num/1000;
-
-
- int add=250;
-
- digitalWrite(19,LOW);
- for(int i=add;i--;i<0)
- {
- showNum(d3);
- }
- digitalWrite(19,HIGH);
-
- digitalWrite(18,LOW);
- for(int i=add;i--;i<0)
- {
- showNum(d2);
- }
- digitalWrite(18,HIGH);
-
- digitalWrite(17,LOW);
- for(int i=add;i--;i<0)
- {
- showNum(d1);
- }
- digitalWrite(17,HIGH);
-
- digitalWrite(16,LOW);
- for(int i=add;i--;i<0)
- {
- showNum(d0);
- }
- digitalWrite(16,HIGH);
-
- }
-
- void loop()
- {
- // put your main code here, to run repeatedly:
- setNum(second);
- second=millis()/1000;
-
- }
复制代码 实验效果:
Stduino IDE是一款面向32位处理器快速入门学习的集成开发平台,目前已经支持Arduino_Core_STM32框架,集聚快捷、高效、免费、开源、易得于一身,软件还集成了GDB调试功能。
IDE当前支持的功能有:
- GDB调试
- 封装库下载安装
- 代码自动补全提示
- 中英文模式
- UTF-8\GBK编码格式
- 代码快速格式化
- SWD\串口程序下载&调试(已验证)
- DFU程序下载方式(待验证)
- USB HID程序下载方式(待验证)
- maple DFU程序下载方式(待验证)
- maple DFU2程序下载方式(待验证)
- MassStorage程序下载方式(待验证)
更多功能细节请前往www.stduino.com进行了解
已经支持的芯片&板型列表:
- Stduino UNO&Nano
- Nucleo 144 boards
- Nucleo 64 boards
- Nucleo 32 boards
- Discovery boards
- Eval boards
- STM32MP1 series coprocessor boards
- Generic STM32F0 boards
- Generic STM32F1 boards
- Generic STM32F3 boards
- Generic STM32F4 boards
- Generic STM32H7 boards
- Generic STM32L0 boards
- 3D printer boards
- LoRa boards
- Electronic Speed Controller boards
- Generic flight controllers
- Garatronics boards
- Midatronics boards
更多功能集成正在进行中~
|
|