This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
en:examples:display:segment_display [2015/11/05 11:08] – heikopikner | en:examples:display:segment_display [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ~~PB~~ | + | < |
====== 7-segment LED display ====== | ====== 7-segment LED display ====== | ||
- | //Necessary knowledge: [HW] [[en: | + | //Necessary knowledge: |
+ | [HW] [[en: | ||
+ | [LIB] [[en: | ||
+ | [PRT] [[en: | ||
===== Theory ===== | ===== Theory ===== | ||
Line 28: | Line 31: | ||
<code c> | <code c> | ||
- | // Marking card. | + | // Marking card |
- | // The bits are marking the segments. Lower ranking is A, higher ranking is DP. | + | // The bits are marking the segments. Lower ranking is A, higher ranking is DP |
const unsigned char __attribute__ ((weak)) segment_char_map[11] = | const unsigned char __attribute__ ((weak)) segment_char_map[11] = | ||
{ | { | ||
Line 45: | Line 48: | ||
}; | }; | ||
- | // Start-up of the 7-segment indicator. | + | // Start-up of the 7-segment indicator |
void segment_display_init(void) | void segment_display_init(void) | ||
{ | { | ||
Line 54: | Line 57: | ||
} | } | ||
- | // Displaying number on the 7-segment indicator. | + | // Displaying number on the 7-segment indicator |
void segment_display_write(unsigned char digit) | void segment_display_write(unsigned char digit) | ||
{ | { | ||
Line 66: | Line 69: | ||
} | } | ||
- | // Number as the card of the segments. | + | // Number as the card of the segments |
map = segment_char_map[digit]; | map = segment_char_map[digit]; | ||
Line 72: | Line 75: | ||
pin_clear(segment_display_latch); | pin_clear(segment_display_latch); | ||
- | // Sending he bits. Higher ranking goes first. | + | // Sending he bits. Higher ranking goes first |
for (i = 7; i >= 0; i--) | for (i = 7; i >= 0; i--) | ||
{ | { | ||
- | // Setting the pin according to the value of the bit of the card. | + | // Setting the pin according to the value of the bit of the card |
pin_set_to(segment_display_data_out, | pin_set_to(segment_display_data_out, | ||
- | // The clock-signal as high for a moment. | + | // The clock-signal as high for a moment |
pin_set(segment_display_clock); | pin_set(segment_display_clock); | ||
_delay_us(1); | _delay_us(1); | ||
- | // The clock-signal as low. | + | // The clock-signal as low |
pin_clear(segment_display_clock); | pin_clear(segment_display_clock); | ||
_delay_us(1); | _delay_us(1); | ||
} | } | ||
- | // Latch-signal on. | + | // Latch-signal on |
pin_set(segment_display_latch); | pin_set(segment_display_latch); | ||
} | } | ||
</ | </ | ||
- | For displaying numbers and the letter “E”, is created a weak constant array // | + | For displaying numbers and the letter “E”, is created a "weak" |
- | The following is a more concrete example of a program for using the number-indicator. | + | The following is a more concrete example of a program for using the number-indicator. |
<code c> | <code c> | ||
- | // | ||
// The example program of the 7-segment LED indicator of the HomeLab' | // The example program of the 7-segment LED indicator of the HomeLab' | ||
- | // input-output module. | ||
- | // | ||
#include < | #include < | ||
#include < | #include < | ||
- | // | + | // Main program |
- | // Main program. | + | |
- | // | + | |
int main(void) | int main(void) | ||
{ | { | ||
int counter = 0; | int counter = 0; | ||
- | // Set-up of the 7-segment indicator. | + | // Set-up of the 7-segment indicator |
segment_display_init(); | segment_display_init(); | ||
- | // Endless loop. | + | // Endless loop |
while (true) | while (true) | ||
{ | { | ||
- | // Displaying the values of the counter. | + | // Displaying the values of the counter |
- | segment_display_write(counter); | + | segment_display_write(counter |
// Counting up to 10 | // Counting up to 10 | ||
counter++; | counter++; | ||
- | if (counter> | + | if (counter> |
- | // Delay for 1 second. | + | // Delay for 1 second |
sw_delay_ms(1000); | sw_delay_ms(1000); | ||
} | } | ||
} | } | ||
</ | </ |