Line 12... |
Line 12... |
12 |
// |
12 |
// |
13 |
// (c) miho 2014 http://www.mlab.cz |
13 |
// (c) miho 2014 http://www.mlab.cz |
14 |
// |
14 |
// |
15 |
// History |
15 |
// History |
16 |
// 2014 01 31 - First demo |
16 |
// 2014 01 31 - First demo |
- |
|
17 |
// 2014 02 07 - Added support for Comon Anoda / Comon Catoda |
17 |
|
18 |
|
18 |
|
19 |
|
19 |
// System Configuration |
20 |
// System Configuration |
20 |
#define F_CPU 4000000 // Do not forget to set FUSEs to external XTAL osc with DIV/8 off and connect xtal |
21 |
#define F_CPU 4000000 // Do not forget to set FUSEs to external XTAL osc with DIV/8 off and connect xtal |
21 |
|
22 |
|
22 |
// LED Display - Configuration |
23 |
// LED Display - Configuration |
- |
|
24 |
#define LED_COMON_ANODA 0 // 0=Comon Catoda / 1=Comon Anoda |
23 |
#define LED_DIGITS_PORT C // Digits Port (common anodas) |
25 |
#define LED_DIGITS_PORT C // Digits Port (common anodas or comon catodas) |
24 |
#define LED_DIGITS 4 // Number of display digits (1..8) |
26 |
#define LED_DIGITS 6 // Number of display digits (1..8) |
25 |
#define LED_SEGMENTS_PORT D // Segments Port (catodas) |
27 |
#define LED_SEGMENTS_PORT D // Segments Port (catodas or anodas) |
26 |
#define LED_SEGMENTS 8 // Usualy 7 or 8 (bit 0 is A) |
28 |
#define LED_SEGMENTS 8 // Usualy 7 or 8 (bit 0 is A) |
27 |
#define TICKS_PER_SEC 500 // Number of interrupts per second ( >250 to look steady) |
29 |
#define TICKS_PER_SEC 500 // Number of interrupts per second ( >250 to look steady) |
28 |
|
30 |
|
29 |
|
31 |
|
30 |
// -------------- DO NOT EDIT BELOW THIS LINE -------------- |
32 |
// -------------- DO NOT EDIT BELOW THIS LINE -------------- |
Line 63... |
Line 65... |
63 |
|
65 |
|
64 |
// 7 Segment Decoder |
66 |
// 7 Segment Decoder |
65 |
unsigned char Convert(unsigned char Number) |
67 |
unsigned char Convert(unsigned char Number) |
66 |
{ |
68 |
{ |
67 |
// 7 Segment Decoder Table |
69 |
// 7 Segment Decoder Table |
- |
|
70 |
// A |
- |
|
71 |
// --- |
- |
|
72 |
// F| | B |
- |
|
73 |
// | G | |
- |
|
74 |
// --- |
- |
|
75 |
// E| | C |
- |
|
76 |
// | | |
- |
|
77 |
// --- * H |
- |
|
78 |
// D |
68 |
const unsigned char Decoder[] = |
79 |
const unsigned char Decoder[] = |
69 |
{ |
80 |
{ |
70 |
// HGFEDCBA |
81 |
// HGFEDCBA |
71 |
0b00111111, // 0 |
82 |
0b00111111, // 0 |
72 |
0b00000011, // 1 |
83 |
0b00000110, // 1 |
73 |
0b01101101, // 2 |
84 |
0b01011011, // 2 |
74 |
0b01100111, // 3 |
85 |
0b01001111, // 3 |
75 |
0b01010011, // 4 |
86 |
0b01100110, // 4 |
76 |
0b01110110, // 5 |
87 |
0b01101101, // 5 |
77 |
0b01111110, // 6 |
88 |
0b01111101, // 6 |
78 |
0b00100011, // 7 |
89 |
0b00000111, // 7 |
79 |
0b01111111, // 8 |
90 |
0b01111111, // 8 |
- |
|
91 |
0b01101111, // 9 |
80 |
0b01110111 // 9 |
92 |
0b01110111, // A |
- |
|
93 |
0b01111100, // b |
- |
|
94 |
0b00111001, // C |
- |
|
95 |
0b01011100, // d |
- |
|
96 |
0b01111001, // E |
- |
|
97 |
0b01110000 // F |
81 |
}; |
98 |
}; |
82 |
|
99 |
|
83 |
// Decoding Function |
100 |
// Decoding Function |
84 |
if(Number<sizeof(Decoder)) return Decoder[Number]; else return 0; |
101 |
if(Number<sizeof(Decoder)) return Decoder[Number]; else return 0; |
85 |
} |
102 |
} |
Line 165... |
Line 182... |
165 |
case 1: Segments = Convert(Seconds10); |
182 |
case 1: Segments = Convert(Seconds10); |
166 |
break; |
183 |
break; |
167 |
case 2: Segments = Convert(Minutes); |
184 |
case 2: Segments = Convert(Minutes); |
168 |
break; |
185 |
break; |
169 |
case 3: Segments = Convert(Minutes10); |
186 |
case 3: Segments = Convert(Minutes10); |
- |
|
187 |
break; |
- |
|
188 |
case 4: Segments = Convert(Hours); |
- |
|
189 |
break; |
- |
|
190 |
case 5: Segments = Convert(Hours10); |
- |
|
191 |
break; |
170 |
} |
192 |
} |
- |
|
193 |
#if LED_COMON_ANODA==0 |
- |
|
194 |
// LED display update - All digits off |
- |
|
195 |
PORT(LED_DIGITS_PORT) |= LED_DIGITS_MASK; // common catoda 1=off |
- |
|
196 |
// LED display update - New segments combination |
- |
|
197 |
PORT(LED_SEGMENTS_PORT) = (PORT(LED_SEGMENTS_PORT) & ~LED_SEGMENTS_MASK) | (Segments & LED_SEGMENTS_MASK); |
- |
|
198 |
// LED display update - One digit on |
- |
|
199 |
PORT(LED_DIGITS_PORT) &= ~(LED_DIGITS_MASK & DisplayDigitMask); // (common anoda 0=on) |
171 |
|
200 |
#else |
172 |
// LED display update - All digits off |
201 |
// LED display update - All digits off |
173 |
PORT(LED_DIGITS_PORT) &= ~LED_DIGITS_MASK; // common anoda 0=off |
202 |
PORT(LED_DIGITS_PORT) &= ~LED_DIGITS_MASK; // common anoda 0=off |
174 |
// LED display update - New segments combination |
203 |
// LED display update - New segments combination |
175 |
PORT(LED_SEGMENTS_PORT) = (PORT(LED_SEGMENTS_PORT) & ~LED_SEGMENTS_MASK) | (~Segments & LED_SEGMENTS_MASK); |
204 |
PORT(LED_SEGMENTS_PORT) = (PORT(LED_SEGMENTS_PORT) & ~LED_SEGMENTS_MASK) | (~Segments & LED_SEGMENTS_MASK); |
176 |
// LED display update - One digit on |
205 |
// LED display update - One digit on |
177 |
PORT(LED_DIGITS_PORT) |= (LED_DIGITS_MASK & DisplayDigitMask); // (common anoda 1=on) |
206 |
PORT(LED_DIGITS_PORT) |= (LED_DIGITS_MASK & DisplayDigitMask); // (common anoda 1=on) |
- |
|
207 |
#endif |
178 |
} |
208 |
} |
179 |
|
209 |
|
180 |
|
210 |
|
181 |
// Main |
211 |
// Main |
182 |
int main() |
212 |
int main() |