2019独角兽企业重金招聘Python工程师标准>>>
最近在玩arduino的板子,玩到静态控制四位数码管遇到了障碍,搞了一下午才弄明白,写个笔记玩玩:
首先需要:(1)arduino uno r3
(2)220欧姆电阻8个
(3)四位数码管(我用的型号是F3461BH,型号不一样可能设定不一样)
(4)面包板,杜邦线若干
四位数码管电路图:
电路连接图:我dao了一张图,图是arduino板子的连接方式,我的r3稍有不同,第一根线从2号位开始连接,后边顺序不变一次措一位ie,也就是我用的2~13位(原图是1~12位)。
实物连接图:
代码来啦!
//设置阴极接口
int a = 2 ; //从2号位开始连接的
int b = 3;
int c = 4;
int d = 5;
int e = 6;
int f = 7;
int g = 8;
int p = 9;
//设置阳极接口
int d4 = 10;
int d3 = 11;
int d2 = 12;
int d1 = 13;
//设置变量
long n = 0;
int x = 100;
int del = 55; //此处数值对时钟进行微调
byte segs[7] = { a, b, c, d, e, f, g };
byte seven_seg_digits[10][7] = { {0,0,0,0,0,0,1} , // = 0
{1,0,0,1,1,1,1} , // = 1
{0,0,1,0,0,1,0} , // = 2
{0,0,0,0,1,1,0} , // = 3
{1,0,0,1,1,0,0} , // = 4
{0,1,0,0,1,0,0} , // = 5
{0,1,0,0,0,0,0} , // = 6
{0,0,0,1,1,1,1} , // = 7
{0,0,0,0,0,0,0} , // = 8
{0,0,0,0,1,0,0} // = 9
};
void setup()
{
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(p, OUTPUT);
}
void loop()
{
clearLEDs();
pickDigit(1);
lightSegments((n/x/1000)%10);
delayMicroseconds(del);
clearLEDs();
pickDigit(2);
lightSegments((n/x/100)%10);
delayMicroseconds(del);
clearLEDs();
pickDigit(3);
dispDec(3);
lightSegments((n/x/10)%10);
delayMicroseconds(del);
clearLEDs();
pickDigit(4);
lightSegments(n/x%10);
delayMicroseconds(del);
n++;
if (digitalRead(13) == HIGH) //设定到999.9以后就归零
{
n = 0;
}
}
void pickDigit(int x) //定义pickDigit(x),其作用是开启dx端口
{
digitalWrite(d1, LOW);
digitalWrite(d2, LOW);
digitalWrite(d3, LOW);
digitalWrite(d4, LOW);
switch(x)
{
case 1:
digitalWrite(d1, HIGH);
break;
case 2:
digitalWrite(d2, HIGH);
break;
case 3:
digitalWrite(d3, HIGH);
break;
default:
digitalWrite(d4, HIGH);
break;
}
}
void dispDec(int x) //设定开启小数点
{
digitalWrite(p, LOW);
}
void clearLEDs() //清屏
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
digitalWrite(p, HIGH);
}
// 点亮对应数字的数码管
void lightSegments(int x) {
for (int i = 0; i <7 ; i++) {
digitalWrite(segs, seven_seg_digits[x]);
}
}