RESOLVI ACHEI UM NA NET E MODIFIQUEI DO MEU JEITO ERA PARA DISPLAY DE 6 DIGITOS MODIFIQUEI PARA 4 OK 100% MUITO OBRIGADO PELA ATENÇÃO. E SERVE PARA VARIOS PICS 16F873A,16F877A,16F882 E MAIS ALGUNS
unsigned short num; //num = numeros 0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ;
unsigned short mask(unsigned short num)//mask mostra os numeros de 0 a 9 (num)
{
switch (num)//indentifica os numeros de 0 a 9
{
case 0 : return 0x40; //define e mostra os numeros dec para hexa 0 = 0x40
case 1 : return 0x79;
case 2 : return 0x24;
case 3 : return 0x30;
case 4 : return 0x19;
case 5 : return 0x12;
case 6 : return 0x02;
case 7 : return 0x78;
case 8 : return 0x00;
case 9 : return 0x10;
}
}
char valor; //
unsigned short shifter;
unsigned short j;
unsigned short portd_index;
unsigned int i;
unsigned short portc_array[4];
float temino,temp;
void interrupt()
{
PORTB = 0;
PORTC = portc_array[portd_index];
PORTB = shifter;
TMR0 = 0;
INTCON = 0x20;
shifter <<= 1;
if (shifter > 32u)
shifter = 1;
portd_index++ ;
if (portd_index > 5u)
portd_index = 0;
}
void main()
{
OPTION_REG = 0x80;
TMR0 = 0;
INTCON =0xA0;
ADCON1 =0x80;
CMCON = 0x07;// desliga os comparadores
TRISA = 0x01;
TRISB = 0;
TRISC = 0;
PORTA = 0;
PORTB = 0;
PORTC = 0;
portd_index = 0;
shifter = 1;
i = 0;
j = 0;
while (1)
{
temp = ADC_Read(0); //seleciona a entrada a ser lida RA0/AN0 =(lm35)
temp = temp*5.0/1023.0;//temperatura a ser lida em bits(150) *5 / 1023(10bits)
temino = temp*1000.0; //
i= temino;// numero (27) a ser mostrado em graus celsius
j = i / 100u; // divid 27 por 100 = 0,27
valor = mask(j);
portc_array[3] = valor;//mostra o numero (2) da temperatura no diplay 1
j = (char)(i / 10u)% 10u;
valor = (mask(j)|0x80);
portc_array[2] = valor; //mostra o numero (7) de temperatura no diplay 2
portc_array[1] = 0x1C;//mostra no display 3 a bolinha da grau celsius
portc_array[0] = 0x46;//mostra no display 4 o C do grau celsius
delay_ms(1000); //tempo de reinicialização ou atualização do programa
}
while (1);
}