⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 superpid.c

📁 pid控制界面 嵌套pid控制代码可手动输入参数,实现在线监控功能(连接硬件时)
💻 C
📖 第 1 页 / 共 2 页
字号:
n=2;
settextstyle(0,0,3);
while(!kbhit()){
	setcolor(n);
	outtextxy(150,150,"Welcom to use");
	delay(120);
	n++;
	if(n==16)n=1;
	}
getch();
}
/*////////////////////////////////////*/
void pen(int i,int j)
{
setcolor(RED);
setlinestyle(0,0,3);
moveto(pen_x,pen_y);
lineto(pen_x+x(16),pen_y);
lineto(pen_x+x(12),pen_y+y(4));
lineto(pen_x+x(20),pen_y+y(12));
lineto(pen_x+x(12),pen_y+y(20));
lineto(pen_x+x(4),pen_y+y(12));
lineto(pen_x,pen_y+y(16));
lineto(pen_x,pen_y);
setfillstyle(1,14);
floodfill(pen_x+5,pen_y+5,4);
setlinestyle(0,0,1);
}
/*//////////////////////////////*/
void start(void)  /*/connect "work" function to INT_1c*/
{
disable();
old_int1c=getvect(0x1c);
setvect(0x1c,work);
enable();
}
/*/////////////////////////////*/
void stop(void)   /*/disconnect "work" from INT_1c*/
{
disable();
setvect(0x1c,old_int1c);
enable();
out(0);
}
/*/////////////////////////////*/
float chtofloat(char *fl)   //convert a string to a float value.
{
int i,j,dot=20;
float result,sss=1;
result=0.0;
for(i=0;i<10;i++){
	if(fl[i]=='.')dot=i;
	if(fl[i]==0){
		if(i==0)return(0);
		else break;
		}
	}
--i;
if(dot==20)for(j=i;j>=0;j--){
		result+=(fl[j]-'0')*sss;
		sss*=10;
		}

if(dot!=20){
	for(j=dot-1;j>=0;j--){
		result+=(fl[j]-'0')*sss;
		sss*=10;
		}
	sss=0.1;
	for(j=dot+1;j<=i;j++){
		result+=(fl[j]-'0')*sss;
		sss/=10;
		}
	}
return(result);
}

/*-------------------------------*/
int load_v(int xx,int yy,float *var,char *fll)  //get a floating point
{ char fl[10];		   //value from the keyboard
int i=0,j,k;
union abc{
	int ddd;
	char cl,ch;
	}key;
for(j=0;j<10;j++)fl[j]=0;
settextstyle(2,0,5);
for(;i<10;){
kkkk:	key.ddd=bioskey(0);
	if(key.cl=='\b')               /*backspace pressed*/
		if(i>0){
		--i;
		fl[i]=0;
		setcolor(7);
		bar(xx,yy,xx+127,yy+12);
		setcolor(1);
		outtextxy(xx,yy,fl);
		}
	if(key.ch!=0){
		if((key.ch>='0'&&key.ch<='9')||key.ch=='.'){
			if(i!=9){fl[i]=key.ch;
			++i;}
			outtextxy(xx,yy,fl);
			}
		if(key.ch==13){
			if(i==0){*var=-1;return 0;}
			 else break;
			 }
		if(key.ch==27){*var=-1;return(0);}
		}
	if(i==9)goto kkkk;
	}
*var=chtofloat(fl);
strcpy(fll,fl);
return 1;

}

void run(int i,int j,int *go_on,int *un_started)
{
void *pw;
int xx,yy,flag;
float lvset;
char fl[10],c;
xx=x(220);
yy=y(265);
pw=(void*)malloc(imagesize(0,0,200,30));
if(j==0){
	switch(i){
	       case 0:   getimage(xx,yy,xx+200,yy+30,pw);
			 button(xx,yy,200,30,15,8,5);
			 settextstyle(0,0,1);
			 setcolor(1);
			 outtextxy(xx+10,yy+12,"VSET=");
			 load_v(xx+56,yy+7,&lvset,fl);
			 putimage(xx,yy,pw,0);
			 setfillstyle(1,8);
			 setfillstyle(1,3);
			 if( lvset>=0&&lvset<=100){
				draw_setline(VSET);
				VSET=lvset;
				draw_setline(VSET);
				bar(x(185),y(325),x(260),y(338));
				setcolor(8);
				outtextxy(x(187),y(325),fl);
				}
			 break;
		case 1: getimage(xx,yy,xx+200,yy+30,pw);
			button(xx,yy,200,30,15,8,5);
			settextstyle(0,0,1);
			setcolor(1);
			outtextxy(xx+13,yy+13,"  Ti=");
			load_v(xx+56,yy+7,&lvset,fl);
			putimage(xx,yy,pw,0);
			setfillstyle(1,8);
			 setfillstyle(1,3);
			if(lvset>0){
				Ti=lvset;
				bar(x(185),y(385),x(260),y(398));
				setcolor(8);
				outtextxy(x(187),y(385),fl);
				}
			break;

		case 2: if(*un_started){
				setfillstyle(1,3);
				bar(x(125),y(445),x(260),y(460));
				setcolor(14);
				settextstyle(0,0,1);
				outtextxy(x(157),y(450),"running");
				*un_started=0;
				start();
				}
			break;
		case 3: P=3.5;
			Td=0.5;
			Ti=200;
			setfillstyle(1,3);
			bar(x(185),y(355),x(260),y(368));
			bar(x(185),y(385),x(260),y(398));
			bar(x(185),y(415),x(260),y(428));
			setcolor(8);
			settextstyle(2,0,5);
			outtextxy(x(187),y(355),"3.5");
			outtextxy(x(187),y(385),"200");
			outtextxy(x(187),y(415),"0.5");
			break;


		default:break;

	} /*switch*/

 }
if(j==1)switch(i){
	case 0:  getimage(xx,yy,xx+200,yy+30,pw);
		 button(xx,yy,200,30,15,8,5);
		 settextstyle(0,0,1);
		 setcolor(1);
		 outtextxy(xx+10,yy+12,"  Kp=");
		 load_v(xx+56,yy+7,&lvset,fl);
		 putimage(xx,yy,pw,0);
		 setfillstyle(1,8);
		  setfillstyle(1,3);
		 if( lvset>=0){
			P=lvset;
			bar(x(185),y(355),x(260),y(368));
			setcolor(8);
			outtextxy(x(187),y(355),fl);
			}
		break;
	case 1:  getimage(xx,yy,xx+200,yy+30,pw);
		 button(xx,yy,200,30,15,8,5);
		 settextstyle(0,0,1);
		 setcolor(1);
		 outtextxy(xx+10,yy+12,"  Td=");
		 load_v(xx+56,yy+7,&lvset,fl);
		 putimage(xx,yy,pw,0);
		 setfillstyle(1,8);
		  setfillstyle(1,3);
		 if( lvset>=0){
			Td=lvset;
			bar(x(185),y(415),x(260),y(428));
			setcolor(8);
			outtextxy(x(187),y(415),fl);
			}
		break;
	case 2: if(*un_started==0){
				setfillstyle(1,3);
				bar(x(125),y(445),x(260),y(460));
				setcolor(8);
				settextstyle(0,0,1);
				outtextxy(x(160),y(450),"waiting");
				*un_started=1;
				stop();
				}
		break;
	case 3: getimage(xx,yy,xx+200,yy+30,pw);
		button(xx,yy,200,30,15,8,5);
		settextstyle(0,0,1);
		setcolor(4);
		outtextxy(xx+5,yy+6,"  Are you sure to exit");
		outtextxy(xx+38,yy+16,"     (Y/N)?");
	 gett:	c=getch();
		if(c=='n'||c=='N'||c==13||c==27);
		else if(c=='y'||c=='Y'){
			*go_on=0;
			if(*un_started==0)stop();
			}
		else goto gett;
		putimage(xx,yy,pw,0);
		break;
	 default:break;
	}/*switch*/
free(pw);
}

/*----------------------*/

void menu(void)  /*/anlyse keys inputed, decide what to do*/
{
int key,i=2,j=0,go_on=1,un_started=1;
void *w;
w=(void*)malloc(imagesize(0,0,23,23));
VSET=50;
P=3.5;
Td=0.5;
Ti=200;
draw_setline(VSET);
setfillstyle(1,3);
bar(x(185),y(415),x(260),y(428));
setcolor(8);
settextstyle(2,0,5);
outtextxy(x(187),y(325),"50");
outtextxy(x(187),y(355),"3.5");
outtextxy(x(187),y(385),"200");
outtextxy(x(187),y(415),"0.5");
getimage(pen_x-2,pen_y-2,pen_x+23,pen_y+23,w);
pen(i,j);
while(go_on){
	key=bioskey(0);     /*get extended scan code*/
	key=key&0xff?key&0xff:key>>8; /*get ASCII code or scan code*/
	switch(key){
		case 72: putimage(pen_x-2,pen_y-2,w,0);  /*restore screen*/
			 i=(i==0)?3:i-1; /*arrow up*/
			 getimage(pen_x-2,pen_y-2,pen_x+23,pen_y+23,w);
			 pen(i,j);
			 break;
		case 80: putimage(pen_x-2,pen_y-2,w,0);
			 i=(i==3)?0:i+1; /* arrow down*/
			 getimage(pen_x-2,pen_y-2,pen_x+23,pen_y+23,w);
			 pen(i,j);
			 break;
		case 75: putimage(pen_x-2,pen_y-2,w,0);
			 j=(j==0)?1:j-1; /*arrow left*/
			 getimage(pen_x-2,pen_y-2,pen_x+23,pen_y+23,w);
			 pen(i,j);
			 break;
		case 77: putimage(pen_x-2,pen_y-2,w,0);
			 j=(j==1)?0:j+1;
			 getimage(pen_x-2,pen_y-2,pen_x+23,pen_y+23,w);
			 pen(i,j);
			 break;
		case 13: click(i,j);
			 run(i,j,&go_on,&un_started);
			 break;
		default:break;
		} /*switch*/
	}  /*menu*/
free(w);
}

void main()
{
char c;
float asdf;
int d=DETECT,m;
initgraph(&d,&m,"c:\\tc\\bgi");
interface();
face(hori,vert);
out(0);
menu();
closegraph();
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -