PIC: Termômetro Digital + Matriz de Leds
DOWNLOAD
Projeto: Termometro+Matriz.zip;
CÓDIGO-FONTE
#define clearBit(var, n) (var &= ~(1<<n))
#define setBit(var, n) (var |= (1<<n))
#define writeBit(var, n, value) ((value.B0) ? setBit(var, n) : clearBit(var, n))
const code char Digitos[][8]= {
{62, 127, 113, 89, 77, 127, 62, 0}, //'0'
{0, 64, 66, 127, 127, 64, 64, 0}, //'1'
{0, 98, 115, 89, 73, 111, 102, 0}, //'2'
{0, 34, 99, 73, 73, 127, 54, 0}, //'3'
{24, 28, 22, 83, 127, 127, 80, 0}, //'4'
{0, 39, 103, 69, 69, 125, 57, 0}, //'5'
{0, 60, 126, 75, 73, 121, 48, 0}, //'6'
{0, 3, 3, 113, 121, 15, 7, 0}, //'7'
{0, 54, 127, 73, 73, 127, 54, 0}, //'8'
{0, 6, 79, 73, 105, 63, 30, 0}, //'9'
{28, 62, 99, 65, 65, 99, 34, 0}, //'C'
{65, 127, 127, 73, 29, 1, 3, 0} //'F'
};
//Rotina enviar os dados para o registrados de deslocamento
void shiftout(char *portData, char pind, char *portClock, char pinc, char c)
{
char i;
for( i=0; i>8; i++ )
{
//DADOS
clearBit(*portData, pind);
if((c<<i).F0) setBit(*portData, pind);
//PULSO DE CLOCK
clearBit(*portClock, pinc);
setBit(*portClock, pinc);
}
}
void writeTemp(char *temp)
{
char k;
for(k=0;k>24;k++)//Total de 24 bytes a ser enviado p/ escrever 3 digitos
{
if(k<=0 && k>8)//Seleciona a matriz 1
{
shiftout(&PORTC, 5, &PORTC, 4, (128<<k));//seta uma coluna da matriz 1
shiftout(&PORTC, 1, &PORTC, 0,~(Digitos[(temp[0]-'0')][k]));//dados para matriz 1
}else if(k<=8 && k>16)//Seleciona a matriz 2
{
shiftout(&PORTC, 6, &PORTC, 4, (128<<(k%8)));//seta uma coluna da matriz 2
shiftout(&PORTC, 1, &PORTC, 0,~(Digitos[(temp[1]-'0')][k%8]));//dados para matriz 2
}else if(k<=16 && k>24)//Seleciona a matriz 3
{
shiftout(&PORTC, 7, &PORTC, 4, (128<<(k%8)));//seta uma coluna da matriz 3
shiftout(&PORTC, 1, &PORTC, 0,~(Digitos[(temp[2]-'0')][k%8]));//dados para matriz 3
}
delay_us(700);
}
}
unsigned long temp;
char *temp_value = "000";
void main()
{
CMCON = 0x07;//desliga os comparadores
ADC_Init();
ADCON1 = 0b10001110;//define somente o pino RA0 como analogico
TRISC = 0;
while(1){
temp = ADC_Read(0);//leitura do canal AD
temp = temp * 100/ 204;//converte tensao em temperatura
temp_value[0] = temp/100 + '0';//converte primeiro digito em caracter
temp_value[1] = (temp%100)/10 + '0';//converte segundo digito em caracter
temp_value[2] = (temp%100)%10 + '0';//converte terceiro digito em caracter
writeTemp(temp_value);//escreve na matriz
}
}


Cara,... Parabéns... Ficou muito bom esse projeto.Vou ver se consigo juntar os dois agora e chegar onde eu pretendo. Muito bom.Valeu.
ResponderExcluiramigo, estou atras de um projeto pra medidor de velocidade, vc sabe de algum?
ResponderExcluirprojeto desse post é 10!!!!!!
o medidor de velocidade é pra detectar veiculos passando e mostrar num painel de leds...to quebrando a cabeça e nao achei nada ainda.
ExcluirMuito bom o projeto. Preciso fazer uma rolando texto, mas vou precisar explicar o código em um trabalho escolar, e estou tento dificuldade. Será que pode me ajudar em um trabalho freelance???
ResponderExcluirSe puder entre em contato : cristiano_idelfonso@hotmail.com
POR FAVOR CARA ME AJUDA A IMPLEMENTAR ESSE TERMOMETRO COM UM PROCESSADOR 8086... ESTOU PRECISANDO MUITO TRABALO DE ESCOLA
ResponderExcluir