//------------------------------------------------------
// void LCD_write(UWORD dato, LCD_TIPO tipo)
//
// Descripción:
//   Función para escribir en el LCD
//
// Parámetros:
//   char dato
//     instrucción o carácter a escribir en el display
//   LCD_TIPO tipo
//     LCD_CHAR si dato es un carácter a escribir
//     LCD_INST si dato es una instrucción para el LCD
//------------------------------------------------------
void LCD_write(UWORD dato, LCD_TIPO tipo)
{
  UWORD salida;
  if(tipo == LCD_CHAR){
    dato = dato << 8;				// El dato debe estar en los 8 bits más significativos
  }
  set16_puertoS(dato | tipo | BIT_ENABLE);	// Enable + dato: Activamos LCD e indicamos el tipo de dato
  retardo(RET_3MS);
  set16_puertoS(dato | tipo);			// Disable: carga el dato en el LCD
  retardo(RET_3MS);
}
Beispiel #2
0
//------------------------------------------------------
// char teclado(void)
//
// Descripción:
//   Explora el teclado matr<icial y devuelve la tecla 
//   pulsada
//------------------------------------------------------
char teclado(void) {
	//char tecla;
	BYTE fila, columna, fila_mask;
	static char teclas[4][4] = {{"123C"},
								{"456D"},
								{"789E"},
								{"A0BF"}};
	// Bucle de exploración del teclado
	while (TRUE) {
		// Excitamos una columna
		for (columna = NUM_COLS - 1; columna >= 0; columna--) {
			salida = salida & 0xFFF0;				 				// Realizamos un AND binario  con el valor actual de salida y 0xFFF0 para no interferir
			salida = salida | (EXCIT << columna);    
			set16_puertoS (salida);									// Se envía la excitación de columna
			retardo(20000);											// Esperamos respuesta de optoacopladores
			
			// Exploramos las filas en busca de respuesta
			for (fila = NUM_FILAS - 1; fila >= 0; fila--) {
				fila_mask = EXCIT << fila;					// Máscara para leer el bit de la fila actual
				if (lee16_puertoE() & fila_mask) {				// Si encuentra tecla pulsada,
					while (lee_puertoE() & fila_mask);				//	Esperamos a que se suelte
					retardo(20000);						//	Retardo antirrebotes
					return teclas[fila][columna];					//	Devolvemos la tecla pulsada
				}
			}
			// Siguiente columna
		}
		// Exploración finalizada sin encontrar una tecla pulsada
	}
	// Reiniciamos exploración
}
Beispiel #3
0
//---------------------------------------------------------
// void leds_ColumnaEncender(columnas)
//
// Descripción:
//   Método que excita la columna que introducimos como parametro
//---------------------------------------------------------
void leds_ColumnaEncender(int columna)
{
// suponemos que valor contiene el último dato enviado al puerto
// pone a 0 los bits de columnas;
valor = valor & MASCARA_COLUMNAS;
// pone a 1 el bit de la columna que queremos excitar
switch(columna){

case 0:
		valor = valor | MASCARA_C0;
		set16_puertoS(valor);
		break;
case 1:
		valor = valor | MASCARA_C1;
		set16_puertoS(valor);
		break;
case 2:
		valor = valor | MASCARA_C2;
		set16_puertoS(valor);
		break;	
case 3:
		valor = valor | MASCARA_C3;
		set16_puertoS(valor);
		break;	
case 4:
		valor = valor | MASCARA_C4;
		set16_puertoS(valor);
		break;
case 5:
		valor = valor | MASCARA_C5;
		set16_puertoS(valor);
		break;
case 6:
		valor = valor | MASCARA_C6;
		set16_puertoS(valor);
		break;
case 7:
		valor = valor | MASCARA_C7;
		set16_puertoS(valor);
		break;
}
}
Beispiel #4
0
//---------------------------------------------------------
// void puerto_FilaEncender(fila)
//
// Descripción:
//   Método que excita la fila que introducimos como parametro
//---------------------------------------------------------
void leds_FilaEncender(int fila)
{
// suponemos que valor contiene el último dato enviado al puerto
// pone a 0 el bit adecuado
switch(fila){

case 0:
		valor = valor & MASCARA_F0;
		set16_puertoS(valor);
		break;
case 1:
		valor = valor & MASCARA_F1;
		set16_puertoS(valor);
		break;
case 2:
		valor = valor & MASCARA_F2;
		set16_puertoS(valor);
		break;	
case 3:
		valor = valor & MASCARA_F3;
		set16_puertoS(valor);
		break;	
case 4:
		valor = valor & MASCARA_F4;
		set16_puertoS(valor);
		break;
case 5:
		valor = valor & MASCARA_F5;
		set16_puertoS(valor);
		break;
case 6:
		valor = valor & MASCARA_F6;
		set16_puertoS(valor);
		break;
case 7:
		valor = valor & MASCARA_F7;
		set16_puertoS(valor);
		break;
}
}
Beispiel #5
0
void columnasBarrer(void) {
    puerto.variableAux=puerto.variableAux & BORRA_COLUMNA;
    if(led.controladorColumna==0) {	//las columnas no se iluminan simultaneamente
        puerto.variableAux=led.columna1;
    }
    if(led.controladorColumna==1) {
        puerto.variableAux=led.columna2;
    }
    if(led.controladorColumna==2) {
        puerto.variableAux=led.columna3;
    }

    led.controladorColumna++;
    if(led.controladorColumna==3) {
        led.controladorColumna=0;
    }
    puerto.variableAux=puerto.variableAux&NO_TOCAR_BITS_TECLADO; //desactivamos los bits 1,2 y 3 del
    //puerto de salida.
    set16_puertoS(puerto.variableAux); //enviamos la información al puerto
}
Beispiel #6
0
//---------------------------------------------------------
// void puerto_FilaApagar(void)
//
// Descripción:
//   Método que excita la fila que introducimos como parametro
//---------------------------------------------------------
void leds_FilaApagar(void){
valor=valor | MASCARA_FILAS;
set16_puertoS(valor); 
}