Você está na página 1de 4

Displays multiplexados

Array ou Vetor

char display [10] = { 0b11111111, //posição 0


0b01111111, //posição 1
0b00111111, //posição 2
0b00011111, //posição 3
0b00001111, //posição 4
0b00000111, //posição 5
0b00000011, //posição 6
0b00000001, //posição 7
0b00000000, //posição 8
0b10000000, //posição 9
};

portb = display [3]; //irá selecionar a posição 3 - 0b00011111

Outro exemplo, com a variável i valendo 1

i = 1;

portb = display [i]; //irá selecionar a posição 1 - 0b01111111


Configurações para o Conversor A/D do PIC 16F877A

Para um conversor analógico digital (ADC) de 10 bits, em relação a bits


mais e menos significativos, temos a seguinte opção:
Podemos colocar, no caso de 10 bits, os 8 bits mais significativos no
ADRESH e os 2 menos significativos no ADRESL. Com isso, no momento que
for feito um cálculo, perco apenas os bits menos significativos.
Existe a possibilidade de utilizar de modo contrário, mas com isso,
ficaríamos sem os 2 bits mais significativos.

Pela esquerda:
ADRESH__ADRESL  11111111_11xxxxxx

Pela direita:
ADRESH__ADRESL  xxxxxx11_11111111

O bit 7 do ADCON1 configura para obtermos os bits no ADRESH, como


é mostrado abaixo:

ADCON1 = 0b10001110; // configura A0 como entrada analógica

variavel = ADC_read(0); // lê o canal 0 do ADC e joga o valor na variável


Projeto de um Voltímetro com o PIC16F870

int voltimetro=0, dezena =0, unidade =0;


float valor_ad = 0;
char display [10] = { 0b0111111, //posição 0
0b0000110, //posição 1
0b1011011, //posição 2
0b1001111, //posição 3
0b1100110, //posição 4
0b1101101, //posição 5
0b1111101, //posição 6
0b0000111, //posição 7
0b1111111, //posição 8
0b1101111, //posição 9
};

void main( )
{ // Configura todas as entradas analógicas
adcon1 = 0b10000000; // Vref+ = 5V e Vref- = 0V
//O bit 7 do ADCON1 configura para obtermos
// os bits mais significativos no AD
trisb = 0b00000000;
trisa = 0b1;
trisc = 0b00;
while(1)
{
valor_ad = ADC_Read(0); // pega a leitura (10 bits) no AD0

voltimetro = valor_ad*50/1023; //cálculos para conversão de


//valores
dezena = voltimetro/10; //atribui o valor a ser mostrado no
//display da esquerda

unidade = voltimetro - dezena*10; //atribui o valor a ser


//mostrado no display
//da direita
portb = display[dezena];
portc = 0b10;
delay_ms(10);

portb = display[unidade];
portc = 0b01;
delay_ms(10);
}
}
Esquema elétrico do voltímetro - Proteus

Você também pode gostar