Skip to content

Commit 23d2da3

Browse files
committed
seven segment display 4in1
1 parent 502e2a1 commit 23d2da3

File tree

3 files changed

+114
-0
lines changed

3 files changed

+114
-0
lines changed
4.03 KB
Binary file not shown.
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
2+
#define PIN_0 2
3+
#define PIN_g 3
4+
#define PIN_c 4
5+
#define PIN_h 5
6+
#define PIN_d 6
7+
#define PIN_e 7
8+
#define PIN_b 8
9+
#define PIN_1 9
10+
#define PIN_2 10
11+
#define PIN_f 11
12+
#define PIN_a 12
13+
#define PIN_3 13
14+
15+
#define POS_NUM 4
16+
#define SEG_NUM 8
17+
const byte pos_pins[POS_NUM] = {PIN_0, PIN_1, PIN_2, PIN_3};
18+
const byte seg_pins[SEG_NUM] = {PIN_a, PIN_b, PIN_c, PIN_d, PIN_e, PIN_f, PIN_g, PIN_h};
19+
20+
#define t true
21+
#define f false
22+
const boolean data[10][SEG_NUM] = {
23+
{t, t, t, t, t, t, f, f}, // 0
24+
{f, t, t, f, f, f, f, f}, // 1
25+
{t, t, f, t, t, f, t, f}, // 2
26+
{t, t, t, t, f, f, t, f}, // 3
27+
{f, t, t, f, f, t, t, f}, // 4
28+
{t, f, t, t, f, t, t, f}, // 5
29+
{t, f, t, t, t, t, t, f}, // 6
30+
{t, t, t, f, f, f, f, f}, // 7
31+
{t, t, t, t, t, t, t, f}, // 8
32+
{t, t, t, t, f, t, t, f}, // 9
33+
};
34+
35+
void pf(const char *fmt, ... ){
36+
char tmp[128]; // max is 128 chars
37+
va_list args;
38+
va_start (args, fmt );
39+
vsnprintf(tmp, 128, fmt, args);
40+
va_end (args);
41+
Serial.print(tmp);
42+
}
43+
44+
void setDigit(int pos, int n){
45+
if(pos < 0 || 3 < pos){
46+
pf("error pos=%d\n", pos);
47+
return;
48+
}
49+
50+
for(int p = 0; p < POS_NUM; p++){
51+
if(p == pos)
52+
digitalWrite(pos_pins[p], LOW);
53+
else
54+
digitalWrite(pos_pins[p], HIGH);
55+
}
56+
57+
if(0 <= n && n <= 9){
58+
for(int i = 0; i < SEG_NUM; i++){
59+
digitalWrite(seg_pins[i], data[n][i] == t ? HIGH : LOW);
60+
}
61+
}
62+
else{
63+
for(int i = 0; i < SEG_NUM; i++){
64+
digitalWrite(seg_pins[i], LOW);
65+
}
66+
digitalWrite(PIN_h, HIGH);
67+
pf("error pos=%d, n=%d\n", pos, n);
68+
}
69+
}
70+
71+
void setNumber(int number)
72+
{
73+
int n0, n1, n2, n3;
74+
n3 = number / 1000;
75+
number %= 1000;
76+
n2 = number / 100;
77+
number %= 100;
78+
n1 = number / 10;
79+
n0 = number % 10;
80+
81+
setDigit(0, n0); delay(5);
82+
setDigit(1, n1); delay(5);
83+
setDigit(2, n2); delay(5);
84+
setDigit(3, n3); delay(5);
85+
}
86+
87+
unsigned long time_previous;
88+
void setup() {
89+
Serial.begin(115200);
90+
91+
for(int i = 0; i < POS_NUM; i++){
92+
pinMode(pos_pins[i], OUTPUT);
93+
digitalWrite(pos_pins[i], HIGH);
94+
}
95+
for(int i = 0; i < SEG_NUM; i++){
96+
pinMode(seg_pins[i], OUTPUT);
97+
digitalWrite(seg_pins[i], LOW);
98+
}
99+
100+
time_previous = millis();
101+
}
102+
103+
int number = 0;
104+
void loop() {
105+
unsigned long time_now = millis();
106+
if(time_now - time_previous > 1000){
107+
number++;
108+
time_previous += 1000;
109+
pf("number=%d\n", number);
110+
}
111+
112+
setNumber(number);
113+
}
114+
311 KB
Loading

0 commit comments

Comments
 (0)