HOMENAGEM
† 12 de março de 2016
Quem está conectado?
Há 174 usuários online :: 0 registrados, 0 invisíveis e 174 visitantes :: 3 motores de buscaNenhum
O recorde de usuários online foi de 362 em Sex 9 Abr 2021 - 22:11
Últimos assuntos
Top dos mais postadores
Rafael Silveira (7816) | ||||
Caca Silva (6057) | ||||
renatoscp (3891) | ||||
CMeletronica (3234) | ||||
michel chagas (2791) | ||||
Railson (2119) | ||||
alexsandro rodrigues de a (1835) | ||||
naldo santos (1625) | ||||
ablacon64 (1222) | ||||
gilvantexas (1061) |
Tópicos semelhantes
Medidor de Velocidade
Tranca Eletrônica utilizando o PIC16F877A
+3
limasom
CMeletronica
jucesar
7 participantes
Página 1 de 1
Tranca Eletrônica utilizando o PIC16F877A
Tranca Eletrônica utilizando o PIC16F877A
A fechadura elétrica (usada nos portões eletrônicos) será aberta caso o usuário digitar a senha correta. A senha é um número entre 0 e 999.999. O usuário possuirá um número limitado de tentativas (3 tentativas), e após o sistema irá entrar em bloqueio( led vermelho acenderá). A senha terá que ser definida na primeira vez. Pressione o botão S1, digite a senha e aperte a tecla ENTER. Você poderá alterar a senha quantas vezes quiser.
A fechadura é chaveada pelo relê.
A tecla C do teclado é usado para limpar os dígitos do display.
Nesse projeto utilizou-se um teclado 4x3, um display LCD 20x2 e para o microcontrolador foi utilizado um clock de 4Mhz.
DOWNLOAD:
Firmware: https://sites.google.com/site/microcontrolandos/arquivos/Tranca.hex?attredirects=0&d=1
Arquivo-Fonte: https://sites.google.com/site/microcontrolandos/arquivos/Tranca.asm?attredirects=0&d=1
Arquivo de simulação do Proteus: https://sites.google.com/site/microcontrolandos/arquivos/Tranca.DSN?attredirects=0&d=1
CóDIGO-FONTE: (Compilador MikroC PRO PIC)
sbit LCD_RS at RC4_bit;
sbit LCD_EN at RC5_bit;
sbit LCD_D4 at RC0_bit;
sbit LCD_D5 at RC1_bit;
sbit LCD_D6 at RC2_bit;
sbit LCD_D7 at RC3_bit;
sbit LCD_RS_Direction at TRISC4_bit;
sbit LCD_EN_Direction at TRISC5_bit;
sbit LCD_D4_Direction at TRISC0_bit;
sbit LCD_D5_Direction at TRISC1_bit;
sbit LCD_D6_Direction at TRISC2_bit;
sbit LCD_D7_Direction at TRISC3_bit;
char keypadPort at PORTD;
//VARIAVEIS
bit clique,Enter,limpar,oldstate;
short kp,dgt,tentativa;
char senha[6];
//ROTINA DE INTERRPÇÃO
void main() {
//CONFIGURAÇÃO DOS REGISTROS
TRISB=0b10000000;
PORTB=0;
//BIT DE STATUS
clique=0;
Enter=0;
limpar=0;
oldstate=0;
//VARIAVEIS
tentativa=0;
Keypad_Init();
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
while(1){
kp = Keypad_Key_Click();
if(kp){
clique=1;
}else{
clique=0;
}
if(kp==15){
Enter=1;
}else{
Enter=0;
}
if(kp==13){
limpar=1;
}else{
limpar=0;
}
switch(kp) {
case 1: kp = 1; break;
case 2: kp = 2; break;
case 3: kp = 3; break;
case 5: kp = 4; break;
case 6: kp = 5; break;
case 7: kp = 6; break;
case 9: kp = 7; break;
case 10: kp = 8; break;
case 11: kp = 9; break;
case 13: kp = 0; dgt = -1; break;
case 14: kp = 0; break;
case 15: kp = 0; dgt = -1; break;
}
if(clique){
dgt++;
if(dgt==7) dgt=1;
switch(dgt){
case 1:
senha[0] = kp;
break;
case 2:
senha[1] = senha[0];
senha[0] = kp;
break;
case 3:
senha[2] = senha[1];
senha[1] = senha[0];
senha[0] = kp;
break;
case 4:
senha[3] = senha[2];
senha[2] = senha[1];
senha[1] = senha[0];
senha[0] = kp;
break;
case 5:
senha[4] = senha[3];
senha[3] = senha[2];
senha[2] = senha[1];
senha[1] = senha[0];
senha[0] = kp;
break;
case 6:
senha[5] = senha[4];
senha[4] = senha[3];
senha[3] = senha[2];
senha[2] = senha[1];
senha[1] = senha[0];
senha[0] = kp;
break;
}
}
if(PORTB.F7){
if(Enter){
if(tentativa<=3){
if(senha[5]==EEPROM_Read(0x00) && senha[4]==EEPROM_Read(0x01) && senha[3]==EEPROM_Read(0x02) &&
senha[2]==EEPROM_Read(0x03) && senha[1]==EEPROM_Read(0x04) && senha[0]==EEPROM_Read(0x05)){
PORTB.F0 = ~PORTB.F0;
lcd_out(2,15," OK ");
senha[0]=0;senha[1]=0;senha[2]=0;
senha[3]=0;senha[4]=0;senha[5]=0;
}else{
tentativa++;
lcd_out(2,15,"ERROR");
senha[0]=0;senha[1]=0;senha[2]=0;
senha[3]=0;senha[4]=0;senha[5]=0;
}
}else{
lcd_out(2,15," FIM ");
senha[0]=0;senha[1]=0;senha[2]=0;
senha[3]=0;senha[4]=0;senha[5]=0;
}
dgt=0;
}
}else{
oldstate=1;
if(Enter){
EEPROM_Write(0x00,senha[5]);
EEPROM_Write(0x01,senha[4]);
EEPROM_Write(0x02,senha[3]);
EEPROM_Write(0x03,senha[2]);
EEPROM_Write(0x04,senha[1]);
EEPROM_Write(0x05,senha[0]);
senha[0]=0;
senha[1]=0;
senha[2]=0;
senha[3]=0;
senha[4]=0;
senha[5]=0;
dgt=0;
}
}
if(PORTB.F7 && oldstate){
lcd_cmd(_LCD_CLEAR);
oldstate=0;
}
//Tecla C
if(limpar){
senha[0]=0;
senha[1]=0;
senha[2]=0;
senha[3]=0;
senha[4]=0;
senha[5]=0;
dgt=0;
}
Lcd_Out(1,1,"Tranca Eletronica");
if(PORTB.F7){
Lcd_Out(2,1,"SENHA: ");
}else{
Lcd_Out(2,1,"NOVA SENHA: ");
}
Lcd_Chr_CP(senha[5]+48);
Lcd_Chr_CP(senha[4]+48);
Lcd_Chr_CP(senha[3]+48);
Lcd_Chr_CP(senha[2]+48);
Lcd_Chr_CP(senha[1]+48);
Lcd_Chr_CP(senha[0]+48);
Lcd_Out_CP(" ");
delay_ms(10);
}
}
A fechadura elétrica (usada nos portões eletrônicos) será aberta caso o usuário digitar a senha correta. A senha é um número entre 0 e 999.999. O usuário possuirá um número limitado de tentativas (3 tentativas), e após o sistema irá entrar em bloqueio( led vermelho acenderá). A senha terá que ser definida na primeira vez. Pressione o botão S1, digite a senha e aperte a tecla ENTER. Você poderá alterar a senha quantas vezes quiser.
A fechadura é chaveada pelo relê.
A tecla C do teclado é usado para limpar os dígitos do display.
Nesse projeto utilizou-se um teclado 4x3, um display LCD 20x2 e para o microcontrolador foi utilizado um clock de 4Mhz.
DOWNLOAD:
Firmware: https://sites.google.com/site/microcontrolandos/arquivos/Tranca.hex?attredirects=0&d=1
Arquivo-Fonte: https://sites.google.com/site/microcontrolandos/arquivos/Tranca.asm?attredirects=0&d=1
Arquivo de simulação do Proteus: https://sites.google.com/site/microcontrolandos/arquivos/Tranca.DSN?attredirects=0&d=1
CóDIGO-FONTE: (Compilador MikroC PRO PIC)
sbit LCD_RS at RC4_bit;
sbit LCD_EN at RC5_bit;
sbit LCD_D4 at RC0_bit;
sbit LCD_D5 at RC1_bit;
sbit LCD_D6 at RC2_bit;
sbit LCD_D7 at RC3_bit;
sbit LCD_RS_Direction at TRISC4_bit;
sbit LCD_EN_Direction at TRISC5_bit;
sbit LCD_D4_Direction at TRISC0_bit;
sbit LCD_D5_Direction at TRISC1_bit;
sbit LCD_D6_Direction at TRISC2_bit;
sbit LCD_D7_Direction at TRISC3_bit;
char keypadPort at PORTD;
//VARIAVEIS
bit clique,Enter,limpar,oldstate;
short kp,dgt,tentativa;
char senha[6];
//ROTINA DE INTERRPÇÃO
void main() {
//CONFIGURAÇÃO DOS REGISTROS
TRISB=0b10000000;
PORTB=0;
//BIT DE STATUS
clique=0;
Enter=0;
limpar=0;
oldstate=0;
//VARIAVEIS
tentativa=0;
Keypad_Init();
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
while(1){
kp = Keypad_Key_Click();
if(kp){
clique=1;
}else{
clique=0;
}
if(kp==15){
Enter=1;
}else{
Enter=0;
}
if(kp==13){
limpar=1;
}else{
limpar=0;
}
switch(kp) {
case 1: kp = 1; break;
case 2: kp = 2; break;
case 3: kp = 3; break;
case 5: kp = 4; break;
case 6: kp = 5; break;
case 7: kp = 6; break;
case 9: kp = 7; break;
case 10: kp = 8; break;
case 11: kp = 9; break;
case 13: kp = 0; dgt = -1; break;
case 14: kp = 0; break;
case 15: kp = 0; dgt = -1; break;
}
if(clique){
dgt++;
if(dgt==7) dgt=1;
switch(dgt){
case 1:
senha[0] = kp;
break;
case 2:
senha[1] = senha[0];
senha[0] = kp;
break;
case 3:
senha[2] = senha[1];
senha[1] = senha[0];
senha[0] = kp;
break;
case 4:
senha[3] = senha[2];
senha[2] = senha[1];
senha[1] = senha[0];
senha[0] = kp;
break;
case 5:
senha[4] = senha[3];
senha[3] = senha[2];
senha[2] = senha[1];
senha[1] = senha[0];
senha[0] = kp;
break;
case 6:
senha[5] = senha[4];
senha[4] = senha[3];
senha[3] = senha[2];
senha[2] = senha[1];
senha[1] = senha[0];
senha[0] = kp;
break;
}
}
if(PORTB.F7){
if(Enter){
if(tentativa<=3){
if(senha[5]==EEPROM_Read(0x00) && senha[4]==EEPROM_Read(0x01) && senha[3]==EEPROM_Read(0x02) &&
senha[2]==EEPROM_Read(0x03) && senha[1]==EEPROM_Read(0x04) && senha[0]==EEPROM_Read(0x05)){
PORTB.F0 = ~PORTB.F0;
lcd_out(2,15," OK ");
senha[0]=0;senha[1]=0;senha[2]=0;
senha[3]=0;senha[4]=0;senha[5]=0;
}else{
tentativa++;
lcd_out(2,15,"ERROR");
senha[0]=0;senha[1]=0;senha[2]=0;
senha[3]=0;senha[4]=0;senha[5]=0;
}
}else{
lcd_out(2,15," FIM ");
senha[0]=0;senha[1]=0;senha[2]=0;
senha[3]=0;senha[4]=0;senha[5]=0;
}
dgt=0;
}
}else{
oldstate=1;
if(Enter){
EEPROM_Write(0x00,senha[5]);
EEPROM_Write(0x01,senha[4]);
EEPROM_Write(0x02,senha[3]);
EEPROM_Write(0x03,senha[2]);
EEPROM_Write(0x04,senha[1]);
EEPROM_Write(0x05,senha[0]);
senha[0]=0;
senha[1]=0;
senha[2]=0;
senha[3]=0;
senha[4]=0;
senha[5]=0;
dgt=0;
}
}
if(PORTB.F7 && oldstate){
lcd_cmd(_LCD_CLEAR);
oldstate=0;
}
//Tecla C
if(limpar){
senha[0]=0;
senha[1]=0;
senha[2]=0;
senha[3]=0;
senha[4]=0;
senha[5]=0;
dgt=0;
}
Lcd_Out(1,1,"Tranca Eletronica");
if(PORTB.F7){
Lcd_Out(2,1,"SENHA: ");
}else{
Lcd_Out(2,1,"NOVA SENHA: ");
}
Lcd_Chr_CP(senha[5]+48);
Lcd_Chr_CP(senha[4]+48);
Lcd_Chr_CP(senha[3]+48);
Lcd_Chr_CP(senha[2]+48);
Lcd_Chr_CP(senha[1]+48);
Lcd_Chr_CP(senha[0]+48);
Lcd_Out_CP(" ");
delay_ms(10);
}
}
jucesar- Nível 1
- Mensagens : 11
Data de inscrição : 01/02/2011
Idade : 54
Localização : Santa Bárbara-MG
Re: Tranca Eletrônica utilizando o PIC16F877A
Opa amigo legal este projeto , eu tenho um projeto que vou postar aqui depois é a mesma ideia porem usa um pci 16f628 , e tem a opção de gravar de 64 a 128 senhas individuais para o mesmo proposito
CMeletronica- CONVIDADO DE HONRA
- Mensagens : 3234
Data de inscrição : 30/01/2013
Idade : 44
Localização : TRÊS RIOS
Re: Tranca Eletrônica utilizando o PIC16F877A
amigo
boa noite , estou tentando baixar os arquivos mas da pagina não encontrada
boa noite , estou tentando baixar os arquivos mas da pagina não encontrada
limasom- Nível 1
- Mensagens : 4
Data de inscrição : 23/08/2013
Idade : 51
Localização : brasil
Re: Tranca Eletrônica utilizando o PIC16F877A
nenhum link nao funciona
joab ribeiro- Nível 2
- Mensagens : 52
Data de inscrição : 30/11/2011
Idade : 43
Localização : jaboti parana
Re: Tranca Eletrônica utilizando o PIC16F877A
Link para baixar todo o projeto:
TRANCA ELETRONICA.RAR
TRANCA ELETRONICA.RAR
_________________
Caca Silva- ADMINISTRADOR
- Mensagens : 6057
Data de inscrição : 30/01/2011
Idade : 43
Localização : Ritápolis MG
Re: Tranca Eletrônica utilizando o PIC16F877A
cara muito bom seu projeto.qual a senha gravada no pic?
pedroladislau- Nível 1
- Mensagens : 1
Data de inscrição : 05/10/2015
Idade : 42
Localização : SÃO PAULO SP
Qual é a senha!
A senha no projeto era para ser 012345,mas não tem como começar do zero.
Gostaria de uma instrução para a senha correta.
Abraço a todos
Gostaria de uma instrução para a senha correta.
Abraço a todos
Antonio Sergio Godoy- Nível 1
- Mensagens : 1
Data de inscrição : 14/11/2015
Idade : 65
Localização : Rio Claro
Tópicos semelhantes
» Usando a entrada analógica do PIC16F877A
» Medidor de capacitância utilizando DVM
» fazendo placa de circuito impresso utilizando plotter de recorte
» Medidor de capacitância utilizando DVM
» fazendo placa de circuito impresso utilizando plotter de recorte
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|
Dom 14 Abr 2024 - 12:58 por ROLDAO
» PI ITALIANO 6V DETECTOR DE METAL
Qua 10 Abr 2024 - 19:10 por Fardin pezzhan
» DETECTOR DE METAIS IDX-PRO
Sex 5 Abr 2024 - 19:51 por Fardin pezzhan
» Fonte Chaveada 2000W SG3525 & IR2110
Qui 4 Abr 2024 - 12:55 por sandy silva de oliveira
» Todas as revistas CTA VOL 1 A 12 - aproveitem.
Ter 2 Abr 2024 - 22:28 por Rodrigo L Santos
» >>>>>>> Sobre a criação de novos tópicos<<<<<<<<<<<<<<<
Dom 24 Mar 2024 - 16:10 por crisnich
» Defeito intermitente amplificador Ciclotron TIP5000
Qua 20 Mar 2024 - 9:13 por fastaveira
» Esquema Amplificador Audio Leader AL 5.0
Qua 20 Mar 2024 - 9:01 por fastaveira
» MK4000 - FONTE CHAVEADA FULL BRIDGE
Dom 17 Mar 2024 - 18:43 por sandy silva de oliveira
» amplificador class h tailandes
Sex 15 Mar 2024 - 22:41 por mehuysal
» Amplificador Super Strong
Qui 14 Mar 2024 - 13:03 por Reginaldo Silva
» Amplificador Classe D UCD1500
Qua 13 Mar 2024 - 13:07 por Guille
» NS450 - FONTE CHAVEADA PARTE 2
Seg 11 Mar 2024 - 6:55 por ffernand3s
» Amplificador Fonte Simples em teia de aranha
Sex 1 Mar 2024 - 12:17 por Reginaldo Silva
» Manutenção Gradiente 366 / 266
Qui 29 Fev 2024 - 21:40 por tiaogaviao