1
2#define button A0
3#define
4 button_minus A1
5#define button_10 A2
6#define button_100 A3
7
8#define button_reset A4
9
10
11 definitions
12#define Dig1 2
13#define Dig2 3
14#define Dig3 4
15#define
16 Dig4 5
17
18#define SegA 6
19#define SegB 7
20#define
21 SegC 8
22#define SegD 9
23#define SegE 10
24#define SegF 11
25#define
26 SegG 12
27
28
29
30byte current_digit;
31int
32 count = 0;
33
34void setup()
35{
36 pinMode(button, INPUT_PULLUP);
37 pinMode(button_minus,
38 INPUT_PULLUP);
39 pinMode(button_10, INPUT_PULLUP);
40 pinMode(button_100, INPUT_PULLUP);
41
42 pinMode(button_reset, INPUT_PULLUP);
43 pinMode(SegA, OUTPUT);
44 pinMode(SegB,
45 OUTPUT);
46 pinMode(SegC, OUTPUT);
47 pinMode(SegD, OUTPUT);
48 pinMode(SegE,
49 OUTPUT);
50 pinMode(SegF, OUTPUT);
51 pinMode(SegG, OUTPUT);
52 pinMode(Dig1,
53 OUTPUT);
54 pinMode(Dig2, OUTPUT);
55 pinMode(Dig3, OUTPUT);
56 pinMode(Dig4,
57 OUTPUT);
58
59 disp_off();
60
61
62 overflow interrupt configuration
63 TCCR1A = 0;
64 TCCR1B = 1;
65 with prescaler = 1 ( 16 ticks each 1 µs)
66 TCNT1 = 0;
67 value to 0 (reset)
68 TIMSK1 = 1;
69
70}
71
72ISR(TIMER1_OVF_vect)
73
74{
75 disp_off();
76 the display
77
78 switch (current_digit)
79 {
80 case 1:
81 if (count
82 >= 1000)
83 {
84 disp(count / 1000);
85 left)
86 digitalWrite(Dig1, HIGH);
87 }
88 break;
89
90
91 case 2:
92 if (count >= 100)
93 {
94 disp( (count / 100) % 10);
95
96 digitalWrite(Dig2, HIGH);
97 on digit 2
98 }
99 break;
100
101 case 3:
102 if (count >= 10)
103
104 {
105 disp( (count / 10) % 10);
106 digitalWrite(Dig3,
107 HIGH);
108 }
109 break;
110
111 case 4:
112 disp(count
113 % 10);
114 digitalWrite(Dig4,
115 HIGH);
116 }
117
118 current_digit = (current_digit % 4) +
119 1;
120}
121
122
123void loop()
124{
125 if(digitalRead(button) == 0)
126
127 {
128 count++;
129 if(count > 9999)
130 count
131 = 0;
132 delay(200);
133 }
134 else if(digitalRead(button_minus)
135 == 0)
136 {
137 count--;
138 if(count < 0)
139
140 count = 9999;
141 delay(200);
142 }
143 else
144 if(digitalRead(button_10) == 0)
145 {
146 count=count+10;
147
148 if(count > 9999)
149 count = 0;
150 delay(200);
151
152 }
153 else if(digitalRead(button_100) == 0)
154 {
155 count=count+100;
156 increment by 100
157 if(count > 9999)
158 count = 0;
159 delay(200);
160
161 }
162 else if(digitalRead(button_reset) == 0)
163
164 {
165 count=0;
166 delay(200);
167 }
168}
169
170void
171 disp(byte number)
172{
173 switch (number)
174 {
175 case 0:
176
177 digitalWrite(SegA, HIGH);
178 digitalWrite(SegB, HIGH);
179 digitalWrite(SegC,
180 HIGH);
181 digitalWrite(SegD, HIGH);
182 digitalWrite(SegE, HIGH);
183
184 digitalWrite(SegF, HIGH);
185 digitalWrite(SegG, LOW);
186 break;
187
188
189 case 1:
190 digitalWrite(SegA, LOW);
191 digitalWrite(SegB,
192 HIGH);
193 digitalWrite(SegC, HIGH);
194 digitalWrite(SegD, LOW);
195
196 digitalWrite(SegE, LOW);
197 digitalWrite(SegF, LOW);
198 digitalWrite(SegG,
199 LOW);
200 break;
201
202 case 2:
203 digitalWrite(SegA,
204 HIGH);
205 digitalWrite(SegB, HIGH);
206 digitalWrite(SegC, LOW);
207
208 digitalWrite(SegD, HIGH);
209 digitalWrite(SegE, HIGH);
210 digitalWrite(SegF,
211 LOW);
212 digitalWrite(SegG, HIGH);
213 break;
214
215 case 3:
216 print 3
217 digitalWrite(SegA, HIGH);
218 digitalWrite(SegB, HIGH);
219
220 digitalWrite(SegC, HIGH);
221 digitalWrite(SegD, HIGH);
222 digitalWrite(SegE,
223 LOW);
224 digitalWrite(SegF, LOW);
225 digitalWrite(SegG, HIGH);
226 break;
227
228
229 case 4:
230 digitalWrite(SegA, LOW);
231 digitalWrite(SegB,
232 HIGH);
233 digitalWrite(SegC, HIGH);
234 digitalWrite(SegD, LOW);
235
236 digitalWrite(SegE, LOW);
237 digitalWrite(SegF, HIGH);
238 digitalWrite(SegG,
239 HIGH);
240 break;
241
242 case 5:
243 digitalWrite(SegA,
244 HIGH);
245 digitalWrite(SegB, LOW);
246 digitalWrite(SegC, HIGH);
247
248 digitalWrite(SegD, HIGH);
249 digitalWrite(SegE, LOW);
250 digitalWrite(SegF,
251 HIGH);
252 digitalWrite(SegG, HIGH);
253 break;
254
255 case 6:
256 print 6
257 digitalWrite(SegA, HIGH);
258 digitalWrite(SegB, LOW);
259
260 digitalWrite(SegC, HIGH);
261 digitalWrite(SegD, HIGH);
262 digitalWrite(SegE,
263 HIGH);
264 digitalWrite(SegF, HIGH);
265 digitalWrite(SegG, HIGH);
266
267 break;
268
269 case 7:
270 digitalWrite(SegA, HIGH);
271
272 digitalWrite(SegB, HIGH);
273 digitalWrite(SegC, HIGH);
274 digitalWrite(SegD,
275 LOW);
276 digitalWrite(SegE, LOW);
277 digitalWrite(SegF, LOW);
278 digitalWrite(SegG,
279 LOW);
280 break;
281
282 case 8:
283 digitalWrite(SegA,
284 HIGH);
285 digitalWrite(SegB, HIGH);
286 digitalWrite(SegC, HIGH);
287
288 digitalWrite(SegD, HIGH);
289 digitalWrite(SegE, HIGH);
290 digitalWrite(SegF,
291 HIGH);
292 digitalWrite(SegG, HIGH);
293 break;
294
295 case 9:
296 print 9
297 digitalWrite(SegA, HIGH);
298 digitalWrite(SegB, HIGH);
299
300 digitalWrite(SegC, HIGH);
301 digitalWrite(SegD, HIGH);
302 digitalWrite(SegE,
303 LOW);
304 digitalWrite(SegF, HIGH);
305 digitalWrite(SegG, HIGH);
306
307 }
308}
309
310void disp_off()
311{
312 digitalWrite(Dig1, LOW);
313 digitalWrite(Dig2,
314 LOW);
315 digitalWrite(Dig3, LOW);
316 digitalWrite(Dig4, LOW);
317}
318
319
320 end of code.
321
kobykoby
2 years ago
I realize this project was posted a few years back, but I hope you might see my comment. I like your project and tried building something similar with your code. It sort of works, but display and counting isn't correct. Just wondering if you made corrections to this version? Any help would be greatly appreciated! Thanks,