Nesse exemplo mostro como criar uma rotina extremamente simples para a verificação de uma senha em sistemas microcontrolados.

Esse exemplo pode ser alterado para não mostrar os valores digitados.

Usar no Proteus 7.10 ou superior.


Fazer o download: [LINGUAGEM C] Validando uma senha no microcontrolador


Segue o código:

[sections] [section title=”Código Fonte”] [codesyntax lang=”c”] /*
DATEK Tecnologia Eletrônica Ltda.

********************************************************************************
PROGRAMA EXEMPLO: Mostrar como verificar login e senha.
OBJETIVO: Aprender como criar rotinas para verificar login e senha.
AUTOR: Fabio Mulero.[fabio@datek.com.br] ********************************************************************************
MICROCONTROLADOR: PIC16F877A.

PLACA DE DESENVOLVIMENTO: SIMULAÇÃO NO PROTEUS

SOFTWARE: MikroC PRO for PIC Versão: 6.0

********************************************************************************
*/
//################## PROTOTIPOS DE FUNÇÃO ######################################

unsigned char VerificaSenha();

//################## VARIAVEIS GLOBAIS #########################################
unsigned char STATUS_GERAL; // ARMAZENA O STATUS DA APLICAÇÃO
// BIT0 – 1 SE LOGADO, 0 NÃO LOGADO
// BIT1 –
// BIT2 –
// BIT3 –
// BIT4 –
// BIT5 –
// BIT6 –
// BIT7 –

#define SENHA 1234 // SENHA PARA VERIFICAÇÃO

// CONFIGURAÇÃO DOS PINOS DO LCD.
sbit LCD_RS at RE2_bit;
sbit LCD_EN at RE1_bit;
sbit LCD_D7 at RD7_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D4 at RD4_bit;

// DIREÇÃO DOS PINOS.
sbit LCD_RS_Direction at TRISE2_bit;
sbit LCD_EN_Direction at TRISE1_bit;
sbit LCD_D7_Direction at TRISD7_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D4_Direction at TRISD4_bit;

void main() {
// VARIAVEIS LOCAIS

// INICIALIZAÇÃO DO MICROCONTROLADOR
TRISB=0X0F; // PINOS RB0,RB1,RB2 E RB3 COMO ENTRADA OUTROS COMO SAIDA
PORTB=0; // ZERA O PORTB

CMCON=0X07; // DESLIGA OS COMPARADORES

ADCON1 = 0X06; // DESLIGA CANAIS A/D

STATUS_GERAL=0; // ZERA OS STATUS

// CONFIG. LCD NO MODO 4 BITS
Lcd_Init(); // INICIALIZA LCD.

Lcd_Cmd(_LCD_CLEAR); // APAGA DISPLAY.
Lcd_Cmd(_LCD_CURSOR_OFF); // DESLIGA CURSOR.
Lcd_Out(1,1,"DATEK TECNOLOGIA");
Lcd_Out(2,1," Exemplo Senha ");
Delay_ms(5000); // PAUSA POR 5 SEGUNDOS
while(1) // LOOP INFINITO
{
if(!STATUS_GERAL.B0) // SE NÃO ESTIVER LOGADO
{
if(VerificaSenha()) // VERIFICA A SENHA
{
// BLOCO SENHA CORRETA
Lcd_Out(2,1,"Senha OK");
STATUS_GERAL.B0=1; // INDICA PARA O RESTO DO PROGRAMA QUE A SENHA ESTÁ OK
Delay_ms(5000);
Lcd_Out(1,1,"DATEK TECNOLOGIA");
Lcd_Out(2,1,"USUARIO LOGADO ");
}
else
{
// BLOCO SENHA INCORRETA
Lcd_Out(2,1,"Senha ERRO");
STATUS_GERAL.B0=0; // INDICA PARA O RESTO DO PROGRAMA QUE A SENHA NÃO ESTÁ OK
Delay_ms(5000);
}
}
else // SE ESTIVER LOGADO
{
PORTB.B7=~PORTB.B7;
Delay_1sec();
}
}
}

unsigned char VerificaSenha()
{
unsigned int SenhaDigitada=0,SenhaAUX;
unsigned char Tecla=0,ValorAux=0;
unsigned char StatusTecla=0;

char txt[6];

Lcd_Cmd(_LCD_CLEAR); // Apaga display.
Lcd_Out(1,1,"Digite sua Senha:");
do
{
if((PORTB.RB0==0)&&(StatusTecla.B0==0)){ // Incrementa somente uma vez quando a tecla for pressionada.
StatusTecla.B0=1;
if(++Tecla>9)
{
Tecla=0;
}
}
if((PORTB.RB0==1)&&(StatusTecla.B0==1)){ // Volta a disponibilizar a opção de incremento quando a tecla for solta.
StatusTecla.B0=0;
}

if((PORTB.RB1==0)&&(StatusTecla.B1==0)){ // Decrementa somente uma vez quando a tecla for pressionada.
StatusTecla.B1=1;
if(–Tecla>9)
{
Tecla=9;
}
}
if((PORTB.RB1==1)&&(StatusTecla.B1==1)){ // Volta a disponibilizar a opção de Decremento quando a tecla for solta.
StatusTecla.B1=0;
}

if((PORTB.RB2==0)&&(StatusTecla.B2==0)){ // Quando a tecla for pressionada muda o digito.
StatusTecla.B2=1;
SenhaDigitada+=Tecla;
if(++ValorAux>3)
{
StatusTecla.B3=1;
}
else
{
SenhaDigitada*=10;
}
Tecla=0;
}
if((PORTB.RB2==1)&&(StatusTecla.B2==1)){ // Volta a disponibilizar a opção de mudar o digito.
StatusTecla.B2=0;
}
SenhaAUX = SenhaDigitada+Tecla;
Lcd_Chr(2,4,(SenhaAUX%10)+’0′);
SenhaAUX/=10;
Lcd_Chr(2,3,(SenhaAUX%10)+’0′);
SenhaAUX/=10;
Lcd_Chr(2,2,(SenhaAUX%10)+’0′);
SenhaAUX/=10;
Lcd_Chr(2,1,(SenhaAUX%10)+’0′);

}while(!StatusTecla.B3);

return(SenhaDigitada==SENHA);
}
[/codesyntax] [/section] [section title=”Esquema Elétrico”]

Esquema Elétrico do Sistema Login
Esquema Elétrico do Sistema Login
[/section] [/sections]
Obrigado e até o próximo post.

DATEK Tecnologia Eletrônica
[LINGUAGEM C] Validando uma senha no microcontrolador
Tags:                 

Deixe uma resposta

%d blogueiros gostam disto: