求悬挂运动控制器系统程序

主程序清单/*************************************//******主控程序*****//**功能*****//*切换子程序绕线机控制器调整坐标绕线机控制器显示实时坐标和目标坐标绕线机控制器计时*/#include#include#include#define uint unsigned int#define uchar unsigned charlong time绕线机控制器t0;//秒钟计时参数uchar lcdc=0x0f绕线机控制器place=0x94;//液晶控制字和光标闪烁地址bit enter=0绕线机控制器cancle=0绕线机控制器l=1绕线机控制器set=1;//输入绕线机控制器取消绕线机控制器液晶刷新绕线机控制器设置uint stat=0;//状态指示uint time1[4]={0绕线机控制器0绕线机控制器0绕线机控制器0};//目标坐标uint bitcount=0;uint xc=0绕线机控制器yc=0绕线机控制器xt绕线机控制器yt绕线机控制器xs绕线机控制器ys;//当前坐标绕线机控制器中间坐标绕线机控制器最终坐标uchar llt绕线机控制器lrt;//当前左右绳长绕线机控制器需改变长绕线机控制器最终长bit ok=1;//指示下位机运行成功uint bittemp;//在作图绕线机控制器画圆状态下的取位变量uint x0绕线机控制器y0;//圆心uint cnt;//作图和画圆时设定点的变量uint ccnt;//作图时候坐标显示uchar begin[2]={0绕线机控制器0};uchar string[10][2];bit xungui=0;sbit sa=P0^2;//上sbit sb=P0^3;//右sbit sc=P0^1;//下sbit sd=P0^0;//左绕线机控制器寻轨时的4个传感器/*********液晶显示*********/sbit scl=P0^7;//液晶显示时钟线sbit sid=P0^6;//数据线sbit cs=P0^5;//使能端uchar code line1[12]={"画笔: 绕线机控制器 "};//第一行显示数据uchar code line2[11]={"坐标: 绕线机控制器 "};//第二行uchar code line3[12]={"时间: 定制控制系统.秒 "};uchar code line4[12]={"状态: "};uchar code yuan[141][2]={{ 0绕线机控制器 25}绕线机控制器{ 0绕线机控制器 24}绕线机控制器{ 0绕线机控制器 23}绕线机控制器{ 0绕线机控制器 22}绕线机控制器{ 0绕线机控制器 21}绕线机控制器{ 1绕线机控制器 20}绕线机控制器{ 1绕线机控制器 19}绕线机控制器{ 1绕线机控制器 18}绕线机控制器{ 1绕线机控制器 17}绕线机控制器{ 2绕线机控制器 16}绕线机控制器{ 2绕线机控制器 15}绕线机控制器{ 3绕线机控制器 14}绕线机控制器{ 3绕线机控制器 13}绕线机控制器{ 4绕线机控制器 12}绕线机控制器{ 4绕线机控制器 11}绕线机控制器{ 5绕线机控制器 10}绕线机控制器{ 6绕线机控制器 9}绕线机控制器{ 7绕线机控制器 8}绕线机控制器{ 8绕线机控制器 7}绕线机控制器{ 9绕线机控制器 6}绕线机控制器{10绕线机控制器 5}绕线机控制器{11绕线机控制器 4}绕线机控制器{12绕线机控制器 4}绕线机控制器{13绕线机控制器 4}绕线机控制器{14绕线机控制器 3}绕线机控制器{15绕线机控制器 2}绕线机控制器{16绕线机控制器 2}绕线机控制器{17绕线机控制器 2}绕线机控制器{18绕线机控制器 1}绕线机控制器{19绕线机控制器 1}绕线机控制器{20绕线机控制器 1}绕线机控制器{21绕线机控制器 0}绕线机控制器{22绕线机控制器 0}绕线机控制器{23绕线机控制器 0}绕线机控制器{24绕线机控制器 0}绕线机控制器{25绕线机控制器 0}绕线机控制器{26绕线机控制器 0}绕线机控制器{27绕线机控制器 0}绕线机控制器{28绕线机控制器 0}绕线机控制器{29绕线机控制器 0}绕线机控制器{30绕线机控制器 0}绕线机控制器{31绕线机控制器 1}绕线机控制器{32绕线机控制器 1}绕线机控制器{33绕线机控制器 1}绕线机控制器{34绕线机控制器 2}绕线机控制器{35绕线机控制器 2}绕线机控制器{36绕线机控制器 3}绕线机控制器{37绕线机控制器 3}绕线机控制器{38绕线机控制器 4}绕线机控制器{39绕线机控制器 4}绕线机控制器{40绕线机控制器 5}绕线机控制器{41绕线机控制器 6}绕线机控制器{42绕线机控制器 7}绕线机控制器{43绕线机控制器 8}绕线机控制器{44绕线机控制器 9}绕线机控制器{45绕线机控制器 10}绕线机控制器{46绕线机控制器 11}绕线机控制器{46绕线机控制器 12}绕线机控制器{47绕线机控制器 13}绕线机控制器{47绕线机控制器 14}绕线机控制器{48绕线机控制器 15}绕线机控制器{48绕线机控制器 16}绕线机控制器{49绕线机控制器 17}绕线机控制器{49绕线机控制器 18}绕线机控制器{49绕线机控制器 19}绕线机控制器{49绕线机控制器 20}绕线机控制器{50绕线机控制器 21}绕线机控制器{50绕线机控制器 22}绕线机控制器{50绕线机控制器 23}绕线机控制器{50绕线机控制器 24}绕线机控制器{50绕线机控制器 25}绕线机控制器{50绕线机控制器 26}绕线机控制器{50绕线机控制器 27}绕线机控制器{50绕线机控制器 28}绕线机控制器{50绕线机控制器 29}绕线机控制器{50绕线机控制器 30}绕线机控制器{49绕线机控制器 31}绕线机控制器{49绕线机控制器 32}绕线机控制器{49绕线机控制器 33}绕线机控制器{48绕线机控制器 34}绕线机控制器{48绕线机控制器 35}绕线机控制器{48绕线机控制器 36}绕线机控制器{47绕线机控制器 37}绕线机控制器{46绕线机控制器 38}绕线机控制器{46绕线机控制器 39}绕线机控制器{45绕线机控制器 40}绕线机控制器{44绕线机控制器 41}绕线机控制器{43绕线机控制器 42}绕线机控制器{42绕线机控制器 43}绕线机控制器{41绕线机控制器 44}绕线机控制器{40绕线机控制器 45}绕线机控制器{39绕线机控制器 46}绕线机控制器{38绕线机控制器 46}绕线机控制器{37绕线机控制器 47}绕线机控制器{36绕线机控制器 47}绕线机控制器{35绕线机控制器 48}绕线机控制器{34绕线机控制器 48}绕线机控制器{33绕线机控制器 49}绕线机控制器{32绕线机控制器 49}绕线机控制器{31绕线机控制器 49}绕线机控制器{30绕线机控制器 49}绕线机控制器{29绕线机控制器 50}绕线机控制器{28绕线机控制器 50}绕线机控制器{27绕线机控制器 50}绕线机控制器{26绕线机控制器 50}绕线机控制器{25绕线机控制器 50}绕线机控制器{24绕线机控制器 50}绕线机控制器{23绕线机控制器 50}绕线机控制器{22绕线机控制器 50}绕线机控制器{21绕线机控制器 50}绕线机控制器{20绕线机控制器 50}绕线机控制器{19绕线机控制器 49}绕线机控制器{18绕线机控制器 49}绕线机控制器{17绕线机控制器 49}绕线机控制器{16绕线机控制器 48}绕线机控制器{15绕线机控制器 48}绕线机控制器{14绕线机控制器 47}绕线机控制器{13绕线机控制器 47}绕线机控制器{12绕线机控制器 46}绕线机控制器{11绕线机控制器 46}绕线机控制器{10绕线机控制器 45}绕线机控制器{ 9绕线机控制器 44}绕线机控制器{ 8绕线机控制器 43}绕线机控制器{ 7绕线机控制器 42}绕线机控制器{ 6绕线机控制器 41}绕线机控制器{ 5绕线机控制器 40}绕线机控制器{ 4绕线机控制器 39}绕线机控制器{ 4绕线机控制器 38}绕线机控制器{ 3绕线机控制器 37}绕线机控制器{ 3绕线机控制器 36}绕线机控制器{ 2绕线机控制器 35}绕线机控制器{ 2绕线机控制器 34}绕线机控制器{ 1绕线机控制器 33}绕线机控制器{ 1绕线机控制器 32}绕线机控制器{ 1绕线机控制器 31}绕线机控制器{ 1绕线机控制器 30}绕线机控制器{ 0绕线机控制器 29}绕线机控制器{ 0绕线机控制器 28}绕线机控制器{ 0绕线机控制器 27}绕线机控制器{ 0绕线机控制器 26}绕线机控制器{ 0绕线机控制器 25}};uchar line44[4]={"坐标"};void sendcom();void delay(uint v)//延时程序{while(v机器人控制器!=0)v–;}void writelcd(uchar date绕线机控制器bit k)//液晶写数据{uchar temp;uint i=0;temp=date;for(i=0;i<5;i++){scl=0;sid=1;scl=1;}scl=0;sid=0;scl=1;scl=0;sid=k;scl=1;scl=0;sid=0;scl=1;for(i=0;i<16;i++){if(i=8&&i<12)){scl=0;temp=temp<<1;sid=CY;scl=1;}else{scl=0;sid=0;scl=1;}}delay(100);}void initiallcd(void)//液晶初始化{writelcd(0x30绕线机控制器0); //基本指令集writelcd(0x06绕线机控制器0); //光标右移writelcd(lcdc绕线机控制器0);//显示控制}void lcddriver(void)//显示{uint i=0;initiallcd();writelcd(0x80绕线机控制器0);for(i=0;i<16;i++){if(i9&&i<12){writelcd(line1[i-2]绕线机控制器1);}else if(i==12){writelcd((yc/10+0x30)绕线机控制器1);}else if(i==13){writelcd((yc%10+0x30)绕线机控制器1);}else{writelcd(line1[i-4]绕线机控制器1);}}writelcd(0x90绕线机控制器0);for(i=0;i<16;i++){if(i9&&i<12){writelcd(line2[i-3]绕线机控制器1);}else if(i==12||i==13){writelcd(time1[i-10]+0x30绕线机控制器1);}else {writelcd(line2[i-5]绕线机控制器1);}}writelcd(0x88绕线机控制器0);for(i=0;i<16;i++){if(i<7){writelcd(line3[i]绕线机控制器1);}else if(i==7){writelcd((time/1000+0x30)绕线机控制器1);}else if(i==8){writelcd((time%1000/100+0x30)绕线机控制器1);}else if(i==9){writelcd((time%100/10+0x30)绕线机控制器1);}else if(i==10){writelcd(line3[7]绕线机控制器1);}else if(i==11){writelcd((time%10+0x30)绕线机控制器1);}else{writelcd(line3[i-4]绕线机控制器1);}}writelcd(0x98绕线机控制器0);for(i=0;i<16;i++){if(i7&&i<12){writelcd(line44[i-8]绕线机控制器1);}else {writelcd(line4[i-4]绕线机控制器1);}}writelcd(place绕线机控制器0);l=0;}/***************键盘读取及参数设定***********/sbit key1=P2^0;//扫描矩阵键盘的四行sbit key2=P2^1;sbit key3=P2^2;sbit key4=P2^3;bit keyon绕线机控制器keyoff绕线机控制器key0on绕线机控制器key1on绕线机控制器key2on绕线机控制器key3on绕线机控制器key4on绕线机控制器key5on绕线机控制器key6on绕线机控制器key7on绕线机控制器key8on绕线机控制器key9on绕线机控制器keyAon绕线机控制器keyBon绕线机控制器av;//各个按键和其他的防连击的位uchar buffer;//按键值0~9void readkey(void)//读键{keyon=0;//键按下标志P2=0xef;//对键进行扫描if(key1==0){key0on=1;keyon=1;keyoff=1;l=1;}//0if(key2==0){key8on=1;keyon=1;keyoff=1;l=1;}//8if(key3==0){key4on=1;keyon=1;keyoff=1;l=1;}//4if(key4==0){stat=0;l=1;set=1;cnt=0;bittemp=0;ccnt=0;}//写坐标P2=0xdf;if(key1==0){key1on=1;keyon=1;keyoff=1;l=1;}//1if(key2==0){key9on=1;keyon=1;keyoff=1;l=1;}//9if(key3==0){key5on=1;keyon=1;keyoff=1;l=1;}//5if(key4==0){stat=1;l=1;set=1绕线机控制器cnt=0;bittemp=0;ccnt=0;}//作图P2=0xbf;if(key1==0){key2on=1;keyon=1;keyoff=1;l=1;}//2if(key2==0){keyAon=1;keyon=1;keyoff=1;l=1;bittemp=0;ccnt=0;}//确认if(key3==0){key6on=1;keyon=1;keyoff=1;l=1;}//6if(key4==0){stat=2;l=1;set=1绕线机控制器cnt=100;bittemp=0;time1[0]=x0/10;time1[1]=x0%10;time1[2]=y0/10;time1[3]=y0%10;ccnt=0;}//画圆P2=0x7f;if(key1==0){key3on=1;keyon=1;keyoff=1;l=1;}//3if(key2==0){keyBon=1;keyon=1;keyoff=1;l=1;}//取消if(key3==0){key7on=1;keyon=1;keyoff=1;l=1;}//7if(key4==0){stat=3;l=1;ccnt=0;}//寻轨}void keyprocess(void)//防连击和对键赋值绕线机控制器还有使键有效{readkey();while(keyoff){readkey();if(keyon==0){if(key0on==1){buffer=0;key0on=0;av=1;}if(key1on==1){buffer=1;key1on=0;av=1;}if(key2on==1){buffer=2;key2on=0;av=1;}if(key3on==1){buffer=3;key3on=0;av=1;}if(key4on==1){buffer=4;key4on=0;av=1;}if(key5on==1){buffer=5;key5on=0;av=1;}if(key6on==1){buffer=6;key6on=0;av=1;}if(key7on==1){buffer=7;key7on=0;av=1;}if(key8on==1){buffer=8;key8on=0;av=1;}if(key9on==1){buffer=9;key9on=0;av=1;}if(keyAon==1){enter=1;keyAon=0;}if(keyBon==1){cancle=1;keyBon=0;}keyoff=0;}}}/**************************************************************/void state(void)//状态{switch(stat){case 0 : line44[0]=0xd7;line44[1]=0xf8;line44[2]=0xb1;line44[3]=0xea;keyprocess();//写坐标状态if(bitcount=4){bitcount=0;}av=0;l=1;}}else{av=0;xs=time1[0]*10+time1[1];ys=time1[2]*10+time1[3];}if(enter){set=~set;if(set){lcdc=0x0f;TR0=0;time=0;l=1;}else{lcdc=0x0c;TR0=1;}enter=0;}break;case 1 : line44[0]=0xd7;line44[1]=0xf7;line44[2]=0xcd;line44[3]=0xbc;keyprocess();//作图状态if(bitcount=4){bitcount=0;}av=0;l=1;}if(cancle){if(cnt>8){cnt=0;}else{cnt++;}string[cnt][0]=time1[0]*10+time1[1];string[cnt][1]=time1[2]*10+time1[3];cancle=0;}ccnt=cnt;}else{ccnt=bittemp;av=0;xs=string[bittemp][0];ys=string[bittemp][1];time1[0]=xs/10;time1[1]=xs%10;time1[2]=ys/10;time1[3]=ys%10;}if(enter){set=~set;bitcount=0; if(set){lcdc=0x0f;TR0=0;time=0;l=1;}else{lcdc=0x0c;TR0=1;}enter=0;}break;case 2 : line44[0]=0xbb;line44[1]=0xad;line44[2]=0xd4;line44[3]=0xb2;keyprocess();//画圆状态if(bitcount=4){bitcount=0;}av=0;l=1;}}else{av=0;x0=time1[0]*10+time1[1];y0=time1[2]*10+time1[3];if(x0>55||x075||y0<25){enter=1;TR0=0;}xs=yuan[bittemp][0]+x0-25;ys=yuan[bittemp][1]+y0-25;}if(enter){set=~set;bitcount=0;if(set){lcdc=0x0f;TR0=0;time=0;l=1;}else{lcdc=0x0c;TR0=1;}enter=0;}break;case 3 : line44[0]=0xd1;line44[1]=0xb0;line44[2]=0xb9;line44[3]=0xec;keyprocess();//寻轨状态if(bitcount=4){bitcount=0;}av=0;l=1;}}else{av=0;begin[0]=time1[0]*10+time1[1];begin[1]=time1[2]*10+time1[3];}if(enter){set=~set;if(set){lcdc=0x0f;TR0=0;time=0;l=1;}else{lcdc=0x0c;TR0=1;xs=begin[0];ys=begin[1];xungui=1;}enter=0;}break;default : break;}}void comero(void)//坐标处理{if(xc>xs)//对X坐标进行处理{xt=xc-1;}else if(xcys)//对Y坐标进行处理{yt=yc-1;}else if(yc0)yt=yc-1;}if(sa==0&&sb==0&&sc==0&&sd==1){if(xc>0)xt=xc-1;}if(sa==1&&sb==1&&sc==0&&sd==1){if(xc>0)xt=xc-1;yt=yc+1;}if(sa==0&&sb==1&&sc==1&&sd==0){if(xc>0)xt=xc-1;if(yc>0)yt=yc-1;}if(sa==0&&sb==0&&sc==1&&sd==1){if(yc>0)yt=yc-1;xt=xc+1;}if(sa==1&&sb==0&&sc==0&&sd==1){xt=xc+1;yt=yc+1;}if(sa==0&&sb==1&&sc==1&&sd==1){xt=xc+1;}if(sa==1&&sb==1&&sc==1&&sd==0){yt=yc+1;}if(sa==1&&sb==1&&sc==0&&sd==1){if(xc>0)xt=xc-1;}if(sa==1&&sb==0&&sc==1&&sd==1){if(yc>0)yt=yc-1;}if(sa==1&&sb==1&&sc==1&&sd==1){xt=xc+1;yt=yc+1;}if(sa==0&&sb==0&&sc==0&&sd==0){TR0=0;}roledeal();if(ok){xc=xt;yc=yt;sendcom();ok=0;}}}else//其他状态{if(xc==xs&&yc==ys){if(stat==1){if(bittemp==9){bittemp=0;TR0=0;enter=1;}else{bittemp++;}ccnt=bittemp;}else if(stat==2){if(bittemp>=140){bittemp=0;TR0=0;enter=1;}else{bittemp++;}}else if(stat==0){TR0=0;}}comero();roledeal();if(ok){xc=xt;yc=yt;sendcom();ok=0;}}}main(){delay(100);TMOD=0x21;//开启定时器TH1=0xFD;TL1=0xFD;TR1=1;SCON=0x50;EA=1;//打开总中断ES=1;ET0=1;//打开T0TR0=0;while(1){state();if(机器人控制器!set){process();}if(l)lcddriver();}}t0count () interrupt 1 using 1//计时功能{TH0=0xfc;TL0=0x70;t0=t0+1;if(t0==100){time++;l=1;if(time>=10000){time=0;}t0=0;}}serial () interrupt 4 using 1//接受下位机到位信号{if(1==RI){RI=0;if(0x60==SBUF){ok=1;l=1;}}2 从机程序清单/*******************************************//*****从机程序***********//*****功能*****//*从主机接受两绳长数值绕线机控制器对绳长进行调整绕线机控制器使画笔到指定坐标*/#include#include#define uint unsigned int#define uchar unsigned charsbit a1=P0^0;sbit a2=P0^1;sbit a3=P0^2;sbit a4=P0^3;//一号电机的驱动口sbit b1=P0^4;sbit b2=P0^5;sbit b3=P0^6;sbit b4=P0^7;//二号电机驱动口uint djmc1绕线机控制器djmc2;//电机运转脉冲bit record;//数据接受标志uchar temp[2]={0x73绕线机控制器0x95};//左右目标线长uchar temp1[2]={0x73绕线机控制器0x95};//左右目前线长bit cnt=0;bit w1=1绕线机控制器w2=1;//左右电机正反转标志位bit run1=0绕线机控制器run2=0;//左右电机运行标志long dis1=0绕线机控制器dis2=0;//需要改变的线长long t0;//定时器参数long int cnt1绕线机控制器cnt2绕线机控制器cnt11绕线机控制器cnt22;//走线需要左右电机脉冲数bit send;//void dj1(void)//一号电机驱动{if(w1)//正转{switch(djmc1){case 0 : a1=1;a2=0;a3=0;a4=1;break;case 1 : a1=1;a2=0;a3=1;a4=0;break;case 2 : a1=0;a2=1;a3=1;a4=0;break;case 3 : a1=0;a2=1;a3=0;a4=1;break;default : djmc1=0;break;}}else//反转{switch(djmc1){case 0 : a1=0;a2=1;a3=0;a4=1;break;case 1 : a1=0;a2=1;a3=1;a4=0;break;case 2 : a1=1;a2=0;a3=1;a4=0;break;case 3 : a1=1;a2=0;a3=0;a4=1;break;default : djmc1=0;break;}}}void dj2(void){if(w2){switch(djmc2){case 0 : b1=0;b2=1;b3=0;b4=1;break;case 1 : b1=1;b2=0;b3=0;b4=1;break;case 2 : b1=1;b2=0;b3=1;b4=0;break;case 3 : b1=0;b2=1;b3=1;b4=0;break;default : djmc2=0;break;}}else{switch(djmc2){case 0 : b1=0;b2=1;b3=1;b4=0;break;case 1 : b1=1;b2=0;b3=1;b4=0;break;case 2 : b1=1;b2=0;b3=0;b4=1;break;case 3 : b1=0;b2=1;b3=0;b4=1;break;default : djmc2=0;break;}}}main(){TMOD=0x21;//开启定时器TH0=0xfc;//给初值TL0=0x62;TH1=0xFD;TL1=0xFD;TR1=1;SCON=0x50;PCON=0x00;EA=1;//打开总中断ES=1;ET0=1;//打开T0TR0=1;while(1){dj1();dj2();if(send==1&&run1==0&&run2==0){temp1[1]=temp[1];temp1[0]=temp[0];SBUF = 0x60;while(机器人控制器!TI); // 等特数据传送TI = 0; // 清除数据传送标志send=0;}}}serial () interrupt 4 using 1//串口中断绕线机控制器接收从主机发过来的绳长值{if(1==RI){RI=0;if(0xFF==SBUF)//地址判断绕线机控制器为减少误差{record=1;cnt=0;}else if(1==record){temp[cnt]=SBUF;if(cnt){run1=1;run2=1;send=1;record=0;cnt=0;if(temp[1]>temp1[1])//给右线长度{dis2=temp[1]-temp1[1];w2=1;}else{dis2=temp1[1]-temp[1];w2=0;}cnt22=(dis2*9730)/928;cnt2=0;}else{if(temp[0]>temp1[0])//给左线长度{dis1=temp[0]-temp1[0];w1=1;}else{dis1=temp1[0]-temp[0];w1=0;}cnt11=(dis1*9730)/928;cnt1=0;cnt=1;}} }}t0count () interrupt 1 using 1//电机脉冲产生定时器{TH0=0xfc;TL0=0x66;t0++;if(t0==50){t0=0;if(run1){if(cnt1>=cnt11){run1=0;}else{cnt1++;if(3==djmc1){djmc1=0;}else{djmc1=djmc1+1;}}}if(run2){if(cnt2>=cnt22){run2=0;}else{cnt2++;if(3==djmc2){djmc2=0;}else{djmc2=djmc2+1;}}}}}追问拜托了运动控制器,小弟还是个新手运动控制器,能不能给个能正确编译的程序呀评论|

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理

在线客服
在线客服
QQ客服