|
~: C program for laser cutting machine :~
#include <reg51.h> #include <string.h>
sbit rs = P2^5; // rs pin of LCD sbit en = P2^7; // en pin of LCD sbit rw = P2^6; // rw pin of LCD sbit led1 = P2^4; sbit led2 = P2^3; sbit led3 = P2^2; sbit led4 = P2^1; int digit[2];
void writecmd(unsigned char a); // function initializations void writedata(unsigned char b); void busy(void); void writestr(unsigned char *s);
void delay() // delay for stepper mtor pulses { int c1; for(c1=0;c1<8500;c1++); } void display(unsigned int z) // to display digits 0-9 on LCD { int z1,ASCII[2]; z1=z%10; ASCII[1]=z1+0x30; z=z/10; ASCII[0]=z+0x30; writedata(ASCII[0]); writedata(ASCII[1]); } void writecmd(unsigned char a) { busy(); rs = 0; rw = 0; P0 = a; en = 1; en = 0; } void writedata(unsigned char b) { busy(); rs = 1; rw = 0; P0 = b; en = 1; en = 0; } void busy() { int c; for(c=0;c<1500;c++); } void writestr(unsigned char *s) { unsigned int l,m; l = strlen(s); for(m=0;m<l;m++) { writedata(*s); s++; } } keydly() { int x,y; for(x=0;x<100;x++) for(y=0;y<1000;y++); } void main() { int t=0,i=0,j,f,p=0,q=0; unsigned int p2,p1; P3=0x00; //initilize ports P2=0x00; writecmd(0x3C); // initilize LCD writecmd(0x0E); back:f=0; writecmd(0x01); // first display message if(p==0) writestr("enter x(horizontal)"); // enter X else { writestr("enter y (vertical)"); // then enter Y p=0; } writecmd(0xC0); writestr("in 2 digits(inch):"); loop:P1=0xF0; // all rows as input and while(P1==0xF0); // columns as output while(P1!=0xF0) // wait until no key is pressed { P1=0xFE; // when pressed start scanning if(P1==0xEE) // for enter key { if(q==0) // make 2 digit number by { p1=digit[0]*10+digit[1]; // multiplying second digit with 10 and adding first digit q=1; p=1; f=1; } else { p2=digit[0]*10+digit[1]; // second time also make 2 digit number writecmd(0x01); writestr("press start"); } t=1; i=0; } else if(P1==0xDE){writedata(0x30);digit[i]=0;t=1;i++;} // for '0' key display 0 and store digit 0 else if(P1==0xBE) // for start key 's' { writecmd(0x80); writestr("horizontal x= "); // first display X & Y display(p1); writestr("inch"); writecmd(0xC0); writestr("vertical y= "); display(p2); writestr("inch "); p1*=25; // get the final number of rotations p2*=25; for(j=0;j<p1;j++) // start rotating motors { led1=1; // motor 1 CW P3=0x01; delay(); P3=0x02; delay(); led1=0; P3=0x04; delay(); P3=0x08; delay(); } for(j=0;j<p2;j++) // motor 2 CW { led3=1; P3=0x10; delay(); P3=0x20; delay(); led3=0; P3=0x40; delay(); P3=0x80; delay(); } for(j=0;j<p1;j++) // motor 1 CCW { led2=1; P3=0x01; delay(); P3=0x08; delay(); led2=0; P3=0x04; delay(); P3=0x02; delay(); } for(j=0;j<p2;j++) // motor 2 CCw { led4=1; P3=0x10; delay(); P3=0x80; delay(); led4=0; P3=0x40; delay(); P3=0x20; delay(); } P3=0x00; f=1; t=1; q=0; } if(t==1) break; // get out of loop if key is pressed P1=0xFD; if(P1==0xED) {writedata(0x37);t=1;digit[i]=7;i++;} //for '7' key display 7 and store digit 7 else if(P1==0xDD) {writedata(0x38);t=1;digit[i]=8;i++;} // same for all digits else if(P1==0xBD) {writedata(0x39);t=1;digit[i]=9;i++;}
if(t==1) break; P1=0xFB; if(P1==0xEB){writedata(0x34);t=1;digit[i]=4;i++;} else if(P1==0xDB) {writedata(0x35);t=1;digit[i]=5;i++;} else if(P1==0xBB) {writedata(0x36);t=1;digit[i]=6;i++;}
if(t==1) break; P1=0xF7; if(P1==0xE7){writedata(0x31);digit[i]=1;t=1;i++;} else if(P1==0xD7) {writedata(0x32);t=1;digit[i]=2;i++;} else if(P1==0xB7) {writedata(0x33);t=1;digit[i]=3;i++;} if(t==1) break; } keydly(); // key debounce delay t=0; // reset keypress flag if(f==0) goto loop; // jump back to enter new digits else goto back; } |