Sistema de Control
Sistema de Control
Sistema de Control
3) Montaje
I. INTRODUCCION
Anexo # 1
#define RS RD2
#define EN RD3
#define D4 RD4
#define D5 RD5 __delay_ms(5000);
#define D6 RD6 //TMR0IE=1;
#define D7 RD7 con=0;
Lcd_Clear();
#include <stdio.h> Lcd_Set_Cursor(1,1);
#include <stdlib.h> Lcd_Write_String("Cerrando... ");
#include <xc.h> while(cerrada != 1){
#define _XTAL_FREQ 4000000 PORTC=(IZQ[con]);
#include "lcd.h" for(int c=0;c<500;c++){
}
con++;
if(con>=4){con=0;}
// CONFIG }
#pragma config FOSC = XT // Oscillator Selection bits (HS oscillator) Lcd_Clear();
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT Lcd_Set_Cursor(1,1);
disabled) Lcd_Write_String("Profe no se pudo ");
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT Lcd_Set_Cursor(2,1);
disabled) Lcd_Write_String("con el timer :( ");
#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR }
disabled) }
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-
Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR void alarma(){
must be used for programming) RC7 = 1;
#pragma config CPD = OFF // Data EEPROM Memory Code __delay_ms(2000);
Protection bit (Data EEPROM code protection off) RC7 = 0;
#pragma config WRT = OFF // Flash Program Memory Write }
Enable bits (Write protection off; all program memory may be written to
by EECON control) void Teclado_EsperaDejePulsar(void){
#pragma config CP = OFF // Flash Program Memory Code const unsigned char Puerto_init = 0b11110000; //este es el valor que debe
Protection bit (Code protection off) tener el KEY_PORT cuando no se presione boton alguno.
unsigned char a;
/* PORTB = Puerto_init;
* while (1)
*/ {
//Variables teclado __delay_ms(20);
unsigned int tecla = 0; a = PORTB;
int i = 0,comparar = 0, reset = 0; if (Puerto_init == a)
int clave_ingresada[4] = {0,0,0,0} ; break;
int clave[4] = {6,4,2,7} ;
//Variables motor }
int con=0, abierta=0, cerrada = 0; }
unsigned int Num_desbordes=624744, Contador_desbordes=0;
int DERE[4]={ 0b1100,0b0110,0b0011,0b1001}; //Secuencia int int_teclado(){
Unipolar dos Pasos, hacia la Derecha int valor=0;
//y Secuencia Bipolar Paso Normal, while(1){
hacia la Derecha if(RB7==0){
PORTB = 0b0001;
int IZQ[4]={ 0b1001,0b0011,0b0110,0b1100}; //Secuencia if(RB7==1){reset = 1;break;}
Unipolar dos Pasos, hacia la Izquierda PORTB = 0b0010;
//y Secuencia Bipolar Paso Normal, if(RB7==1){abierta=1;break;}
hacia la Derecha PORTB = 0b0100;
//Variables if(RB7==1){cerrada=1;break;}
PORTB = 0b1000;
if(RB7==1){valor=0;break;}
void Abrir_puerta(){ }else{
con=0; if(RB6==0){
Lcd_Clear(); PORTB = 0b0001;
Lcd_Set_Cursor(1,1); if(RB6==1){valor=9;break;}
Lcd_Write_String("Abriendo... "); PORTB = 0b0010;
while(abierta != 1){ if(RB6==1){valor=6;break;}
PORTC=(DERE[con]); PORTB = 0b0100;
for(int c=0;c<500;c++){ if(RB6==1){valor=3;break;}
PORTB = 0b1000;
} if(RB6==1){valor=0;break;}
con++; }else{
if(con>=4){con=0;} if(RB5==0){
} PORTB = 0b0001;
Lcd_Clear(); if(RB5==1){valor=8;break;}
Lcd_Set_Cursor(1,4); PORTB = 0b0010;
Lcd_Write_String("Por favor "); if(RB5==1){valor=5;break;}
Lcd_Set_Cursor(2,3); PORTB = 0b0100;
Lcd_Write_String("ingrese... "); if(RB5==1){valor=2;break;}
PORTB = 0b1000;
if(abierta == 1){ if(RB5==1){valor=0;break;}
}else{ Lcd_Write_String("Clave incorrecta");
if(RB4==0){
PORTB = 0b0001; alarma();
if(RB4==1){valor=7;break;} }
PORTB = 0b0010; i=0;
if(RB4==1){valor=4;break;} }
PORTB = 0b0100;
if(RB4==1){valor=1;break;} }
PORTB = 0b1000; PORTB = 0B11110000;
if(RB4==1){valor=0;break;}
} if(TMR0IF == 0){ //Pregunta si la interrupcion fue por TMR0
} if(abierta == 1){
} if(Contador_desbordes <= Num_desbordes){
} Contador_desbordes++;
} Lcd_Clear();
Lcd_Set_Cursor(1,1);
return valor; Lcd_Write_String("Esperando... ");
RC5=1;
} }else{
RC7=1;
void interrupt interrupciones()
{ while(cerrada != 1){
GIE = 0; PORTC=(IZQ[con]);
if(INTF == 1) //Pregunta si la interrupcion fue por RB0 for(int c=0;c<500;c++){
{
}
} con++;
if(RBIF == 1) //Pregunta si la interrupcion fue por cambios en if(con>=4){con=0;}
RB }
{ Lcd_Clear();
Lcd_Set_Cursor(1,1);
if(i<4) Lcd_Write_String("Puerta cerrado ");
{
tecla=int_teclado(); abierta =0;
clave_ingresada[i++] = tecla; }
Lcd_Write_Int(tecla);
if(reset == 1){ }
Lcd_Clear(); }
Lcd_Set_Cursor(1,1);
Lcd_Write_String("Ingrese la clave: "); RBIF = 0;
Lcd_Set_Cursor(2,1); INTF = 0;
clave_ingresada[0] = 0; TMR0IF = 0;
clave_ingresada[1] = 0; GIE = 1;
clave_ingresada[2] = 0; }
clave_ingresada[3] = 0;
i=0; void main()
comparar = 0; {
reset=0; TRISB = 0B11110000;
} TRISC = 0B00000000;
Teclado_EsperaDejePulsar(); TRISD = 0B00000000;
} INTCON = 0B10001000;
if(i==4) OPTION_REG=0b10000010; //HABILITO PULL-UP EN
{ PUERTO B
if(clave_ingresada[0] == clave[0]) Lcd_Init();
{ Lcd_Clear();
if(clave_ingresada[1] == clave[1]) Lcd_Set_Cursor(1,1);
{ Lcd_Write_String("Ingrese la clave: ");
if(clave_ingresada[2] == clave[2]) Lcd_Set_Cursor(2,1);
{ PORTB=0B00000000;
if(clave_ingresada[3] == clave[3]) PORTC=0B00000000;
{
comparar=1; while(1){
} SLEEP();
} if(comparar == 1){
} Abrir_puerta();
} comparar = 0;
if(comparar == 1) if(abierta == 1){
{
Lcd_Clear(); }
Lcd_Set_Cursor(1,1); }
Lcd_Write_String("Clave correcta"); ]}
}else
{
Lcd_Clear();
Lcd_Set_Cursor(1,1);