// 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; }