Cuestionario

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 10

Cuestionario

1. ¿Qué error genera MikroC? Escriba el código para eliminar el error y lograr que
el algoritmo funcione.

En el programa se genera algunos errores debido a la falta de una declaración de


identificadores como el Lcd_Init, Lcd_out, Lcd_cmd, ShortToStr, esto se debe a que no
están incluidas las librerías para el display Lcd y para convertir el tipo variable “Short” a
“String”.
La solución es la de habilitar en la pestaña Library Manager las librerías “Conversions” y
“Lcd”. En estas librerías se encuentran localizadas las funciones ya que simplifica al
código, es sustancial antes de compilar revisar que estén habilitadas las librerías necesarias.
Otro error que se genero fue que falto definir los pines para la conexión de la pantalla Lcd,
es importante declarar antes de la ejecución del programa principal.

La definición para cada uno de los pines esta dado de la siguiente manera:
Este código va antes del void main (), para que el algoritmo que se ejecute reconozca los
pines de conexión.
2. ¿Qué función realiza cada línea de código en el algoritmo? Comente cada línea y
explique.
3. ¿Se puede simplificar la función getKey ()? Si la respuesta es afirmativa, escriba el
código.
Si se puede simplificar por medio del uso de una librería “Keypad4x4”, ya que para la
asignación de una variable por cada tecla se lo haría mediante la función de decisión
múltiple.
4. ¿Se puede mostrar el resultado de la tecla presionada en los displays de 7
segmentos? Si la respuesta es afirmativa, escriba el código.
Si se puede realizar mediante una conexión de un decodificador 7447 para ambos display,
ya que para la activación de cada uno de estos se realiza por transistores, en cada uno se
mostrará un valor y se va alternando. Para eso se creó una función obtener_numero () donde
consiste la creación de dos variables, ya que cada una tendrá una asignación
correspondiente mediante la función de decisión múltiple, éstos valores están en un formato
decimal que son para el estado del puerto C que cambiaran de valor cada cierto tiempo.
Lo que también significa que también se modificó en la función while bucle infinito unas
instrucciones para la oscilación de los display.
El codigo quedo de la siguiente forma:

/*Definicion de pines para la conexión de la LCD*/


sbit LCD_RS at RD4_bit; //Pin de Registrar ,Seleccionar datos
sbit LCD_EN at RD5_bit; //Pin de habilitar
sbit LCD_D4 at RD0_bit; //Bit4
sbit LCD_D5 at RD1_bit; //Bit5
sbit LCD_D6 at RD2_bit; //Bit6
sbit LCD_D7 at RD3_bit; //Bit7
sbit LCD_RS_Direction at TRISD4_bit; //Dirección del Pin RS
sbit LCD_EN_Direction at TRISD5_bit; //Dirección del Pin EN
sbit LCD_D4_Direction at TRISD0_bit; //Dirección del Pin del Bit4
sbit LCD_D5_Direction at TRISD1_bit; //Dirección del Pin del Bit5
sbit LCD_D6_Direction at TRISD2_bit; //Dirección del Pin del Bit6
sbit LCD_D7_Direction at TRISD3_bit; //Dirección del Pin del Bit7
//Final de las conexiones
char numero1, numero2;
short key,digit; //Declaración de la variable key de 8 bits
char state=0;
char bandera=0;
short getKey(){ //Estructura de la funcion para lectura de una variable del KeyPad
short keyPressed=0; //Declaración de la variable de 8 bits con una asignacion de 0
PORTB=0x10; // Pone en estado Alto del pin B4 y al resto en Bajo
if(portb.f0) //Si existe un estado Alto en el pin B0
keyPressed=55; //El valor da igual a 7
if(portb.f1) //Si existe un estado Alto en el pin B1
keyPressed=56; //El valor da igual a 8
if(portb.f2) //Si existe un estado Alto en el pin B2
keyPressed=57; //El valor da igual a 9
if(portb.f3) //Si existe un estado Alto en el pin B3
keyPressed=47; //El valor da igual a /
PORTB=0x20; // Estado Alto del pin B5 y al resto en Bajo
if(portb.f0) //Si existe un estado Alto en el pin B0
keyPressed=52; //El valor da igual a 4
if(portb.f1) //Si existe un estado Alto en el pin B1
keyPressed=53; //El valor da igual a 5
if(portb.f2) //Si existe un estado Alto en el pin B2
keyPressed=54; //El valor da igual a 6
if(portb.f3) //Si existe un estado Alto en el pin B3
keyPressed=42; //El valor da igual a *
PORTB=0x40; // Estado Alto del pin B6 y al resto en Bajo
if(portb.f0) //Si existe un estado Alto en el pin B0
keyPressed=49; //El valor da igual a 1
if(portb.f1) //Si existe un estado Alto en el pin B1
keyPressed=50; //El valor da igual a 2
if(portb.f2) //Si existe un estado Alto en el pin B2
keyPressed=51; //El valor da igual a 3
if(portb.f3) //Si existe un estado Alto en el pin B3
keyPressed=45; //El valor da igual a -
PORTB=0x80; // Estado Alto del pin B7 y al resto en Bajo
if(portb.f0) //Si existe un estado Alto en el pin B0
keyPressed=3; //El valor da igual a CE
if(portb.f1) //Si existe un estado Alto en el pin B1
keyPressed=48; //El valor da igual a 0
if(portb.f2) //Si existe un estado Alto en el pin B2
keyPressed=61; //El valor da igual a =
if(portb.f3) //Si existe un estado Alto en el pin B3
keyPressed=43; //El valor da igual a +
return keyPressed; //Regreso al programa que se estaba ejecutando pero con un valor
}
void obtener_numero(){ //Función para obtener el número 1 y numero 2
switch (digit){ //Desición multiple
case 0: numero1=16;numero2=32;break; //0b00010000 y 0b00100000
case 1: numero1=16;numero2=33;break; //0b00010000 y 0b00100001
case 2: numero1=16;numero2=34;break; //0b00010000 y 0b00100010
case 3: numero1=16;numero2=35;break; //0b00010000 y 0b00100011
case 4: numero1=16;numero2=36;break; //0b00010000 y 0b00100100
case 5: numero1=16;numero2=37;break; //0b00010000 y 0b00100101
case 6: numero1=16;numero2=38;break; //0b00010000 y 0b00100110
case 7: numero1=16;numero2=39;break; //0b00010000 y 0b00100111
case 8: numero1=16;numero2=40;break; //0b00010000 y 0b00101000
case 9: numero1=16;numero2=41;break; //0b00010000 y 0b00101001
}
}
char obtener_estado(){

if(state==1 ){
Lcd_cmd(_LCD_CLEAR); //Limpieza de la pantalla
Lcd_cmd(_LCD_CURSOR_OFF); // Apagar el cursor
PORTC=0;
state = 0;
}
if( state==0 && bandera==0){
Lcd_out(1,4,"SYSTEM ON");
delay_ms(1000);
Lcd_cmd(_LCD_CLEAR);
Lcd_cmd(_LCD_CURSOR_OFF);
bandera=1;
return 1;
}
}
void main() { //Función Principal
char keyStr[5]; //Creación de un vector de 5 elementos de 8 bits
TRISA=0XFF; //Configura al puerto como Entrada
ADCON1=0b00001110; //Digitaliza todos los pines desde A1 a A7 excepto el A0
PORTA=0X00; //Estado bajo en el Puerto A
TRISB=0X0F; //Configuración de los pines como 0= Salida y 1=Entrada
PORTB=0X00; //Esta Bajo Inicial de todos los pines del Puerto B
TRISC=0X00;
PORTC=0X00;
Lcd_Init(); //Inicialización de la pantalla LCD
Lcd_cmd(_LCD_CLEAR); //Limpieza de la pantalla
Lcd_cmd(_LCD_CURSOR_OFF); // Apagar el cursor
while(1){ //Bucle infinito
key=0;
key=getKey(); //Asignación de la variable Key por medio de la función getKey()
if(RA1_bit==1){
state=obtener_estado();
}
if(state==1){
Lcd_out(1,8,"KEY"); //Muestra el mensaje "KEY" en la fila 1 y columna 8
if(key==47){
Lcd_out(2,9,"/");
numero1=0;
numero2=0;
}
if(key==42){
Lcd_out(2,9,"*");
numero1=0;
numero2=0;
}
if(key==45){
Lcd_out(2,9,"-");
numero1=0;
numero2=0;
}
if(key==3) {
Lcd_out(2,9,"c");
numero1=0;
numero2=0;
}
if(key==61){
Lcd_out(2,9,"=");
numero1=0;
numero2=0;
}
if(key==43){
Lcd_out(2,9,"+");
numero1=0;
numero2=0;
}
if(key>47 && key<58){
digit=key-48;
ShortToStr(digit,keyStr); //Transformación del tipo de variable Short a String
Lcd_out(2,6,keyStr); //Muestra el valor en la fila 2 y columna 6
obtener_numero(); //Ir a la función
}
PORTC=numero1; //Mostrar la salida mediante e estado de número 1
delay_ms(100); //Pausa 100ms
PORTC=numero2; //Mostrar la salida mediante e estado de número 2
delay_ms(100); //Pausa 100ms
}
}
}

También podría gustarte