普通沖床送料裝置的自動(dòng)化改造含3張CAD圖
普通沖床送料裝置的自動(dòng)化改造含3張CAD圖,普通,沖床,裝置,自動(dòng)化,改造,cad
附錄程序#include #include #define uchar unsigned char#define uint unsigned inttypedef bit BOOL; uint acc=7; /轉(zhuǎn)速控制 uchar Moto=0 ;/電機(jī)選擇uchar MotoDir=0;/電機(jī)正反轉(zhuǎn)0正轉(zhuǎn)bit start;uchar count=0;/ 定時(shí)計(jì)數(shù),每50ms記一次uint distanx ;/X方向計(jì)數(shù)uint distany; /Y方向計(jì)數(shù)uint speed=900; /速度變量sbit LCD_RS = P02; sbit LCD_RW = P01;sbit LCD_EP = P00;sbit key1=P33;/開(kāi)始按鍵sbit key2=P34;/電機(jī)選擇sbit key3=P35;/電機(jī)正反轉(zhuǎn)sbit key4=P36;/電機(jī)加速sbit key5=P37;/電機(jī)減速code uint StepTable1=0x10,0x80,0x20,0x40; /時(shí)序?yàn)槌壬獳、棕色B、黃色C、黑色Dcode uint StepTable2=0x01,0x08,0x02,0x04;/四相單四拍uchar code dis1 = WELCOME TO ;uchar code dis2 = Please Start: ;uchar code dis3 = X:000 V:900r/min;uchar code dis4 = Y:000 n: ;void delay(ms)int i; for(;ms=0;ms-) for(i=110;i=0;i-); BOOL lcd_bz() / 測(cè)試LCD忙碌狀態(tài) BOOL result;LCD_RS = 0;LCD_RW = 1;LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();result = (BOOL)(P1 & 0x80);LCD_EP = 0;return result; lcd_wcmd(uchar cmd) / 寫(xiě)入指令數(shù)據(jù)到LCD while(lcd_bz();LCD_RS = 0;LCD_RW = 0;LCD_EP = 0;_nop_();_nop_(); P1 = cmd;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0; lcd_pos(uchar pos) /設(shè)定顯示位置 lcd_wcmd(pos | 0x80);lcd_wdat(uchar dat) /寫(xiě)入字符顯示數(shù)據(jù)到LCDwhile(lcd_bz();LCD_RS = 1;LCD_RW = 0;LCD_EP = 0;P1 = dat;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0; lcd_init() /LCD初始化設(shè)定 lcd_wcmd(0x38); /16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)delay(1);lcd_wcmd(0x0c); /顯示開(kāi),關(guān)光標(biāo)delay(1);lcd_wcmd(0x06); /移動(dòng)光標(biāo)delay(1);lcd_wcmd(0x01); /清除LCD的顯示內(nèi)容delay(1);/在LCD上顯示單個(gè)字符void Write_char(uchar y,uchar x,uchar c)switch(y)case 0: lcd_wcmd(0x80+x); /the begin address of first row ,add the x list break;case 1: lcd_wcmd(0xc0+x); /the begin address of second row add the x listbreak;lcd_wdat(c); /write a char void display() /初始狀態(tài)顯示 uchar i; lcd_pos(0); /設(shè)置顯示位置為第一行的第1個(gè)字符 for(i=0;i16;i+) /顯示字符WLCOME TO lcd_wdat(dis1 i ); delay(5); /控制兩字之間顯示速度 lcd_pos(0x40); /設(shè)置顯示位置為第二行第1個(gè)字符 for(i=0;i16;i+) lcd_wdat(dis2 i ); /顯示字符 delay(5); /控制兩字之間顯示速度 /lcd_wcmd(0x01); /清除LCD的顯示內(nèi)容 void display1()/參數(shù)格式顯示 uchar i; / lcd_wcmd(0x01); /清除LCD的顯示內(nèi)容 lcd_pos(0); /設(shè)置顯示位置為第一行的第1個(gè)字符 for(i=0;i16;i+) /顯示字符 lcd_wdat(dis3i); delay(5); /控制兩字之間顯示速度 lcd_pos(0x40); /設(shè)置顯示位置為第二行第1個(gè)字符 for(i=0;i16;i+) lcd_wdat(dis4i); /顯示字符 delay(5); /控制兩字之間顯示速度 void Moto1_0()/電機(jī)1正轉(zhuǎn)int i;for(i=0;i4;i+) P2=StepTable1i; delay(acc); void Moto1_1()/電機(jī)1反轉(zhuǎn)int i;for(i=0;i4;i+) P2=StepTable13-i; delay(acc); void Moto2_0()/電機(jī)2正轉(zhuǎn)int i;for(i=0;i4;i+) P2= StepTable2i; delay(acc); void Moto2_1() /電機(jī)2反轉(zhuǎn)int i;for(i=0;i=3)Moto=0; while(!key2); if(!key3) /正反轉(zhuǎn)按鍵 delay(20) ; if(!key3) MotoDir+;if(MotoDir=2)MotoDir=0; while(!key3); if(!key4) /加速按鍵 delay(20) ; if(!key4) acc+;speed=speed+10;if(acc=500) acc=5; while(!key4); if(!key5) /減速按鍵 delay(20) ; if(!key5) acc-;speed=speed-10;if(acc=0) acc=500; while(!key5); void display3(uchar x,uchar y,uint num)/顯示一個(gè)三位數(shù) Write_char(x,y,(num/100%10+48);/百位Write_char(x,y+1,(num/10%10+48); /十位Write_char(x,y+2,(num%10+48); /個(gè)位 /自動(dòng)運(yùn)行程序 void atuorun() int i,j,k,n; delay(10); /防止電機(jī)開(kāi)始轉(zhuǎn)動(dòng)不穩(wěn)定。display3(0,8,speed); /顯示速度if(distany=420)distany=0;for(j=0;j3;j+)/連續(xù)走六次 for(i=0;i6;i+)/X正方向連續(xù)走停6次 while(count20)Moto1_0(); n+; /加工零件計(jì)數(shù) distanx=distanx+70; /X行程計(jì)數(shù) display3(0,2,distanx); /顯示X方向行程 display3(1,2,distany); /顯示Y方向行程 display3(1,10,n); /顯示加工零件個(gè)數(shù)。 delay(500); while(count20)Moto2_0(); /Y正方向走一次distany=distany+70; /Y行程計(jì)數(shù)display3(1,2,distany);delay(500); for(i=0;i6;i+)/X負(fù)方向連續(xù)走停6次 while(count20)Moto1_1();n+; distanx=distanx-70; display3(0,2,distanx); display3(1,2,distany); display3(1,10,n); delay(500); while(count20)Moto2_0();distany=distany+70; display3(1,2,distany);delay(500);/Y正方向走一次for(k=0;k6;k+)/回到原點(diǎn) while(count20)count=0; 12
收藏