想用三位数码管实现一个秒表,但是代码写完发现,数字显示的有问题,数字只能一位一位的显示,不能三位同时显示
char LEDPins[] = {13,12,11,10,9,8,7,6};//A,B,C,D,E,F,G,Dp
char LEDIndex[] = {5,4,3, 2}; //G1,G2,G3
char LED8Code[]={
0xC0, // 0
0xF9, // 1
0xA4, // 2
0xB0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xF8, // 7
0x80, // 8
0x90, // 9
0x88, // A
0x83, // B
0xC6, // C
0xA1, // D
0x86, // E
0x8E // F
};
//设置变量
int del = 550; //此处数值对时钟进行微调
int ge, shi, bai;
void setup()
{
for(int i = 0; i < 8; i++)
{
pinMode(LEDPins[i], OUTPUT);
}
for(int i = 0; i < 3; i++)
{
pinMode(LEDIndex[i], OUTPUT);
}
}
void loop()
{
for(int i = 0; i < 1000; i++)
{
bai = i / 100;
shi = (i - bai * 100) / 10;
ge = i - bai * 100 - shi * 10;
clearLED();
switchX(1);
ledShow(bai);
delay(del);
clearLED();
switchX(2);
ledShow(shi);
delay(del);
clearLED();
switchX(3);
ledShow(ge);
delay(del);
}
}
void ledShow(int data)
{
char hc = LED8Code[data];
for(int i = 0; i < 8; i++)
{
int j = bitRead(hc, i);
digitalWrite(LEDPins[i], j);
}
}
void clearLED()
{
for(int i = 0; i < 8; i++)
{
digitalWrite(LEDPins[i], HIGH);
}
}
void switchX(int x)
{
digitalWrite(LEDIndex[0], LOW);
digitalWrite(LEDIndex[1], LOW);
digitalWrite(LEDIndex[2], LOW);
switch(x)
{
case 1:
digitalWrite(LEDIndex[0], HIGH);
break;
case 2:
digitalWrite(LEDIndex[1], HIGH);
break;
case 3:
digitalWrite(LEDIndex[2], HIGH);
break;
}
}
|