目录
1.材料清单
2.实验原理
3.代码分析
4.总结
1.实验材料
材料清单 | 型号&数量 |
---|---|
arduino开发板 | UNO*1 |
数码管 | 5161BS(共阳极)*1 |
电阻 | 330Ω*1 |
导线 | 若干 |
2.实验原理
共阳极数码管原理图如下:
引脚分布图:
有了上面两张图,就可以动手连线了,A-G分别接在了板子上2-8引脚,搭建完成的板子是这样的:
废话不说,直接写代码。
3.代码分析
(完整代码)
unsigned char num[10][8]={{2,3,4,5,6,7},{3,4},{2,3,5,6,8},{2,3,4,5,8},{3,4,7,8},{2,4,5,7,8},{2,4,5,6,7,8},{2,3,4},{2,3,4,5,6,7,8},{2,3,4,7,8}};
void setup()
{
for(int i=2;i<9;i++)
{
pinMode(i,OUTPUT);
digitalWrite(i,HIGH);
}
}
void Display(char a)
{
unsigned char index=0;
while(num[a][index])
{
digitalWrite(num[a][index],LOW);
index++;
}
}
void loop()
{
Display(random(0,10));
delay(1000);
setup();
}
分析:
我的思路是这样的,了解数码管的都知道无非是让它对应的脚输出低电平即可(共阳极),那么我就把要变化的脚写入数组中。
至此这个程序已经完成一半了,setup()函数定义数码管连接的几个引脚为OUTPUT(输出),并把电平拉高,然后进入到主函数(loop()函数)中,产生一个0-9的随机数作为实参传给Display()函数,在显示随机数之后,延时1s并重置各个引脚为高电平(调用setup()函数)。
下面分析Display()函数:
通过while循环来判断是否显示这个数所对应的引脚已全部被拉低,如果未完全,则继续,完全则退出。
4.总结
没想到arduino的数码管这么繁琐,本来是想Display()函数中用switch来判断传进来的参数并产生对应动作,但是每个数字对应的段选引脚确实太多,会导致代码很多,啰嗦,因此决定用二维数组+while判断来实现。目前数组里只加了数字0-9的段选数据,有兴趣的读者可以自行丰富。
期待更多精彩…