공정훈

FND stopwatch

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <wiringPi.h>
const int FndSelectPin[6] = {23, 22, 27, 18, 17, 4};
const int FndPin[8] = {6, 12, 13, 16, 19, 20, 26, 21};
const int FndFont[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66,
0x6D, 0x7D, 0x07, 0x7F, 0x67};
void Init()
{
int i;
if(wiringPiSetupGpio() == -1)
{
printf("wiringPiSetupGpio() error\n");
exit(-1);
}
for(i=0; i<6; i++)
{
pinMode(FndSelectPin[i], OUTPUT);
digitalWrite(FndSelectPin[i], HIGH);
}
for(i=0; i<8; i++)
{
pinMode(FndPin[i], OUTPUT);
digitalWrite(FndPin[i], LOW);
}
}
void FndSelect(int position)
{
int i;
for(i=0; i<6; i++)
{
if(i==position)
digitalWrite(FndSelectPin[i], LOW);
else
digitalWrite(FndSelectPin[i], HIGH);
}
}
void FndDisplay(int position, int num)
{
int i;
int flag = 0;
int shift = 0x01;
for(i=0; i<8; i++)
{
if(position == 3 && i == 7)
flag = 1;
else
flag = (FndFont[num] & shift);
digitalWrite(FndPin[i], flag);
shift <<= 1;
}
FndSelect(position);
}
int main()
{
int i, j;
int c[6] = {0, 0, 0, 0, 0, 0};
int ptime = millis();
Init();
while(1)
{
while(millis()-ptime < 10)
{
for(i=0; i<6; i++)
{
FndDisplay(i, c[i]);
delay(1);
}
}
ptime = millis();
c[5]++;
for(j=5; j>0; j--)
{
c[j-1] += c[j]/10;
c[j] %= 10;
}
c[0] %= 10;
}
return 0;
}