Estou começando a aprender C usando o compilador CCS, gostaria de uma ajuda dos colegas, é o seguinte:
Consegui fazer um contador com os displays usando apenas 1 display, minha meta é fazercom que conte de 0 até 9999, multiplexando os mesmos mas este não é o problema, isso eu já resolvi a respeito da multiplx....
Então meu problema não seria multiplexar, mas basicamente como fazer para o programa incrementar e decrementar esse valor , quais as maneiras mais recomendadas de se fazer isso..
Por exemplo, eu creio que possa usar uma int16 afim de fazer a contagem assim, mas como eu faço as demais partes? Dividir o numero em milhar centena dezena e unidade, como posso criar uma sub-rotina pra isso em CCS por exemplo...
Eis meu codigo:
- Código: Selecionar todos
#include <16f628a.h>
#use delay(clock=4000000)
#FUSES NOWDT, INTRC_IO, PUT, NOPROTECT, NOBROWNOUT, NOMCLR, NOLVP, NOCPD
int8 valor=0; //variáveis globais
int8 valor_2=0;
int8 contador=0;
//tabela de converção de números
byte const tabela[]= {0b00000000,//0
0b00010000,//1
0b00100000,//2
0b00110000,//3
0b01000000,//4
0b01010000,//5
0b01100000,//6
0b01110000,//7
0b10000000,//8
0b10010000,//9
0b00000000};
//interrupção do timer 0
#int_timer0
void trata_t0()
{
switch(contador)
{
case 0: //contador=0, mostra display unidades
output_b(tabela[valor]);
output_low(pin_b2);
contador=1;
break;
case 1: //contador=1, mostra display de dezenas
output_b(tabela[valor_2]);
output_high(pin_b2);
contador=0;
break;
}
}
//programa principal
main()
{
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
enable_interrupts(global|int_timer0); //ativa a interrupção do tmr0
while(true)
{
if (input(pin_a4)==0) //se pino ra4=0:
{
valor++; //incrementa valor
if (valor>9) valor=9; //se >9 será =9 (trava incr.)
delay_ms(100); //debounce para o botão
}
else if (input(pin_a7)==0) //se ñ, veja se pino ra7=0:
{
if (valor==0) valor=1; //se valor=0, valor será 1
valor--; //então decr. e torna-se 0 novamente
delay_ms(100); //debounce para o botão
}
}
}
Ele já multiplexa unidade e dezena mas so mexe nas unidades...
Eu uso uma placa lab de teste, pelo que podem ver tenho um 4511 ligado nos pinos RB4 a RB7.
Obrigado pela colaboração.