Programación

Bueno aca esta explicado el funcionamiento del prgrama que realizamos. Cuando descrubra como subir las fotos y el programa lo subo aca asi pueden ver como funciona y si tienen alguna sugerencia.

Nuestro programa se divide en declaraciones, funciones y función main.

- Char __Pass__ [13] : Buffer de memoria para guardar la contraseña tecleada. - Short __Cont__: Cuenta cuantos caracteres vamos escribiendo. - Char __Rompass__ [13]: Donde guardamos la contraseña de la alarma. - Short __i__: es utilizada exclusivamente para hacer valer un bucle. - Char __kp__: es donde guardamos el valor que devuelve la función de lectura del teclado, la capturamos, y luego la analizamos. - Const Char __Keys[16]__: Es un Array donde le damos un valor a cada botón del teclado, que en este caso es de 4x4 (0, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , . , # , A , B , C , D).
 * __Declaraciones:__**

- __Bienvenido__: Saluda al usuario a través del display, en el arranque del programa. - __Comparar__: Compara la contraseña marcada con la guardada anteriormente. (pass = rompass?). - __AgregarCaracte__r: Agrega los caracteres tecleados, que luego serán guardados en la variable Pass. - __Intpass:__ Pide introducir la contraseña desde el display leyendo el teclado y compara si pass = rompass. Al leer el teclado, utiliza el valor de la tecla (1 a 16) para implementarlo como índice a la hora de leer el array “Const Char Keys [16]” para extraer el código ASCII correspondiente de la tecla presionada. Si el valor en ASCII coincide con algún valor del 0 al 9, llama a la función AgregarCaracter. De ser un valor A, B, C o D, se realizará una acción determinada para cada tecla. (A = Borrar ultimo; B = C = Borrar todo; D = Entrar/Comparar)
 * __Funciones:__**

En esta función especificamos los valores utilizados en los registros **adcon0**, **TRISB** y **TRISA.** Inicia el programa llamando a la función **Bienvenido**, luego pregunta por la función **intpass**. Si hubo una comparación exitosa, devuelve por el lcd **“Password ok”**. De haber una comparación errónea, devuelve por el lcd **“Error!! Password** **Incorrecta!!”.**
 * __Función Main:__**

Nuestro programa también utiliza librerías, ya incluidas en el MikroC (programa utilizado). Se utiliza una librería llamada **Keypad library** y otra llamada **Lcd (4-bit interface) library.**


 * __Keypad:__** Es una librería con rutinas que se pueden utilizar también en teclados de 4x1, 4x2 4x3 y 4x4.

- Keypad_init: Inicializa el puerto que va a trabajar con el teclado. Esta función debe ser llamada antes de utilizar las demás rutinas. - Keypad_read: Revisa si alguna tecla esta presionada. Esta función devuelve un valor del 1 al 16, dependiendo de la tecla presionada. O un 0 si no hay teclas presionadas. - Keypad_released: Ésta función espera a que la tecla presionada sea liberada. Cuando esto sucede, la función devuelve un valor del 1 al 16 dependiendo de la tecla presionada.
 * __Sus rutinas son:__**
 * o Ejemplo: Keypad_Init(&PORTB);
 * o Ejemplo: kp = keypad_read ;
 * o Ejemplo: kp = Keypad_released;


 * Lcd (4-bit interface):** Es una librería para comunicación con LCDs a través de una interfaz de 4 bits.

- __Lcd_config:__ Inicializa el LCD con el puerto y los pines que el usuario especifique: sus parámetros son RS, EN, WR, D7….D4. es necesario una combinación de valores entre el 0 al 7.
 * __Sus rutinas son:__**
 * o __Ejemplo:__ Lcd_config(&PORTD, 0, 1, 7, 5, 4, 3, 2);

- __Lcd_init:__ Inicializa el LCD con el puerto que se especifique, con una configuración de pines predeterminada: - __Lcd_out:__ Imprime un texto en el LCD en una línea y columna especificada (parámetros fila y columna). Requiere inicializar el puerto con rutina lcd_config o Lcd_init. - __Lcd_out_cp:__ Imprime un texto en el LCD en la posición actual del puntero. Requiere inicializar el puerto con rutina lcd_config o Lcd_init. - __Lcd_chr:__ Imprime un carácter en el LCD en la fila y columna especificada (parámetros fila y columna). Requiere inicializar el puerto con rutina lcd_config o Lcd_init. - __Lcd_chr_cp:__ Imprime un carácter en el LCD en la posición actual del puntero. Requiere inicializar el puerto con rutina lcd_config o Lcd_init. - __Lcd_cmd:__ Envía un comando al LCD. Debajo se encuentra la lista de comandos.
 * § D7 = port.7
 * § D6 = port.6
 * § D5 = port.5
 * § D4 = port.4
 * § E = port.3
 * § RS = port.2
 * § RW = port.0
 * o __Ejemplo:__ Lcd_init(&PORTB);
 * o __Ejemplo:__ Lcd_out(1, 3, “hola!”);
 * o __Ejemplo:__Lcd_out_cp(“Aquí!”);
 * o __Ejemplo:__ Lcd_chr(2, 3, ‘i’);
 * o __Ejemplo:__ Lcd_chr_cp (‘e’);
 * o __Ejemplo:__ Lcd_cmd(Lcd_clear);
 * __A continuación la lista de comandos disponibles (en ingles):__**
 * **LCD Command ** || **Purpose ** ||
 * LCD_FIRST_ROW || Move cursor to 1st row ||
 * LCD_SECOND_ROW || Move cursor to 2nd row ||
 * LCD_THIRD_ROW || Move cursor to 3rd row ||
 * LCD_FOURTH_ROW || Move cursor to 4th row ||
 * LCD_CLEAR || Clear display ||
 * LCD_RETURN_HOME || Return cursor to home position, returns a shifted display to original position. Display data RAM is unaffected. ||
 * LCD_CURSOR_OFF || Turn off cursor ||
 * <span style="font-family: 'Times New Roman',serif;">LCD_UNDERLINE_ON || <span style="font-family: 'Times New Roman',serif;">Underline cursor on ||
 * <span style="font-family: 'Times New Roman',serif;">LCD_BLINK_CURSOR_ON || <span style="font-family: 'Times New Roman',serif;">Blink cursor on ||
 * <span style="font-family: 'Times New Roman',serif;">LCD_MOVE_CURSOR_LEFT || <span style="font-family: 'Times New Roman',serif;">Move cursor left without changing display data RAM ||
 * <span style="font-family: 'Times New Roman',serif;">LCD_MOVE_CURSOR_RIGHT || <span style="font-family: 'Times New Roman',serif;">Move cursor right without changing display data RAM ||
 * <span style="font-family: 'Times New Roman',serif;">LCD_TURN_ON || <span style="font-family: 'Times New Roman',serif;">Turn LCD display on ||
 * <span style="font-family: 'Times New Roman',serif;">LCD_TURN_OFF || <span style="font-family: 'Times New Roman',serif;">Turn LCD display off ||
 * <span style="font-family: 'Times New Roman',serif;">LCD_SHIFT_LEFT || <span style="font-family: 'Times New Roman',serif;">Shift display left without changing display data RAM ||
 * <span style="font-family: 'Times New Roman',serif;">LCD_SHIFT_RIGHT || <span style="font-family: 'Times New Roman',serif;">Shift display right without changing display data RAM ||