공정훈

FND stopwatch

1 +#include <stdio.h>
2 +#include <stdlib.h>
3 +#include <stdint.h>
4 +#include <wiringPi.h>
5 +
6 +const int FndSelectPin[6] = {23, 22, 27, 18, 17, 4};
7 +const int FndPin[8] = {6, 12, 13, 16, 19, 20, 26, 21};
8 +const int FndFont[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66,
9 + 0x6D, 0x7D, 0x07, 0x7F, 0x67};
10 +
11 +void Init()
12 +{
13 + int i;
14 + if(wiringPiSetupGpio() == -1)
15 + {
16 + printf("wiringPiSetupGpio() error\n");
17 + exit(-1);
18 + }
19 + for(i=0; i<6; i++)
20 + {
21 + pinMode(FndSelectPin[i], OUTPUT);
22 + digitalWrite(FndSelectPin[i], HIGH);
23 + }
24 + for(i=0; i<8; i++)
25 + {
26 + pinMode(FndPin[i], OUTPUT);
27 + digitalWrite(FndPin[i], LOW);
28 + }
29 +}
30 +
31 +
32 +
33 +void FndSelect(int position)
34 +{
35 + int i;
36 + for(i=0; i<6; i++)
37 + {
38 + if(i==position)
39 + digitalWrite(FndSelectPin[i], LOW);
40 + else
41 + digitalWrite(FndSelectPin[i], HIGH);
42 + }
43 +}
44 +
45 +void FndDisplay(int position, int num)
46 +{
47 + int i;
48 + int flag = 0;
49 + int shift = 0x01;
50 + for(i=0; i<8; i++)
51 + {
52 + if(position == 3 && i == 7)
53 + flag = 1;
54 + else
55 + flag = (FndFont[num] & shift);
56 + digitalWrite(FndPin[i], flag);
57 + shift <<= 1;
58 + }
59 + FndSelect(position);
60 +}
61 +
62 +int main()
63 +{
64 + int i, j;
65 + int c[6] = {0, 0, 0, 0, 0, 0};
66 + int ptime = millis();
67 +
68 + Init();
69 + while(1)
70 + {
71 + while(millis()-ptime < 10)
72 + {
73 + for(i=0; i<6; i++)
74 + {
75 + FndDisplay(i, c[i]);
76 + delay(1);
77 + }
78 + }
79 + ptime = millis();
80 +
81 + c[5]++;
82 + for(j=5; j>0; j--)
83 + {
84 + c[j-1] += c[j]/10;
85 + c[j] %= 10;
86 + }
87 + c[0] %= 10;
88 + }
89 + return 0;
90 +}