-
Posts
14 -
Cadastrado em
-
Última visita
Tópicos solucionados
-
O post de henriquemati em Cronômetro com menu PIC18F4550 utilizando C18 foi marcado como solução
ae galera consegui terminar o cronômetro com menu aqui ,mesmo que nao obtive respostas agradeço,e mudei muita coisa da minha prog antiga no C18,....ela ficou assim:
//************************************************************************************************************************** //realizar um cronometro para 12 horas como descrito no bloco de notas na area de trabalho //************************************************************************************************************************** //inclui as bibliotecas #include <p18f4550.h> //biblioteca padrão do microcontrolador #include <delays.h> // biblioteca padrão dos delays //************************************************************************************************************************** //FOSC = 4MHz //define as configuraçoes do microcontrolador #pragma config WDT = OFF //cao de guarda do tempo reseta pic caso demore para executar uma istrução #pragma config PWRT = ON //espera o clock instabilizar para inicializar #pragma config BOR = OFF //brown-on-reset habilita o resset por baixa tensão #pragma config BORV = 0 //tensão de reset do brown-on-reset #pragma config LVP = OFF //programa de tensão baixa para executar com o pic #pragma config MCLRE = OFF //desabilita ou habilita o pino master-clear #pragma config PBADEN = OFF #pragma config STVREN = OFF //************************************************************************************************************************** //define os nomes aos pinos das entradas #define B1 PORTAbits.RA0 //botao #define B2 PORTAbits.RA1 //botao #define B3 PORTAbits.RA2 //botao #define B4 PORTAbits.RA3 //botao //************************************************************************************************************************** //define os nomes dos pinos das saidas #define D1 PORTBbits.RB0 //display multiplexado #define D2 PORTBbits.RB1 //display multiplexado #define D3 PORTBbits.RB2 //display multiplexado #define D4 PORTBbits.RB3 //display multiplexado #define D5 PORTBbits.RB4 //display multiplexado #define D6 PORTBbits.RB5 //display multiplexado #define DP PORTDbits.RD7 //aciona o decimal-point dos displays #define LED PORTBbits.RB6 //LED #define BZ PORTBbits.RB7 //BUZZER unsigned char horasdezena[13] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7C,0x07,0x7F,0x67,0x3F,0x06,0x5B}; unsigned char crescente[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7C,0x07,0x7F,0x67}; unsigned char dezena[6] = {0x6D,0x66,0x4F,0x5B,0x06,0x3F}; //******************************************************* unsigned char varu[2] = {0x3F,0x06}; unsigned char varv[13] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7C,0x07,0x7F,0x67,0x3F,0x06,0x5B}; unsigned char varw[6] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D}; unsigned char varx[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7C,0x07,0x7F,0x67}; unsigned char vary[6] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D}; unsigned char varz[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7C,0x07,0x7F,0x67}; int reset,enter,a,b,c,d,u,v,w,x,y,z,cont; //******************************************************* void delay() //atraso do multiplex { Delay1KTCYx(2); } //******************************************************* void atraso() //atraso do efeito final { Delay10KTCYx(50); } //******************************************************* void geral() //menu do menu e da contagem { switch(enter) //switch como menu principal das opções { case 0: //caso da introdução while(cont<100) { LED = 0; PORTD = 0x3F; //letra O D1 = 1; delay(); D1 = 0; PORTD = 0x39; //letra c + DP DP = 1; D2 = 1; delay(); D2 = 0; PORTD = 0x5B; //n 2 D3 = 1; delay(); D3 = 0; PORTD = 0x3F; //n 0 D4 = 1; delay(); D4 = 0; PORTD = 0x06; //n 1 D5 = 1; delay(); D5 = 0; PORTD = 0x6D; //n 5 D6 = 1; delay(); D6 = 0; cont++; if(!B1) //função para mudar de caso { while(!B1); //intertravamento do botao enter++; cont = 100; } if(!B2) //função para mudar de caso { while(!B2); //intertravamento do botao enter++; cont = 100; } } cont = 0; if(!B1) //função para mudar de caso { while(!B1); //intertravamento do botao enter++; } if(!B2) //função para mudar de caso { while(!B2); //intertravamento do botao enter++; } cont=0; break; //******************************************************* case 1: //caso da mudança das horas LED = 1; PORTD = varu[a]; D1 = 1; delay(); D1 = 0;; PORTD = varv; D2 = 1; delay(); D2 = 0; PORTD = varw[w]; D3 = 1; delay(); D3 = 0; PORTD = varx[x]; D4 = 1; delay(); D4 = 0; PORTD = vary[y]; D5 = 1; delay(); D5 = 0; PORTD = varz[z]; D6 = 1; delay(); D6 = 0; if(!B1) //otao de ajuste dos valores da variavel { while(!B1); //intertravamento do botao b--; } if(b<10) { a=0; } if(b<0) { b=12; a=1; } if(!B2) //botao para a mudança do caso { while(!B2); //intertravamento do botao enter++; } break; //******************************************************* case 2: //caso do ajuste dos minutos LED = 1; PORTD = varu[a]; D1 = 1; delay(); D1 = 0;; PORTD = varv; D2 = 1; delay(); D2 = 0; PORTD = varw[c]; D3 = 1; delay(); D3 = 0; PORTD = varx[d]; D4 = 1; delay(); D4 = 0; PORTD = vary[y]; D5 = 1; delay(); D5 = 0; PORTD = varz[z]; D6 = 1; delay(); D6 = 0; if(!B1) //botao do ajuste da variavel { while(!B1); d--; } if(c<0) { c=5; d=9; } if(d<0) { c--; d=9; } if(!B2) //botao para a mudança do caso { while(!B2); //intertravamento do botao enter++; d--; } break; //******************************************************* case 3: //caso da contagem dos valores selecionados LED = 0; for(u=a;u>=0;u--) //variavel horas dezena - a { for(v=b;v>=0;v--) //variavel horas unidade - b { BZ = 1; for(w=c;w>=0;w--) //variavel minutos dezena - c { for(x=d;x>=0;x--) //variavel minutos unidade - d { for(y=5;y>=0;y--) //variavel segundos dezena { for(z=9;z>=0;z--) //variavel segundos unidade { BZ = 0; while(cont<28) //travamento do tempo { if(!B4) //botao de reinicio da contagem { return geral(); } LED = 0; PORTD = varu; D1 = 1; delay(); D1 = 0;; PORTD = varv[v]; LED = 0; D2 = 1; delay(); D2 = 0; PORTD = varw[w]; D3 = 1; delay(); D3 = 0; PORTD = varx[x]; LED= 1; D4 = 1; delay(); D4 = 0; PORTD = vary[y]; D5 = 1; delay(); D5 = 0; PORTD = varz[z]; LED = 1; D6 = 1; delay(); D6 = 0; cont++; //variavel para determinar os segundos //***** PAUSA ****** if(!B3) //botao da pausa na contagem { while(!B3) { LED = 1; BZ = 1; PORTD = varu; D1 = 1; delay(); D1 = 0;; PORTD = varv[v]; D2 = 1; delay(); D2 = 0; PORTD = varw[w]; D3 = 1; delay(); D3 = 0; PORTD = varx[x]; D4 = 1; delay(); D4 = 0; PORTD = vary[y]; D5 = 1; delay(); D5 = 0; PORTD = varz[z]; D6 = 1; delay(); D6 = 0; } } } cont=0; //reset da variavel que determina dos segundos } } } } } } LED = 0; enter++; //apos a contagem muda para o caso final break; //******************************************************* case 4: //caso final do menu while(1) { LED = 1; //LED's BZ = 1; //Buzzer PORTD = 0x79; //letra E D1 = 1; delay(); D1 = 0;; PORTD = 0x54; //letra N D2 = 1; delay(); D2 = 0; PORTD = 0x5E; //letra D BZ = 0; //Buzzer D3 = 1; delay(); D3 = 0; PORTD = 0x00; DP = 1; //decimal-point D4 = 1; delay(); D4 = 0; PORTD = 0x00; BZ = 1; //Buzzer DP = 1; //decimal-point D5 = 1; delay(); D5 = 0; PORTD = 0x00; DP = 1; //decimal-point D6 = 1; delay(); D6 = 0; if(!B4) { while(!B4); break; } } reset = 0; //zera a variavel reset enter = 0; //zera a variavel enter break; } } void main() //menu principal de funçoes do pic { ///////////////////// //TRIS define se os pinos serão entradas ou saídas TRISA = 0xFF; TRISB = 0x00; TRISC = 0x00; TRISD = 0x00; TRISE = 0x00; ///////////////////// //PORT define qual sera o nivel lógico que derao começar os pinos ou ports PORTA = 0xFF; PORTB = 0x00; PORTC = 0x00; PORTD = 0x00; PORTE = 0x00; //////////////////// //define entradas analógicas ou digitas desabilitando os resistores de pull-up ADCON1 = 0x0F; /////////////////// //variaveis reset = 0; enter = 0; w=0; x=0; y=0; z=0; //******************** a=1; b=12; c=5; d=9; while(1) { geral(); } }
Sobre o Clube do Hardware
No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais
Direitos autorais
Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais