// definições dos segmentos para o controlador de LCD (display da Microlab X1)
#define seg0 LCDM1|=0x01;
#define seg1 LCDM1|=0x10;
#define seg2 LCDM2|=0x01;
#define seg3 LCDM2|=0x10;
#define seg4 LCDM3|=0x01;
#define seg5 LCDM3|=0x10;
#define seg6 LCDM4|=0x01;
#define seg7 LCDM4|=0x10;
#define seg8 LCDM5|=0x01;
#define seg9 LCDM5|=0x10;
#define seg10 LCDM6|=0x01;
#define seg11 LCDM6|=0x10;
#define seg12 LCDM7|=0x01;
#define seg13 LCDM7|=0x10;
#define seg14 LCDM8|=0x01;
#define seg15 LCDM8|=0x10;
#define seg16 LCDM9|=0x01;
#define seg17 LCDM9|=0x10;
#define seg18 LCDM10|=0x01;
#define seg19 LCDM10|=0x10;
#define seg20 LCDM11|=0x01;
#define seg21 LCDM11|=0x10;
#define seg22 LCDM12|=0x01;
#define seg23 LCDM12|=0x10;
#define seg24 LCDM13|=0x01;
#define seg25 LCDM13|=0x10;
#define seg26 LCDM14|=0x01;
#define seg27 LCDM14|=0x10;
#define seg28 LCDM15|=0x01;
#define seg29 LCDM15|=0x10;
#define seg30 LCDM16|=0x01;
#define seg31 LCDM16|=0x10;
#define seg32 LCDM17|=0x01;
#define seg33 LCDM17|=0x10;
#define seg34 LCDM18|=0x01;
#define seg35 LCDM18|=0x10;
#define seg36 LCDM19|=0x01;
#define seg37 LCDM19|=0x10;
#define seg38 LCDM20|=0x01;
#define seg39 LCDM20|=0x10;
#define seg_over seg7
#define seg_bat seg36
#define seg_menos seg31
#define seg_mais seg37
#define seg_dois_pontos seg16
#define seg_p3 seg28
#define seg_p2 seg19
#define seg_p1 seg4
#define BTIP0 1
#define BTIP1 2
#define BTIP2 4

void apaga_lcd(void)
{
	// apaga todos os segmentos
	LCDM1 = LCDM2 = LCDM3 = LCDM4 = LCDM5 = LCDM6 = LCDM7 = 0;
	LCDM8 = LCDM9 = LCDM10 = LCDM11 = LCDM12 = LCDM13 = LCDM14 = 0;
	LCDM15 = LCDM16 = LCDM17 = LCDM18 = LCDM19 = LCDM20 = 0;
}

//*******************************************************************
// Função: mostra_lcd
//*******************************************************************
// Entrada: 	char digito4
//						char digito3
//						char digito2
//						char digito1
// Saída: 		void
//*******************************************************************
// Esta função decodifica os quatro digitos recebidos e os apresenta
// no display LCD estático
//*******************************************************************
void mostra_lcd(char digito4, char digito3, char digito2, char digito1)
{
	apaga_lcd();
  // Os switch abaixo verificam o valor de cada dígito e executam as
	// macros correspondentes aos segmentos que devem ser acesos
	switch (digito1)
	{
		case 0: seg0; seg1; seg2; seg3; seg6; seg5; break;
		case 1: seg0; seg1; break;
		case 2: seg5; seg0; seg9; seg3; seg2; break;
		case 3: seg0; seg1; seg5; seg2; seg9; break;
		case 4: seg0; seg1; seg9; seg6; break;
		case 5: seg5; seg6; seg9; seg1; seg2; break;
		case 6: seg6; seg3; seg2; seg1; seg9; seg5; break;
		case 7: seg0; seg1; seg5; break;
		case 8: seg0; seg1; seg2; seg3; seg6; seg5; seg9; break;
		case 9: seg0; seg1; seg5; seg9; seg6; seg2;	break;
	}
	switch (digito2)
	{
		case 0: seg13; seg10; seg11; seg18; seg15; seg14; break;
		case 1: seg13; seg10; break;
		case 2: seg14; seg13; seg17; seg18; seg11; break;
		case 3: seg14; seg13; seg17; seg10; seg11; break;
		case 4: seg15; seg17; seg13; seg10; break;
		case 5: seg14; seg15; seg17; seg10; seg11; break;
		case 6: seg14; seg15; seg17; seg10; seg11; seg18; break;
		case 7: seg14; seg13; seg10; break;
		case 8: seg17; seg18; seg11; seg10; seg13; seg14; seg15; break;
		case 9: seg11; seg10; seg13; seg14; seg15; seg17; break;
	}
	switch (digito3)
	{
		case 0: seg23; seg22; seg20; seg34; seg27; seg25; break;
		case 1: seg22; seg20; break;
		case 2: seg23; seg22; seg29; seg27; seg34; break;
		case 3: seg23; seg22; seg29; seg20; seg34; break;
		case 4: seg25; seg29; seg22; seg20; break;
		case 5: seg23; seg25; seg29; seg20; seg34; break;
		case 6: seg23; seg25; seg29; seg20; seg34; seg27; break;
		case 7: seg23; seg22; seg20; break;
		case 8: seg23; seg22; seg20; seg34; seg27; seg25; seg29; break;
		case 9: seg20; seg22; seg23; seg25; seg29; break;
	}
	if (digito4==1) seg35;
}

