本篇文章由 VeriMake 旧版论坛中备份出的原帖的 Markdown 源码生成
原帖标题为:七段数码管|显示数字
原帖网址为:https://verimake.com/topics/182(旧版论坛网址,已失效)*
原帖作者为:hi(旧版论坛 id = 182)
原帖由作者初次发表于 2021-03-30 13:45:35
七段数码管
之所以称之为七段数码管,是因为它内部是由七个小的led组成,数码管分共阳极和共阴极,常见的数码管还有一位的,两位的,四位的等等,不同位的数码管有不同的引脚,连接方法也有略微差别,可以在网上搜索相应的脚位图进行连接,本次我采用的是一位共阴数码管,大家可以上网搜索对应数码管的脚位进行连接。
准备材料:
NanoC *1,数据线 *1,400孔面包板 *1,170孔面包板 *1,一位七段数码管 *1,330Ω电阻 *7,公对公杜邦线 *15。
接线图:
a — 7(330Ω电阻)
b — 6(330Ω电阻)
c — 5(330Ω电阻)
d — 10(330Ω电阻)
e — 11(330Ω电阻)
f — 8(330Ω电阻)
g — 9(330Ω电阻)
dp — 未连接,不需要
5V — 5V
数码管的不同脚位分别连接数字引脚,代码中会根据不同数字点亮对应的数码管段。
代码
//设置控制各段的数字IO脚,具体几号引脚对应哪一段,来源为数码管官方引脚图。
int pin_a = 7;
int pin_b = 6;
int pin_c = 5;
int pin_d = 10;
int pin_e = 11;
int pin_f = 8;
int pin_g = 9;
int pin_p = 4;
//根据共阴极数码管段码表定义0~9显示的各段开关状态
int numTable[10][8] = {
//1为点亮,0为关闭
//a b c d e f g dp
{1, 1, 1, 1, 1, 1, 0, 0}, //0
{0, 1, 1, 0, 0, 0, 0, 0}, //1
{1, 1, 0, 1, 1, 0, 1, 0}, //2
{1, 1, 1, 1, 0, 0, 1, 0}, //3
{0, 1, 1, 0, 0, 1, 1, 0}, //4
{1, 0, 1, 1, 0, 1, 1, 0}, //5
{1, 0, 1, 1, 1, 1, 1, 0}, //6
{1, 1, 1, 0, 0, 0, 0, 0}, //7
{1, 1, 1, 1, 1, 1, 1, 0}, //8
{1, 1, 1, 1, 0, 1, 1, 0}, //9
};
void setup()
{
for (int i = 4; i <= 11; i++)
{
pinMode(i, OUTPUT); //设置4~11引脚为输出模式
}
}
void loop()
{
for (int i = 0; i < 10; i++)//以此显示数字0到9
{
digitalWrite(pin_a, numTable[i][0]); //设置a 引脚的电平
digitalWrite(pin_b, numTable[i][1]); //设置b 引脚的电平
digitalWrite(pin_c, numTable[i][2]); //设置c 引脚的电平
digitalWrite(pin_d, numTable[i][3]); //设置d 引脚的电平
digitalWrite(pin_e, numTable[i][4]); //设置e 引脚的电平
digitalWrite(pin_f, numTable[i][5]); //设置f 引脚的电平
digitalWrite(pin_g, numTable[i][6]); //设置g 引脚的电平
digitalWrite(pin_p, numTable[i][7]); //设置dp引脚的电平
delay(200);
}
}
运行结果
运行后结果是数码管顺序显示从0到9的数字,转换成gif时速度过快所以图中显示的数字不全,但运行是正确的。这个运行结果中接线时没有加电阻,为防止里面的小段led不被烧坏,建议大家按照接线图里面的连接,加上电阻。