友情提示:380元/半年,儿童学编程,就上码丁实验室。
我们要做什么
我们需要让七段数码管显示数字0到9,而且不需要额外的IC,只使用Arduino+七段数码管(共阴极)+七个330欧电阻+一些跳线
本例用到byte数据类型和位操作运算,请参考下文:
arduino Byte数据类型和按位运算
数码管连接图及电路图
七段数码管引脚图
电路图
代码如下:
int pins[]={10,9,8,7,6,5,4,3};
byte number[] = {
//ABCDEFG /dp
B11111100, // 0
B01100000, // 1
B11011010, // 2
B11110010, // 3
B01100110, // 4
B10110110, // 5
B10111110, // 6
B11100000, // 7
B11111110, // 8
B11110110, // 9
};
void display(int num)
{
for(int i=0;i<8;i++)
{
digitalWrite(pins[i],bitRead(number[num],i));
}
}
void setup()
{
for(int i=0;i<8;i++)
{
pinMode(pins[i],OUTPUT);
}
}
void loop()
{
for(int i=0;i<10;i++){
display(i);
delay(1000);
}
}
这里的小数点默认是没有点亮的,如果需要点亮小数点的话,只需要,使用函数bitWrite(numer[num],0,1)就好了。
代码如下:
int pins[]={10,9,8,7,6,5,4,3};
byte number[] = {
//ABCDEFG /dp
B11111100, // 0
B01100000, // 1
B11011010, // 2
B11110010, // 3
B01100110, // 4
B10110110, // 5
B10111110, // 6
B11100000, // 7
B11111110, // 8
B11110110, // 9
};
void display(int num,bool dot)
{
if(dot==true)
{
bitWrite(number[num],0,1);
}
else
{
bitWrite(number[num],0,0);
}
for(int i=0;i<8;i++)
{
digitalWrite(pins[i],bitRead(number[num],i));
}
}
void setup()
{
for(int i=0;i<8;i++)
{
pinMode(pins[i],OUTPUT);
}
}
void loop()
{
for(int i=0;i<10;i++){
display(i,1);
delay(1000);
}
for(int i=0;i<10;i++){
display(i,0);
delay(1000);
}
}