中国石油大学华东机自测控实习程序.docx
《中国石油大学华东机自测控实习程序.docx》由会员分享,可在线阅读,更多相关《中国石油大学华东机自测控实习程序.docx(9页珍藏版)》请在冰豆网上搜索。
中国石油大学华东机自测控实习程序
A/D采集
1.采集
#include
#include
#include
#include
#include
#include"huatu.c"
voidCJ_AD();
main()
{
intgdriver=DETECT,gmode,i;
initgraph(&gdriver,&gmode,"");
setfillstyle(SOLID_FILL,2);
CJ_AD();
huatu();
getch();
}
voidCJ_AD()
{
intch=0;
inti,dl,dh,base,dtime=0,k=0;
base=0x200;
dl=inportb(base+3);
outportb(base,ch);
do
{j=0;
for(i=0;i<600;i++)
{delay(dtime);
outportb(base+1,0);
do{
}while(inportb(base+2)>=0x80);
dh=inportb(base+2);
dl=inportb(base+3);
data[i]=(dh*256+dl-2047);
}
for(i=0;i<590;i++)
if(data[i]*data[i+1]<0)
j++;
/*printf("%d",j);
getch();
*/
dtime=200;
dtime=dtime*pow(2,k);
k++;
}while(j<4);
}_
2.画图
#include
#include
#include
#include
doubledata[600];
intj=0;
inthuatu()
{
charc[20];
inti;
doublek=1;
bar(0,0,640,480);
line(39,240,640,240);/*xzhou*/
line(39,30,39,450);/*yzhou*/
for(i=-5;i<=5;i++)
{line(39,240-40*i,44,240-40*i);
sprintf(c,"%d",i);
outtextxy(15,240-40*i,c);
}
moveto(39,240-data[0]*200/2047);
if(j>15)k=j/10;
for(i=0;i<600/k;i++){lineto(39+i*k,240-data[i]*200/2047);}
getch();
closegraph();
}_
D/A输出
1.D/A
#include
#include
#include
#include
#include"huatu.c"
#definepi3.14159265357
intSH_DA();
main()
{
doublea=5,fre=1;
intcontrol,flag=0,zf=1;
inti,dh,dl;
intgdriver=DETECT,gmode;
printf("\nPleaseinputa:
");
scanf("%lf",&a);
printf("\nYourais%lf",a);
printf("\nPleaseinputfrequency:
");
scanf("%lf",&fre);
printf("\nYourfrequencyis%lf",fre);
printf("\nPleasechoosethewavetype,1issine,2istriangle,3isquarter:
");
scanf("%d",&control);
printf("\nYourchooseis%d",control);
getch();
initgraph(&gdriver,&gmode,"");
setfillstyle(SOLID_FILL,2);
for(i=0;i<=600;i++)
{if(control==1)data[i]=a*sin(2*pi*i*fre/600);
if(control==2){data[i]=flag/fre;flag=flag+zf;if(fabs(flag/fre)>=a)zf*=-1;}
if(control==3){data[i]=a;flag++;if(flag>=300/fre){flag=0;a*=-1;}}
data2[i]=(data[i]+5)*409.5;
}
huatu();
SH_DA();
getch();
}
intSH_DA()
{intdh,dl,i,base;
base=0x200;
for(;;)
{for(i=0;i<=600;i++)
{dh=((int)data2[i])/16;
dl=((int)data2[i]%16)*16;
outportb(base+4,dh);
outportb(base+5,dl);
inportb(base+0x0);
}
}
}
2.画图
#include
#include
#include
#include
doubledata[601];
doubledata2[601];
inthuatu()
{
charc[20];
inti;
bar(0,0,640,480);
line(39,240,640,240);/*xzhou*/
line(39,30,39,450);/*yzhou*/
for(i=-5;i<=5;i++)
{line(39,240-40*i,44,240-40*i);
sprintf(c,"%d",i);
outtextxy(15,240-40*i,c);
}
moveto(39,240-data[0]*40);
for(i=0;i<600;i++){lineto(39+i,240-data[i]*40);}
/*getch();
closegraph();
*/
}
3.测试
#include
main()
{
doublea=6;
scanf("%lf",&a);
printf("%lf",a);
getch();
}_
步进电机驱动
1.电机驱动
#include
#include
#include
#include
#include
intright();
intleft();
main()
{
intd[5];
inti,control,base,dtime=0,direct=1,stop=0xff;
printf("\nPleaseinputdelay,thelarger,theslower:
");
scanf("%d",&dtime);
printf("\nYourdelaytimeis%d",dtime);
printf("\nPleaseinputdirection,1and2areopposite:
");
scanf("%d",&direct);
printf("\nYourdirectionis%d",direct);
printf("\nHitSpacetostopthemotor,hitrightarrowtospinoneside,leftarrowtheoppositeside.");
base=0x200;
d[1]=0x1;d[2]=0x2;d[3]=0x8;d[4]=0x10;
control=0x80;
outportb(base+0xf,control);
for(;;){
if(direct==1)
for(i=1;i<=4;i++){
printf("%d",d[i]);
outportb(base+0xc,d[i]);
delay(dtime);
}
if(direct==2)
for(i=4;i>=1;i--){
printf("%d",d[i]);
outportb(base+0xc,d[i]);
delay(dtime);
}
}
/*
if(bioskey
(1)!
=0){
if(bioskey(0)==0x3920)outportb(base+0xc,stop);
if(bioskey(0)==0x4d00)right();
if(bioskey(0)==0x4b00)left();
if(bioskey(0)==0x4800)dtime=dtime-10;
if(bioskey(0)==0x5000)dtime=dtime+10;
}
*/
}_
2.键控
#include
#include
#include
#include
#include
#definestop0x00
intbase=0x200;
intd[5];
intright();
intleft();
intcontro();
intdtime=0;
intdirect=1;
intkey=0;
main()
{
inti,control;
printf("\nPleaseinputdelay,thelarger,theslower:
");
scanf("%d",&dtime);
printf("\nYourdelaytimeis%d",dtime);
printf("\nPleaseinputdirection,1and2areopposite:
");
scanf("%d",&direct);
printf("\nYourdirectionis%d",direct);
printf("\nHitSpacetostopthemotor,hitrightarrowtospinoneside,leftarrowtheoppositeside.");
d[1]=0x1;d[2]=0x2;d[3]=0x8;d[4]=0x10;
control=0x80;
outportb(base+0xf,control);
for(;;){
if(direct==1)
right();
if(direct==2)
left();
if(bioskey
(1)!
=0)key=bioskey(0);
if(key!
=0)contro();
}
}
intright(){
inti;
for(i=1;i<=4;i++){
printf("%d",d[i]);
outportb(base+0xc,d[i]);
delay(dtime);
if(bioskey
(1)!
=0)key=bioskey(0);
if(key!
=0)contro();
}
}
intleft(){
inti;
for(i=4;i>=1;i--){
outportb(base+0xc,d[i]);
delay(dtime);
if(bioskey
(1)!
=0)key=bioskey(0);
if(key!
=0)contro();
}
}
intcontro(){
if(key==0x3920){outportb(base+0xc,stop);direct=0;}
if(key==0x4d00)direct=1;
if(key==0x4b00)direct=2;
if(key==0x4800)dtime=dtime-100;
if(key==0x5000)dtime=dtime+100;
key=0;
}