Код: Выделить всё
//==================
#include "seven_segm_led_ind.h"
//==================
//==================
struct tab_char_7_segm_cod_t __flash tab_char_7_segm_cod [] =
{
#ifdef __SEGMENT_METHOD_ONE__
{'0', (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F)}, // 0
{'1', (SEG_B | SEG_C)}, // 1
{'2', (SEG_A | SEG_B | SEG_D | SEG_E | SEG_G)}, // 2
{'3', (SEG_A | SEG_B | SEG_C | SEG_D | SEG_G)}, // 3
{'4', (SEG_B | SEG_C | SEG_F | SEG_G)}, // 4
{'5', (SEG_A | SEG_C | SEG_D | SEG_F | SEG_G)}, // 5
{'6', (SEG_A | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G)}, // 6
{'7', (SEG_A | SEG_B | SEG_C)}, // 7
{'8', (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G)}, // 8
{'9', (SEG_A | SEG_B | SEG_C | SEG_D | SEG_F | SEG_G)}, // 9
{'A', (SEG_A | SEG_B | SEG_C | SEG_E | SEG_F | SEG_G)}, // 10
{'B', (SEG_C | SEG_D | SEG_E | SEG_F | SEG_G)}, // 11
{'C', (SEG_A | SEG_D | SEG_E | SEG_F)}, // 12
{'D', (SEG_B | SEG_C | SEG_D | SEG_E | SEG_G)}, // 13
{'E', (SEG_A | SEG_D | SEG_E | SEG_F | SEG_G)}, // 14
{'F', (SEG_A | SEG_E | SEG_F | SEG_G)}, // 15
{'G', (SEG_A | SEG_C | SEG_D | SEG_E | SEG_F)}, // 16
{'H', (SEG_B | SEG_C | SEG_E | SEG_F | SEG_G)}, // 17
{'L', (SEG_D | SEG_E | SEG_F)}, // 18
{'N', (SEG_C | SEG_E | SEG_G)}, // 19
{'O', (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F)}, // 20
{'P', (SEG_A | SEG_B | SEG_E | SEG_F | SEG_G)}, // 21
{'П', (SEG_A | SEG_B | SEG_C | SEG_E | SEG_F)}, // 22
{'-', (SEG_G)}, // 23
{' ', 0xFF}, // 24
#endif
#ifdef __SEGMENT_METHOD_ZERO__
{'0', (0xFF ^ (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F))}, // 0
{'1', (0xFF ^ (SEG_B | SEG_C))}, // 1
{'2', (0xFF ^ (SEG_A | SEG_B | SEG_D | SEG_E | SEG_G))}, // 2
{'3', (0xFF ^ (SEG_A | SEG_B | SEG_C | SEG_D | SEG_G))}, // 3
{'4', (0xFF ^ (SEG_B | SEG_C | SEG_F | SEG_G))}, // 4
{'5', (0xFF ^ (SEG_A | SEG_C | SEG_D | SEG_F | SEG_G))}, // 5
{'6', (0xFF ^ (SEG_A | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G))}, // 6
{'7', (0xFF ^ (SEG_A | SEG_B | SEG_C))}, // 7
{'8', (0xFF ^ (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G))}, // 8
{'9', (0xFF ^ (SEG_A | SEG_B | SEG_C | SEG_D | SEG_F | SEG_G))}, // 9
{'A', (0xFF ^ (SEG_A | SEG_B | SEG_C | SEG_E | SEG_F | SEG_G))}, // 10
{'B', (0xFF ^ (SEG_C | SEG_D | SEG_E | SEG_F | SEG_G))}, // 11
{'C', (0xFF ^ (SEG_A | SEG_D | SEG_E | SEG_F))}, // 12
{'D', (0xFF ^ (SEG_B | SEG_C | SEG_D | SEG_E | SEG_G))}, // 13
{'E', (0xFF ^ (SEG_A | SEG_D | SEG_E | SEG_F | SEG_G))}, // 14
{'F', (0xFF ^ (SEG_A | SEG_E | SEG_F | SEG_G))}, // 15
{'G', (0xFF ^ (SEG_A | SEG_C | SEG_D | SEG_E | SEG_F))}, // 16
{'H', (0xFF ^ (SEG_B | SEG_C | SEG_E | SEG_F | SEG_G))}, // 17
{'L', (0xFF ^ (SEG_D | SEG_E | SEG_F))}, // 18
{'N', (0xFF ^ (SEG_C | SEG_E | SEG_G))}, // 19
{'O', (0xFF ^ (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F))}, // 20
{'P', (0xFF ^ (SEG_A | SEG_B | SEG_E | SEG_F | SEG_G))}, // 21
{'П', (0xFF ^ (SEG_A | SEG_B | SEG_C | SEG_E | SEG_F))}, // 22
{'-', (0xFF ^ (SEG_G))}, // 23
{' ', 0xFF}, // 24
#endif
{0xFF, 0xFF},
};
//==================
//==================
u08 dsp_buf [MAX_LED_INDS];
//------------------------------------------------------------------------
// Очистка буфера дисплея.
u08 dsp_buf [MAX_LED_INDS];
void clr_dsp_buf (void)
{
for (u08 i = 0; i < MAX_LED_INDS; i++)
dsp_buf [i] = ' ';
}
//==================
//==================
u08 recod_char_7_segm_cod (u08 data)
{
struct tab_char_7_segm_cod_t __flash *ptr = tab_char_7_segm_cod;
for (; ptr -> Char != 0xFF; ptr++)
{
if (ptr -> Char == data)
return ptr -> seven_segm_cod;
}
return false;
}
//==================
//==================
__flash FUNC proc_7_segm_ind_func [9] =
{
set_seven_segm_ind_1_on,
set_seven_segm_ind_2_on,
set_seven_segm_ind_3_on,
set_seven_segm_ind_4_on,
set_seven_segm_ind_5_on,
set_seven_segm_ind_6_on,
set_seven_segm_ind_7_on,
set_seven_segm_ind_8_on,
set_leds_ind_on,
};
static u08 _proc_7_segm_ind;
void set_proc_7_segm_ind_on (void)
{
_proc_7_segm_ind = 1;
}
void set_proc_7_segm_ind_off (void)
{
all_indications_off ();
_74act164_transf (0xFF);
_proc_7_segm_ind = 0;
}
void proc_7_segm_ind (void)
{
static soft_timer ST_PROC_7_SEGM_IND;
static u08 cnt_7_segm_ind;
u08 segments;
switch (_proc_7_segm_ind)
{
case 0:
break;
case 1:
all_indications_init ();
clr_dsp_buf ();
cnt_7_segm_ind = 0;
set_soft_timer (ST_PROC_7_SEGM_IND, 0, 1);
_proc_7_segm_ind = 2;
break;
case 2:
if (handle_soft_timer (ST_PROC_7_SEGM_IND))
{
all_indications_off ();
if (cnt_7_segm_ind < MAX_LED_INDS)
{
segments = recod_char_7_segm_cod (dsp_buf [cnt_7_segm_ind]);
if ((get_dp_flag () == true) && (cnt_7_segm_ind == 2))
{
#ifdef __SEGMENT_METHOD_ONE__
segments |= SEG_H;
#endif
#ifdef __SEGMENT_METHOD_ZERO__
segments &= (0xFF ^ SEG_H);
#endif
}
_74act164_transf (segments);
}
else
_74act164_transf (get_leds_buf ());
proc_7_segm_ind_func [cnt_7_segm_ind] ();
if (++cnt_7_segm_ind > 8)
cnt_7_segm_ind = 0;
}
break;
default:
break;
}
}
//==================
//==================
#ifdef __COMMON_METHOD_ONE__
void set_seven_segm_ind_1_on (void)
{
set_bit (SEVEN_SEGM_IND_1_PORT, SEVEN_SEGM_IND_1);
}
void set_seven_segm_ind_2_on (void)
{
set_bit (SEVEN_SEGM_IND_2_PORT, SEVEN_SEGM_IND_2);
}
void set_seven_segm_ind_3_on (void)
{
set_bit (SEVEN_SEGM_IND_3_PORT, SEVEN_SEGM_IND_3);
}
void set_seven_segm_ind_4_on (void)
{
set_bit (SEVEN_SEGM_IND_4_PORT, SEVEN_SEGM_IND_4);
}
void set_seven_segm_ind_5_on (void)
{
set_bit (SEVEN_SEGM_IND_5_PORT, SEVEN_SEGM_IND_5);
}
void set_seven_segm_ind_6_on (void)
{
set_bit (SEVEN_SEGM_IND_6_PORT, SEVEN_SEGM_IND_6);
}
void set_seven_segm_ind_7_on (void)
{
set_bit (SEVEN_SEGM_IND_7_PORT, SEVEN_SEGM_IND_7);
}
void set_seven_segm_ind_8_on (void)
{
set_bit (SEVEN_SEGM_IND_8_PORT, SEVEN_SEGM_IND_8);
}
void set_leds_ind_on (void)
{
set_bit (LEDS_IND_PORT, LEDS_IND);
}
//------------------------------------------------------------------------
void set_seven_segm_ind_1_off (void)
{
clr_bit (SEVEN_SEGM_IND_1_PORT, SEVEN_SEGM_IND_1);
}
void set_seven_segm_ind_2_off (void)
{
clr_bit (SEVEN_SEGM_IND_2_PORT, SEVEN_SEGM_IND_2);
}
void set_seven_segm_ind_3_off (void)
{
clr_bit (SEVEN_SEGM_IND_3_PORT, SEVEN_SEGM_IND_3);
}
void set_seven_segm_ind_4_off (void)
{
clr_bit (SEVEN_SEGM_IND_4_PORT, SEVEN_SEGM_IND_4);
}
void set_seven_segm_ind_5_off (void)
{
clr_bit (SEVEN_SEGM_IND_5_PORT, SEVEN_SEGM_IND_5);
}
void set_seven_segm_ind_6_off (void)
{
clr_bit (SEVEN_SEGM_IND_6_PORT, SEVEN_SEGM_IND_6);
}
void set_seven_segm_ind_7_off (void)
{
clr_bit (SEVEN_SEGM_IND_7_PORT, SEVEN_SEGM_IND_7);
}
void set_seven_segm_ind_8_off (void)
{
clr_bit (SEVEN_SEGM_IND_8_PORT, SEVEN_SEGM_IND_8);
}
void set_leds_ind_off (void)
{
clr_bit (LEDS_IND_PORT, LEDS_IND);
}
#endif
//------------------------------------------------------------------------
//------------------------------------------------------------------------
#ifdef __COMMON_METHOD_ZERO__
void set_seven_segm_ind_1_on (void)
{
clr_bit (SEVEN_SEGM_IND_1_PORT, SEVEN_SEGM_IND_1);
}
void set_seven_segm_ind_2_on (void)
{
clr_bit (SEVEN_SEGM_IND_2_PORT, SEVEN_SEGM_IND_2);
}
void set_seven_segm_ind_3_on (void)
{
clr_bit (SEVEN_SEGM_IND_3_PORT, SEVEN_SEGM_IND_3);
}
void set_seven_segm_ind_4_on (void)
{
clr_bit (SEVEN_SEGM_IND_4_PORT, SEVEN_SEGM_IND_4);
}
void set_seven_segm_ind_5_on (void)
{
clr_bit (SEVEN_SEGM_IND_5_PORT, SEVEN_SEGM_IND_5);
}
void set_seven_segm_ind_6_on (void)
{
clr_bit (SEVEN_SEGM_IND_6_PORT, SEVEN_SEGM_IND_6);
}
void set_seven_segm_ind_7_on (void)
{
clr_bit (SEVEN_SEGM_IND_7_PORT, SEVEN_SEGM_IND_7);
}
void set_seven_segm_ind_8_on (void)
{
clr_bit (SEVEN_SEGM_IND_8_PORT, SEVEN_SEGM_IND_8);
}
void set_leds_ind_on (void)
{
clr_bit (LEDS_IND_PORT, LEDS_IND);
}
//------------------------------------------------------------------------
void set_seven_segm_ind_1_off (void)
{
set_bit (SEVEN_SEGM_IND_1_PORT, SEVEN_SEGM_IND_1);
}
void set_seven_segm_ind_2_off (void)
{
set_bit (SEVEN_SEGM_IND_2_PORT, SEVEN_SEGM_IND_2);
}
void set_seven_segm_ind_3_off (void)
{
set_bit (SEVEN_SEGM_IND_3_PORT, SEVEN_SEGM_IND_3);
}
void set_seven_segm_ind_4_off (void)
{
set_bit (SEVEN_SEGM_IND_4_PORT, SEVEN_SEGM_IND_4);
}
void set_seven_segm_ind_5_off (void)
{
set_bit (SEVEN_SEGM_IND_5_PORT, SEVEN_SEGM_IND_5);
}
void set_seven_segm_ind_6_off (void)
{
set_bit (SEVEN_SEGM_IND_6_PORT, SEVEN_SEGM_IND_6);
}
void set_seven_segm_ind_7_off (void)
{
set_bit (SEVEN_SEGM_IND_7_PORT, SEVEN_SEGM_IND_7);
}
void set_seven_segm_ind_8_off (void)
{
set_bit (SEVEN_SEGM_IND_8_PORT, SEVEN_SEGM_IND_8);
}
void set_leds_ind_off (void)
{
set_bit (LEDS_IND_PORT, LEDS_IND);
}
#endif
//==================
//==================
void all_indications_init (void)
{
_74act164_init ();
set_bit (SEVEN_SEGM_IND_1_DDR, SEVEN_SEGM_IND_1);
set_bit (SEVEN_SEGM_IND_2_DDR, SEVEN_SEGM_IND_2);
set_bit (SEVEN_SEGM_IND_3_DDR, SEVEN_SEGM_IND_3);
set_bit (SEVEN_SEGM_IND_4_DDR, SEVEN_SEGM_IND_4);
set_bit (SEVEN_SEGM_IND_5_DDR, SEVEN_SEGM_IND_5);
set_bit (SEVEN_SEGM_IND_6_DDR, SEVEN_SEGM_IND_6);
set_bit (SEVEN_SEGM_IND_7_DDR, SEVEN_SEGM_IND_7);
set_bit (SEVEN_SEGM_IND_8_DDR, SEVEN_SEGM_IND_8);
set_bit (LEDS_IND_DDR, LEDS_IND);
all_indications_off ();
all_leds_off ();
}
//==================
//==================
void all_indications_off (void)
{
set_seven_segm_ind_1_off ();
set_seven_segm_ind_2_off ();
set_seven_segm_ind_3_off ();
set_seven_segm_ind_4_off ();
set_seven_segm_ind_5_off ();
set_seven_segm_ind_6_off ();
set_seven_segm_ind_7_off ();
set_seven_segm_ind_8_off ();
set_bit (LEDS_IND_PORT, LEDS_IND);
}
//==================