1.前言
这个实验教程献给所有大一想努力的新手
2.欣赏成果
共阳数码管模拟值实验成果
3.安装对应软件
首先先安装对应软件Arduino
网址arduino.cc/en/software
4.学习软件的使用
安装结束,我们进入首页选择我们对应的开发板Arduino UNO

选择之后就会将UNO开发板作为默认**(UNO开发板适合初学者简单易上手)**

并将开发板连接到电脑**(注意:后面一定带有后缀,我前面买的盗版无法识别就没有后缀)**
如果没有出现开发板(com)请检查链接器是否连接好或者开发板是否接触不良
5.知识准备
i++
需要先保存变量的原始值到临时空间,再对变量自增,最后返回临时值(多一步临时值操作)
delay(1000)
是将函数延迟1000毫秒
digitalWrite(a,LOW);
如果该引脚通过pinMode()设置为输出模式(OUTPUT),您可以通过digitalWrite()语句将该引脚设置为HIGH(5伏特)或LOW(0伏特/GND)。
pinMode(i,OUTPUT);
通过pinMode()函数,你可以将Arduino的引脚配置为以下三种模式:
输出(OUTPUT)模式
输入(INPUT)模式
输入上拉(INPUT_PULLUP)模式
6.准备道具
一个面包板
八个220欧姆电阻
一个共阳极管
道具介绍

共阳数码管
是指将所有发光二极管的阳极接到一起形成公共阳极 (COM) 的数码管,共阳数码管在应用时应将公共极 COM 接到 + 5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。
共阴数码管
是指将所有发光二极管的阴极接到一起形成公共阴极 COM) 的数码管,共阴数码管在应用时应将公共极 COM 接到地线 GND 上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮
我们本次实验使用共阳极管

7.代码
int a = 2; // 定义数字接口2 连接a
int b = 3; // 定义数字接口3 连接b
int c = 4; // 定义数字接口4 连接c
int d = 5; // 定义数字接口5 连接d
int e = 6; // 定义数字接口6 连接e
int f = 7; // 定义数字接口7 连接f
int g = 8; // 定义数字接口8 连接g
int h = 9; // 定义数字接口9 连接h,也就是数码管中的dp
void setup() {
// put your setup code here, to run once:
int i;
for(i=2;i<=9;i++){
pinMode(i,OUTPUT); // 设置2~9号引脚为输出模式
}
}
void loop() {
// put your main code here, to run repeatedly:
digital_0(); // 显示数字0
delay(1000);
digital_1(); // 显示数字1
delay(1000);
digital_2(); // 显示数字2
delay(1000);
digital_3(); // 显示数字3
delay(1000);
digital_4(); // 显示数字4
delay(1000);
digital_5(); // 显示数字5
delay(1000);
digital_6(); // 显示数字6
delay(1000);
digital_7(); // 显示数字7
delay(1000);
digital_8(); // 显示数字8
delay(1000);
digital_9(); // 显示数字9
delay(1000);
}
// 显示数字0(电平反转:适配共阳极)
void digital_0(void){
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,HIGH);
digitalWrite(h,LOW);
}
// 显示数字1(电平反转)
void digital_1(void){
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(h,LOW);
}
// 显示数字2(电平反转)
void digital_2(void){
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,LOW);
digitalWrite(h,LOW);
}
// 显示数字3(电平反转)
void digital_3(void){
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,LOW);
digitalWrite(h,LOW);
}
// 显示数字4(电平反转)
void digital_4(void){
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(h,LOW);
}
// 显示数字5(电平反转)
void digital_5(void){
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,HIGH);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(h,LOW);
}
// 显示数字6(电平反转)
void digital_6(void){
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(h,LOW);
}
// 显示数字7(电平反转)
void digital_7(void){
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(h,LOW);
}
// 显示数字8(电平反转)
void digital_8(void){
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(h,LOW);
}
// 显示数字9(电平反转)
void digital_9(void){
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,HIGH);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(h,LOW);
}
接下验证 ,左上角的勾是验证符号

查看是否验证成功,然后上传

上传成功就可以欣赏到开头的结果了
8.心得
我认为这是个新的开始我也遇到了很多问题(见下面),但是当我成功做出来了后感到非常自豪,所以我认为在这个时代人类要不断走出自己的舒适圈,才能前进,如果觉得有帮助就请点一下赞,我火速更新下一章,我是FOX,励志做一个博学的萌新。
9.花絮
在看到代码的时候,我就已经在想代码有什么可以修改的了,于是这些问题就诞生了
我可否将代码与数组结合?
int nums[]{2,3,4,5,6,7,8,9};
const int SEGMENT_COUNT =8;
byte guan[10][8]={
{HIGH,HIGH,HIGH,HIGH,HIGH,HIGH,LOW,HIGH}, // 0(8个元素)
{LOW,HIGH,HIGH,LOW,LOW,LOW,LOW,HIGH}, // 1(8个元素)
{HIGH,HIGH,LOW,HIGH,HIGH,LOW,HIGH,HIGH}, // 2(8个元素)
{HIGH,HIGH,HIGH,HIGH,LOW,LOW,HIGH,HIGH}, // 3(8个元素)
{LOW,HIGH,HIGH,LOW,LOW,HIGH,HIGH,HIGH}, // 4(8个元素)
{HIGH,LOW,HIGH,HIGH,LOW,HIGH,HIGH,HIGH}, // 5(8个元素)
{HIGH,LOW,HIGH,HIGH,HIGH,HIGH,HIGH,HIGH}, // 6(8个元素)
{HIGH,HIGH,HIGH,LOW,LOW,LOW,LOW,HIGH}, // 7(8个元素)
{HIGH,HIGH,HIGH,HIGH,HIGH,HIGH,HIGH,HIGH}, // 8(8个元素)
{HIGH,HIGH,HIGH,HIGH,LOW,HIGH,HIGH,HIGH} // 9
};
void setup(){
for(int i=0;i<SEGMENT_COUNT;i++){
pinMode(nums[i],OUTPUT);
}
}
void loop(){
for(int s=0;s<SEGMENT_COUNT;s++){
displayNumber(s);
delay(1000);
}
}
void displayNumber(int d){
if(d<0||d>9){
return;
}
for(d=0;d<9;d++){
digitalWrite(nums[i],guan[d][i]);
}
}
知识补充
- 段引脚数组
nums:把原来分散定义的 a-h 引脚整合到一
个数组中,方便循环操作,减少重复代码。 - 段码表
guan
:
二维数组,第一维表示数字(0-9),第二维表示对应段
的电平
把原来 10 个函数里的电平值集中存储,一目了然,修改
时只需改数组值 - 通用显示函数
displayNumber()
:
接收数字参数,先做范围检查(避免数组越界)
通过循环遍历段引脚和段码,自动设置每个引脚的电平 - 简化的 loop 函数:用一个 for 循环遍历 0-9,调用通用显示
函数,替代原来重复调用 10 个函数的写法
1. 二维数组定义格式:
数据类型 数组名[行数][列数],比如
nums[3][4]。
2. 访问元素格式:
int
数组名[行下标][列下标],下标从 0 开始计
数。
3. 遍历二维数组通常用嵌套 for 循环,外层控行、内层控列。
想法二:我一开始以为它是阴极管
结果就是一直不亮,最后我直接去问豆包,,然后发现我买的是阳极管,直接裂开,阴极管和阳极管一定要看好啊,阴极管就接GND引脚接口,如果是阳极管就接5V,一定要分清楚!!!
1万+

被折叠的 条评论
为什么被折叠?



