teclado4x4_ccs

Estudiantes de la asignatura Digitales 3 les anexo el programa para conectar un teclado 4 x4 en ccs:
 * DIGITALES 3**

int8 inicio_tecla; void esperar_nivel_puertos { int8 leer,tecla,b7,b6,b5,b4; leer=0; while (leer!=4) { output_low(PIN_B0); output_low(PIN_B1); output_low(PIN_B2); output_low(PIN_B3); b7=input_state(PIN_B7); b6=input_state(PIN_B6); b5=input_state(PIN_B5); b4=input_state(PIN_B4); leer=b7+b6+b5+b4;
 * 1) include "D:\digitales 3\ejercicios\teclado_4x4\teclado_4x4.h"
 * 2) include 
 * 3) byte WR_PORTB=0X0F81 /* PORTB*/

} } int8 determinar_posicion { int8 estado,I,contador; output_low(PIN_B0); output_high(PIN_B1); output_high(PIN_B2); output_high(PIN_B3); contador=0; FOR (I=4;I<=7;I++) { estado=bit_test(WR_PORTB,I); if (estado==0) { return(contador); } contador++; }

output_high(PIN_B0); output_low(PIN_B1); output_high(PIN_B2); output_high(PIN_B3);

FOR (I=4;I<=7;I++) { estado=bit_test(WR_PORTB,I); if (estado==0) { return(contador); } contador++; }

output_high(PIN_B0); output_high(PIN_B1); output_low(PIN_B2); output_high(PIN_B3);

FOR (I=4;I<=7;I++) { estado=bit_test(WR_PORTB,I); if (estado==0) { return(contador); } contador++; }

output_high(PIN_B0); output_high(PIN_B1); output_high(PIN_B2); output_low(PIN_B3);

FOR (I=4;I<=7;I++) { estado=bit_test(WR_PORTB,I); if (estado==0) { return(contador); } contador++; }

} void RB_isr { int8 posicion; CHAR caracter; if (inicio_tecla==1) { posicion=determinar_posicion; SWITCH (posicion) { CASE 0:caracter="1"; break; CASE 1:caracter="2"; break; CASE 2:caracter="3"; break; CASE 3:caracter="A"; break; CASE 4:caracter="4"; break; CASE 5:caracter="5"; break; CASE 6:caracter="6"; break; CASE 7:caracter="B"; break; CASE 8:caracter="7"; break; CASE 9:caracter="8"; break; CASE 10:caracter="9"; break; CASE 11:caracter="C"; break; CASE 12:caracter="#"; break; CASE 13:caracter="0"; break; CASE 14:caracter="*"; break; CASE 15:caracter="D"; break; } //printf(LCD_PUTC,"%d ",posicion); lcd_putc(caracter); delay_ms(500); esperar_nivel_puertos; } else { delay_ms(500); esperar_nivel_puertos; inicio_tecla=1; } }
 * 1) int_RB

void main { setup_adc_ports(NO_ANALOGS|VSS_VDD); setup_adc(ADC_CLOCK_DIV_2); setup_psp(PSP_DISABLED); setup_spi(SPI_SS_DISABLED); setup_wdt(WDT_OFF); setup_timer_0(RTCC_INTERNAL); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_timer_3(T3_DISABLED|T3_DIV_BY_1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); set_tris_a(0); set_tris_b(0b11110000); set_tris_d(0); lcd_init; lcd_putc("\fTECLADOS 4 X 4");

inicio_tecla=0;

output_low(PIN_B0); output_low(PIN_B1); output_low(PIN_B2); output_low(PIN_B3); PORT_B_PULLUPS(TRUE); esperar_nivel_puertos; //LCD_PUTC("X");

enable_interrupts(INT_RB); enable_interrupts(GLOBAL); for { }

//Setup_Oscillator parameter not selected from Intr Oscillator Config tab // TODO: USER CODE!! }