Beruflich Dokumente
Kultur Dokumente
c * Nombre del Autor: Eduardo Casal y Roger Idrovo * Description: Simulacion de cajero automatico * Test configuration: MCU: Oscillator: SW: */ PIC16F887 HS, 08.0000 MHz mikroC PRO for PIC
unsigned short col, num1, num2, opcion, res; unsigned int monto, valor; //Fin de definicion conexiones de puerto de entrada de teclado
// Definicion de conexiones de puerto del modulo LCD sbit LCD_RS at RE0_bit; sbit LCD_EN at RE1_bit; sbit LCD_D4 at RD4_bit; sbit LCD_D5 at RD5_bit; sbit LCD_D6 at RD6_bit; sbit LCD_D7 at RD7_bit;
sbit LCD_RS_Direction at TRISE0_bit; sbit LCD_EN_Direction at TRISE1_bit; sbit LCD_D4_Direction at TRISD4_bit; sbit LCD_D5_Direction at TRISD5_bit; sbit LCD_D6_Direction at TRISD6_bit; sbit LCD_D7_Direction at TRISD7_bit; // Fin de definicion de conexiones de puerto del modulo LCD
// Definicion de variables de texto char txt1[] = "Ingrese clave:"; char txt2[] = "Error"; char txt3[] = "Bloqueado"; char txt4[] = "a.Retirar Dinero"; char txt5[] = "b.Cambiar clave"; char txt6[] = "Monto:"; char txt7[] = "Listo"; char txt8[] = "No disponible"; char txt9[] = "Disponible"; char clave[5]; char temporal[5]; char cantidad[5]; // Fin de definicion de variables de texto
void Limpia_LCD() { Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); } // Fin de procedimiento de limpieza del LCD // Limpia pantalla // Apaga cursor
// Funcion que da codigo ASCII dependiendo del boton presionado void teclado(){ unsigned short i; presiona=0; PORTB=0xFF; RB0_bit=0; //for(i=0;i<10;i++){ if(!RB4_bit) presiona=49; if(!RB5_bit) presiona=50; if(!RB6_bit) presiona=51; if(!RB7_bit) presiona=52; Delay_5ms(); //} PORTB=0XFF; RB1_bit=0;
// for(i=0;i<10;i++){ if(!RB4_bit) presiona=53; if(!RB5_bit) presiona=54; if(!RB6_bit) presiona=55; if(!RB7_bit) presiona=56; Delay_5ms(); // } PORTB=0XFF; RB2_bit=0; //for(i=0;i<10;i++){ if(!RB4_bit) presiona=42; if(!RB5_bit) presiona=57; if(!RB6_bit) presiona=48; if(!RB7_bit) presiona=35; Delay_5ms(); //} PORTB=0XFF; RB3_bit=0;
//for(i=0;i<10;i++){ if(!RB4_bit) presiona=97; if(!RB5_bit) presiona=98; if(!RB6_bit) presiona=99; if(!RB7_bit) presiona=100; Delay_5ms(); //} }
// Funcion que permite el ingreso de clave por teclado void ingreso(){ col=0; j=0; do{ do { teclado(); Delay_ms(50); } while(presiona==0||presiona==42||presiona==35||presiona==97||presiona==98||presiona==99 ||presiona==100);
// Funcion que permite el ingreso de opciones por teclado void ingreso_opciones(){ do teclado(); while(!(presiona==97||presiona==98)); } // Solo habilito lectura de caracter "a" o "b"
/*********************************************************************/ /*********************************************************************/ /****************** Inicio de programa principal *********************/ void main() { ANSEL = 0; ANSELH = 0; //C1ON_bit = 0; // Disable comparators
//C2ON_bit = 0; TRISB = 0xF0; cnt = 0; Lcd_Init(); Limpia_Lcd(); Lcd_Out(1, 1, txt1); // Inicia contador // Inicializa Lcd // Limpia LCD // Escribe mensaje inicial en Lcd
for(i=0;i<4;i++) { clave[i]=49+i; }
do {
do{ ingreso();
res=strcmp(clave, temporal);// Verifica que sea la misma clave if(res==0) break; // Si la clve se ingreso correctamente // sale del lazo.
cnt=cnt+1;
} }while(cnt<2);
// El codigo de este if se ejecuta solo // si hubieron dos intentos fallidos al // ingresar la clave
Lcd_Out(1,1,txt3); }while(1); } /***************************Seleccion de opciones*****************************/ Limpia_LCD(); Lcd_Out(1,1, txt4); // Muestra mensajes de opciones. Solo si se
ingreso_opciones();
}while(presiona==0||presiona==35||presiona==42||presiona==48||presiona==97||presiona==98 ||presiona==99||presiona==100);
cantidad[i]= presiona; // Presenta en pantalla el valor col=col+1; // ingresado por teclado y lo guarda
Lcd_Chr(2, 5+col, presiona); Delay_ms(500); i=i+1; // Guarda en el arreglo temporal[] el // primer elemento del arreglo
do{ cnt=i; do {
while(presiona==0||presiona==42||presiona==97||presiona==98||presiona==99||presiona==10 0);
if(presiona==35){ break; } cantidad[i]=presiona; col=col+1; Lcd_Chr(2, 5+col, presiona);// Presenta en pantalla la clave ingresada por teclado Delay_ms(500); i=i+1; } while(i<4);
j=i; i=0;
do{ UART1_Write(cantidad[i]); temporal[] Delay_ms(100); i=i+1; }while(i<j); // Transmite los caracterres ingresados en el arreglo
while(!UART1_Data_Ready()) {
Delay_ms(1000);
cantidad[5]="";
break;
Lcd_Out(1,1, txt1);
do{ ingreso(); res=strcmp(clave, temporal); if(res==0) { Limpia_LCD(); Lcd_Out(1,1,txt2); Delay_ms(1000); Limpia_LCD(); Lcd_Out(1,1, txt1); } } while(!res); // Verifica que no sea la misma clave
for(i=0;i<4;i++) Clave[i]=temporal[i];