#include <16F877.h>
#use delay(clock=10000000) //External clock 10MHz
#fuses HS, NOWDT //High speed, no watchdog timer
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#include <stdio.h>
int read_columns();
void main()
{
int column;
set_tris_b(0x0F);
output_bit( PIN_B7, 0);
output_bit( PIN_B6, 0);
output_bit( PIN_B5, 0);
output_bit( PIN_B4, 0);
printf("test\n\r");
while(1)
{
column=read_columns();
output_bit( PIN_B7, 1);
if(column!=read_columns())
{
printf("row 1 col %i\n\r",column);
}
output_bit( PIN_B7, 0);
output_bit( PIN_B6, 1);
if(column!=read_columns())
{
printf("row 2 col %i\n\r",column);
}
output_bit( PIN_B6, 0);
output_bit( PIN_B5, 1);
if(column!=read_columns())
{
printf("row 3 col %i\n\r",column);
}
output_bit( PIN_B5, 0);
output_bit( PIN_B4, 1);
if(column!=read_columns())
{
printf("row 4 col %i\n\r",column);
}
output_bit( PIN_B4, 0);
delay_ms(500);
}
}
int read_columns()
{
int colcom=0;
if (input(PIN_B3)==0) //col1
colcom=1;
if (input(PIN_B2)==0) //col2
colcom=2;
if (input(PIN_B1)==0) //col3
colcom=3;
if (input(PIN_B0)==0) //col1
colcom=4;
// printf("colcom %i\n\r",colcom);
return colcom;
}