You are on page 1of 6

Ejercicio 1

LCD1
LM016L

VSS VDD VEE

RS RW E 4 5 6

1 2 3

U1
9 10 1 2 3 4 5 6 7 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD 21 22 23 24 25 26 27 28 11 12 13 14 15 16 17 18

R2
10k

R1
10k

RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT PIC16F876

D1

D2

R3
180

R4
180

#include <16F876.h> #fuses XT,NOWDT #use delay(clock= 4000000) #include <lcd.c> #use standard_io(C) #use standard_io(A) enum funciones {med,cal,ini}; //Asigna un valor a cada elemento //med=0, cal=1 e ini=2 void medir(void){ //Funcin de medir //algoritmo correspondiente output_toggle(pin_C0); } void calibrar(void){ //Funcin de calibrar //algoritmo correspondiente output_toggle(pin_C1); } void inicializar(void){ //Funcin de inicializar //algoritmo correspondiente output_toggle(pin_C2); }

void run_func(int numfunc){ //Asignacin de la funcin a realizar //viene dada por la variable "item" switch(numfunc) { case med: medir(); break; case cal:

7 8 9 10 11 12 13 14

D0 D1 D2 D3 D4 D5 D6 D7

SELECCION

MENU

INICIALIZAR

D3

CALIBRAR

MEDIR
R5
180

calibrar(); break; case ini: inicializar(); break; } } void main() { char item; //Variables de funciones char n_menus = 3; //Nmero de funciones // bit_set(TRISA,0); lcd_init(); while (1) { if (input(PIN_A0) == 1) { //Detecta botn de seleccin item++; //Si pulsa aumenta la variable delay_ms(300); //Para evitar rebotes lcd_putc('\f'); } if (item > (n_menus-1)) { //Si la variable supera el nmero de... item = 0; } //funciones la inicializa switch (item) { case 0: lcd_gotoxy(1,1); printf(lcd_putc, "MEDIR"); lcd_gotoxy(1,1); break; case 1: printf(lcd_putc, "CALIBRAR"); lcd_gotoxy(1,1); break; case 2: printf(lcd_putc, "INICIALIZAR"); lcd_gotoxy(1,1); break; } if (input(PIN_A1) == 1) //Si se pulsa el botn de seleccin {delay_ms(200); run_func(item);} //se llama a la funcin correspondiente } }

Ejercicio 2

#include <16F876.h> #use delay(clock=4000000,RESTART_WDT) #byte port_b=6 #org 0x1F00, 0x1FFF {}//para proteger el cdigo //del cargador main() { port_b=1; set_tris_b(0x00); // todo el puerto B como salida while(1) { if(input(PIN_A0)) rotate_left(&port_b,1); else rotate_right(&port_b,1); delay_ms(100); } }

Ejercicio #3

#include <16F876.h> #use delay(clock=4000000,RESTART_WDT) #byte port_b=6 #org 0x1F00, 0x1FFF {}//para proteger el cdigo del cargador main() { unsigned int const display[10]={0x3f,0x6,0x5,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f}; int x=0; set_tris_b(0x00); // todo el puerto B como salida port_b=0; for(;;) { x++; If(x>9) x=0; port_b=display[x]; delay_ms(500); } }

Ejercicio 4.

Disene un sistema basico para el control de accesos; a traves de un teclado de 3x4 introducir una clave de 3 digitos que cuando sea correcta abra una puerta(con un pulso a un rele) y lo indique en una pantalla de LCD. Guardar la clave en la memoria EEPROM.

LCD2
LM016L

VSS VDD VEE

RS RW E 4 5 6

U1
9 10 1 2 3 4 5 6 7 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD 21 22 23 24 25 26 27 28 11 12 13 14 15 16 17 18 C

4 7

5 8 0

6 9 #

RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT PIC16F876

RL1 R1
1k 12V

BAT1 Q2
BD135 12V

CERRADURA

#include <16F876.h> #fuses XT,NOWDT,NOPROTECT,NOLVP #use delay(clock= 4000000) #use standard_io(a) #include <lcd.c> #include <kbd.c> #include <stdlib.h> #rom 0x2100={'7','2','3'} //Posicin 0,1 y 2 de la Eeprom con los datos //7,2, y 3 respectivamente void main() { char k; int i; char data[3], clave[3]; //Matrices para guardar clave y datos lcd_init(); kbd_init(); port_b_pullups(TRUE); while (TRUE) { i=0; //posicin de la matriz printf(lcd_putc,"\fpulsar tecla 1\n"); //Para primer dato

7 8 9 10 11 12 13 14

1 2 3

D0 D1 D2 D3 D4 D5 D6 D7

while(i<=2){ //Para tres datos k=kbd_getc(); //Lee el teclado if (k!=0) //Si se ha pulsado al guna tecla {data[i]=k; //se guarda en la posicin correspondiente i++; //de la matriz printf(lcd_putc,"\fpulsar tecla %u\n",i+1); //Siguiente dato } } for (i=0;i<=2;i++) { //Pasa datos de eeprom a la matriz clave clave[i]=read_eeprom(i);} if ((data[0]==clave[0])&&(data[1]==clave[1])&&(data[2]==clave[2])) { printf(lcd_putc,"\fPuerta Abierta"); //Compara los datos con la clave output_high(PIN_A0); //Si es igual da pulso al rel delay_ms(500); output_low(PIN_A0);} else printf(lcd_putc,"\fPuerta Cerrada"); //Clave erronea delay_ms(1000); } }

You might also like