

Pessoal, preciso da ajuda de vocês, pois faço faculdade federal, e não posso ser reprovado, senão, perderei minha bolsa, e não tenho condições de pagar uma faculdade, já rodei a internet inteira, e ninguem me ajuda, só preciso terminar meu projeto para mostrar para o professor, me ajudem amigos !!!! Alguma alma caridosa me ajude, já estou desesperado. Vocês são cheios de experiências em programação para PIC, me ajudem para eu não perder a faculdade.
Eu preciso terminar meu programa em linguagem C para microcontrolador 18F4520, estou desenvolvendo um projeto, com base no compilador MikroC.
Estou desenvolvendo um sistema de fechadura eletrônica, para mostrar na faculdade, pois é um projeto de dificil implementação, por isso que o professor pediu.
Minha duvida é:
Eu criei um sistema de varredura de teclado matriz, onde as teclas digitadas, são exibidas em um LCD 16x2, modo 8 bits, estou utilizando um PIC 18F4520.
O professor pediu para implementar nesse codigo que eu criei, um sistema de senha, onde o o sistema já possua uma senha de fábrica padrão, e atravez da tecla de * ( asterisco ), o usuário entra no modo gravação, onde ele pode mudar a senha de fabrica.
Alguém me ajuda, a aprender a fazer isso ?!?!?
Segue o programinha que criei até agora.
- Código: Selecionar todos
//********** Inicio da configuração do LCD 16x2 **********//
void inicializa_lcd(void){
Lcd8_Config(&PORTE,&PORTD,2,1,0,7,6,5,4,3,2,1,0); // Configura portas //
Lcd8_Cmd(Lcd_Clear); // Limpa o LCD 16x2 //
Lcd8_Cmd(LCD_BLINK_CURSOR_ON); // Apaga o cursor do LCD 16x2 //
delay_ms (100); // Da um delay de 100 milisegundos //
}
//********** Fim da configuração do LCD 16x2 **********//
//********** Inicio da rotina do LCD 16x2 **********//
void lcd(char var1[5] , char avanca){
trisd= 0; //configura portd como saida
if (avanca==0){ // Se for igual a zero, escreve na casa seguinte
Lcd8_cmd(Lcd_Clear);
Lcd8_out(1,1,"SENHA:");
Lcd8_out_cp(var1);
}
if (avanca==1) { // Se for igual a 1 escreve o caractere no LCD
Lcd8_out_cp(var1);
trisd= 255; //configura portd como entrada
}
}
//********** Fim da rotina do LCD 16x2 **********//
//********** Inicio da configuração principal **********//
void main() {
adcon1= 0x06; //define pinos AD como I/O de uso geral
trisd= 255; //configura portd como entrada
trisa= 0; //configura porta como saida
inicializa_lcd(void); //chama subrotina de inicialização do lcd
lcd(" ",0);
trisb= 0; //configura portb como saida
trisd= 255; //configura portd como entrada
portb= 255; //portb em FF
portd= 255; //portd em FF
do {
portb.f0= 0; //habilita primeira coluna do teclado
if (portD.f0 == 0)
lcd("10",1);
else if (portD.f1 == 0)
lcd("7",1);
else if (portD.f2 == 0)
lcd("4",1);
else if (portD.f3 == 0)
lcd("1",1);
portb.f0= 1; //desabilita primeira coluna do teclado
portb.f1= 0; //habilita segunda coluna do teclado
if (portD.f0 == 0)
lcd("11",1);
else if (portD.f1 == 0)
lcd("8",1);
else if (portD.f2 == 0)
lcd("5",1);
else if (portD.f3 == 0)
lcd("2",1);
portb.f1= 1; //desabilita segunda coluna do teclado
portb.f2= 0; //habilita terceira coluna do teclado
if (portD.f0 == 0)
lcd("12",1);
else if (portD.f1 == 0)
lcd("9",1);
else if (portD.f2 == 0)
lcd("6",1);
else if (portD.f3 == 0)
lcd("3",1);
portb.f2= 1; //desabilita terceira coluna do teclado
delay_ms(100);
} while(1);
}
//********** Fim da configuração principal **********//
Desde já, muito obrigado galera, conto com a ajuda de vocês.