This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Help needed with LCD

This whole program works fine with stepper rotating according to the kepad entry. But, it only takes one digit input. I need it so that it takes multiple inputs and runs when I press "*" or any other key i want to specify. It takes the input and starts running directly!

#include <stdio.h> //Define I/O Functions
#include <reg51.h> //Define 8051 Registers
#define DATA P2 //Define DATA to Port2

void lcd_cmd(unsigned char); //LCD Command Function
0void lcd_display(unsigned char);
void lcdready(void);

int get_key(void);//LCD Display Function
int read_switches(void); //KeyScan Function

void stepper(char);
void stepper_rev(char);

void MSdelay(unsigned int); //DelayMs Function

sbit rs = P3^4; //Register Select
sbit rw = P3^5; //LCD Read/Write
sbit en = P3^6; //LCD Enable

sbit rowA=P1^0;
sbit rowB=P1^1;
sbit rowC=P1^2;
sbit rowD=P1^3;
sbit C1=P1^4;
sbit C2=P1^5;
sbit C3=P1^6;
sbit C4=P1^7;
sbit busy=P2^7;

sbit p= P3^0;
sbit q= P3^1;
sbit r= P3^2;
sbit s= P3^3;

sbit start=P1^7;
sbit m=P3^7;

int i=0;

void main()
{ lcd_cmd(0x80); lcd_cmd(0x01); lcd_cmd(0x0E);

while(1) { int a; m=0; a=get_key1(); lcd_cmd(0x80); lcd_cmd(0x06); lcd_display(a | 0x30); if(start==1) { stepper(a); } else
stepper_rev(a);
} }
void stepper(char a)
{ //char x;
// for(x=a;x<0;x++)
m=1;
do
{ // a=a-48; p=1;q=1;r=0;s=0;//P3 = 0x03; //0011 MSdelay(50000); p=0;q=1;r=1;s=0;//P3 = 0x06; //0110 MSdelay(50000); p=0;q=0;r=1;s=1;//P3 = 0x0C; //1100 MSdelay(50000); p=1;q=0;r=0;s=1;//P3 = 0x09; //1001 MSdelay(50000); a--;
// lcd_cmd(0xc0);
//lcd_display(a | 0x30);
}while(a);
m=0;
} void stepper_rev(char a)
{ //char x;
// for(x=a;x<0;x++)
m=1;
do
{ // a=a-48; if(start!=0) {return;} p=1;q=0;r=0;s=1;//P3 = 0x09; //1001 MSdelay(50000); p=0;q=0;r=1;s=1;//P3 = 0x0C; //1100 MSdelay(50000); p=0;q=1;r=1;s=0;//P3 = 0x06; //0110 MSdelay(50000); p=1;q=1;r=0;s=0;//P3 = 0x03; //0011 MSdelay(50000); a--; lcd_cmd(0xc0);
lcd_display(a | 0x30);
}while(a);
m=0;
} int read_switches(void)
{ rowA=0; rowB=1; rowC=1; rowD=1; if(C1==0){MSdelay(50); while(C1==0); return 1;} if(C2==0){ MSdelay(50); while(C2==0); return 2;} if(C3==0) {MSdelay(50); while(C3==0); return 3;} //if(C4==0) {MSdelay(50); while(C4==0); return '/';}

rowA=1; rowB=0; rowC=1; rowD=1; if(C1==0){ MSdelay(50); while(C1==0); return 4;} if(C2==0) {MSdelay(50); while(C2==0); return 5;} if(C3==0) {MSdelay(50); while(C3==0); return 6;} //if(C4==0) {MSdelay(50); while(C4==0); return '*';}

rowA=1; rowB=1; rowC=0; rowD=1; if(C1==0){ MSdelay(50); while(C1==0); return 7;} if(C2==0){ MSdelay(50); while(C2==0); return 8;} if(C3==0) {MSdelay(50); while(C3==0); return 9;} //if(C4==0) {MSdelay(50); while(C4==0); return '-';}

rowA=1; rowB=1; rowC=1; rowD=0; if(C1==0) {MSdelay(50); while(C1==0); return 'c';} if(C2==0) {MSdelay(50); while(C2==0); return 0;} if(C3==0){MSdelay(50); while(C3==0); return 'a';} //if(C4==0) {MSdelay(50); while(C4==0); return '+';}
// return;
}

int get_key1(void)
{ char key='n'; while(key=='n') {key= read_switches();} return key;
} //char get_key2(void)
//{
// char key='n';
// while(key=='n')
// {key= read_switches();}
// return key;
//}

void MSdelay(unsigned int itime)
{ unsigned int i,j;
for(i=0;i<itime;i++);
for(j=0;j<1275;j++);
}

void lcd_cmd(unsigned char cmnd)
{ lcdready();
DATA = cmnd;
rs = 0; //RS:Register Select
rw = 0; //RW:Read/Write
en = 1; //LCD Enable
MSdelay(250);
en= 0;
return;
}

void lcd_display(unsigned char dat)
{ lcdready();
DATA = dat;
rs = 1; //RS:Register Select
rw = 0; //RW:Read/Write
en= 1;
MSdelay(1);
en= 0;
return;
} void lcdready()
{ busy = 1; //make the busy pin at input
rs = 0;
rw = 1;
while(busy==1){ //wait here for busy flag
en = 0; //strobe the enable pin
MSdelay(1);
en = 1;
} }

0