This is keyboard interfacing with lcd. it works perfect with logic analyzer, when i dump on to kit its not working. can anyone suggest me some modifications.
#include<reg51.h>
void lcd_cmd(char); void lcd_init(); void lcd_data(char); void delay(int); void row(unsigned int rowloc); void column(unsigned int colloc); void MSDelay(unsigned int value);
sbit rs = P0^7; sbit rw = P0^6; sbit oe = P0^5;
sbit r1 = P1^0; sbit r2 = P1^1; sbit r3 = P1^2; sbit r4 = P1^3; sbit r5 = P1^4; sbit r6 = P1^5;
sbit c1 = P0^0; sbit c2 = P0^1; sbit c3 = P0^2;
int x, y; unsigned int rowloc, colloc; char num[6][3] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'}, {'A','B','C'}, {'D','E','F'} };
void column(unsigned int colloc) { colloc = ((~colloc) & 0x07); if(colloc == 1) x = 0; if(colloc == 2) x = 1; if(colloc == 4) x = 2; } void row(unsigned int rowloc) { rowloc &= 0x3F ; if( rowloc == 1) y = 0; if( rowloc == 2) y = 1; if( rowloc == 4) y = 2; if( rowloc == 8) y = 3; if( rowloc == 16) y = 4; if( rowloc == 32) y = 5; } void lcd_cmd(char x) { P2 = x; rs = 0; oe = 1; //creating a pulse rw = 0; delay(1); oe = 0; } void lcd_init() { lcd_cmd(0x38); lcd_cmd(0x0E); lcd_cmd(0x01); lcd_cmd(0x06); lcd_cmd(0x80); } void delay(int n) { int i=0; for(i=0;i<n;i++) { TR0=1; while(TF0!=1); TF0=0; TR0=0; } } void lcd_data(char x) { P2 = x; rs = 1; oe = 1; rw = 0; delay(1); oe = 0; } void main() { char c;
r1 = r2 = r3 = r4 = r5 = r6 = 0; c1 = c2 = c3 = 1;
P2 = 0x00; TMOD = 0x01; lcd_init();
while(1) { while(c1 == 1 && c2 == 1 && c3 == 1); MSDelay(20); colloc = P0 ; rowloc = P1; column(colloc); MSDelay(20); row(rowloc); c = num[y][x]; while( c1 == 0 || c2 == 0 || c3 ==0 ); r1 = r2 = r3 = r4 = r5 = r6 = 0; lcd_data(c); } } void MSDelay(unsigned int value) { unsigned int x, y; for(x = 0; x < 1275; x++) for(y = 0; y < value; y++); }