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