直线插补c语言
‘壹’ 求51单片机可以用的直线插补的c程序
限于篇幅,程序省去 按键子程序 延时子程序 液晶初始化及相关程序、字符部分
#include<reg52.h>
#include<intrins.h>
#definemode0x81//方式0,A口、B口输出,C口高4位输出,低4位输入
#include"stdio.h"
#include"string.h"
#include"math.h"
xdataunsignedcharPA_at_0x7f00;
xdataunsignedcharPB_at_0x7f01;
xdataunsignedcharPC_at_0x7f02;
xdataunsignedcharcaas_at_0x7f03;//控制字
sbitP32=P3^2;
sbitP33=P3^3;
sbitP35=P3^5;
#defineucharunsignedchar
#defineuintunsignedint
unsignedcharh,Pos;
unsignedintR,NX,NY;
unsignedcharkey;
codeunsignedcharKeyTable[]={//键码定义
0x0f,0x0b,0x07,0x03,
0x0e,0x0a,0x06,0x02,
0x0d,0x09,0x05,0x01,
0x0c,0x08,0x04,0x00
};
codeunsignedcharLEDMAP[]={//八段管显示码
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};
unsignedcharCode_;//字符代码寄存器
#definePD161//122/2分成左右两半屏(122x32)
unsignedcharColumn;
unsignedcharPage_;//页地址寄存器D1,DO:页地址
unsignedcharCode_;//字符代码寄存器
unsignedcharCommand;//指令寄存器
unsignedcharLCDData;//数据寄存器
xdataunsignedcharCWADD1_at_0x1cff;//写指令代码地址(E1)
xdataunsignedcharDWADD1_at_0x1eff;//写显示数据地址(E1)
xdataunsignedcharCRADD1_at_0x1dff;//读状态字地址(E1)
xdataunsignedcharDRADD1_at_0x1fff;//读显示数据地址(E1)
xdataunsignedcharCWADD2_at_0x3cff;//写指令代码地址(E2)
xdataunsignedcharDWADD2_at_0x3eff;//写显示数进地址(E2)
xdataunsignedcharCRADD2_at_0x3dff;//读状态字地址(E2)
xdataunsignedcharDRADD2_at_0x3fff;//读显示数据地址(E2)
//----------------------液晶-----------------
//清屏
//************************中文显示程序***********************************/
/*************************直线插补***************************8*/
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=50;y>0;y--);
}
voidzhengx()
{
PA=0x00;
delay(10);
PA=0x01;
delay(10);
}
voidfux()
{
PA=0x02;
delay(10);
PA=0x03;
delay(10);
}
voidzhengy()
{
PB=0x00;
delay(10);
PB=0x10;
delay(10);
}
voidfuy()
{
PB=0x20;
delay(10);
PB=0x30;
delay(10);
}
voidxian(intNX,intNY)
{intFM,NXY,XOY,ZF,z;
FM=0;
{if(NX>0)
if(NY>0)
XOY=1;
else
XOY=4;
else
if(NY>0)
XOY=2;
else
XOY=3;}
for(NXY=fabs(NX)+fabs(NY)-1;NXY>=0&&P32!=0&&P33!=0;NXY--)
{{if(NX>0)
if(NY>0)
XOY=1;
else
XOY=4;
else
if(NY>0)
XOY=2;
else
XOY=3;}
for(NXY=fabs(NX)+fabs(NY)-1;NXY>=0;NXY--)
{if(FM>=0)
{if(XOY==1||XOY==4)
{ZF=1;
zhengx();
}
else
{ZF=2;
fux();
}
FM=FM-fabs(NY);
}
else
{if(XOY==1||XOY==2)
{
ZF=3;
zhengy();
}
else
{ZF=4;
fuy();
}
FM=FM+fabs(NX);
}
}
for(z=0;z<200;z++)
{P35=0;
delay(10);
P35=1;
delay(10);
}
}
}
‘贰’ 步进电机三轴联动三维直线插补c语言编写的程序
http://wenku..com/view/d73efa0ef12d2af90242e6c4.html
‘叁’ 直线插补是什么意思啊 数控车床的
直线插补的意思就是,在曲线的两点之间用一段一段的直线段来拟合这条曲线,当直线段的段数足够多时,可以非常接近原来的曲线,这样的处理方法称为直线插补。
很多数控机床除了直线插补还有圆弧插补,也就是说在曲线两点之间用多个圆弧曲线来拟合这条曲线,达到同等精度的情况下,圆弧插补所需的程序段数要远远少于直线插补。
从计算难度和计算量来讲,直线插补计算比较简单,结果的数据量大,圆弧插补计算比较复杂,结果数据量比较小,可以根据零件加工要求来选择用那种插补方法。
‘肆’ 谁有用C语言编写的直线,圆弧插补程序
/*************************************************************************
Function:intArcXY(doubledfx0,doubledfy0,doubledfrx,
doubledfry,intangle);
Description:在X-Y轴所构成的平面上,以圆弧运动的方式从目前位置经过指
定的参考点到目的点。调用此函数成功将增加运动命令的库存数目。
Parameters:dfx0,dfy0参考点的X-Y轴座标值
dfrx,dfry圆心的X-Y轴座标值
angle插补角度
Calls:无
ReturnValue:大于或等于0给予此运动命令的编码
小于0失败,传回值的意义可参考错误信息代码
**************************************************************************/
#include<stdio.h>
#include<math.h>
intArcXY(doubledfx0,doubledfy0,doubledfrx,doubledfry,intangle);
intsymbol(doublenumber);
main()
{
ArcXY(0,0,-3,5,360);
getch();
}
intArcXY(doubledfx0,doubledfy0,doubledfrx,doubledfry,intangle)
{
FILE*f1;
doublei,j,dx,dy,dfr,x,y,ang,step,f=0.01;
intflag,tempx,tempy,statex,statey,direction=1;
dfr=sqrt((dfrx-dfx0)*(dfrx-dfx0)+(dfry-dfy0)*(dfry-dfy0));
if(dfx0==0)
{
dfx0=1;
dfrx=dfrx+1;
statex=1;
}
if(dfy0==0)
{
dfy0=1;
dfry=dfry+1;
statey=1;
}
dfrx=2*dfx0-dfrx;
i=dfx0-dfrx;
j=dfy0-dfry;
x=dfx0;
y=dfy0;
step=ang=180*2*asin(f/(2*dfr))/3.1415926;
if(((dfx0>0)&&(dfy0>0))||((dfx0<0)&&(dfy0<0)))
{
flag=direction;
}
if(((dfx0<0)&&(dfy0>0))||((dfx0>0)&&(dfy0<0)))
{
flag=-direction;
}
f1=fopen("c:\c.txt","w+");
if(statex==1)
{
x=x-1;
}
if(statey==1)
{
y=y-1;
}
fprintf(f1,"%f,",x);
fprintf(f1,"%f ",y);
while(ang<angle)
{
dx=f*(j+flag*(f*i)/(2*dfr))/dfr;
dy=f*(i-flag*(f*j)/(2*dfr))/dfr;
tempx=symbol(x);
tempy=symbol(y);
x=x+dx;
y=y+dy;
fprintf(f1,"%f,",x);
fprintf(f1,"%f ",y);
if((tempx!=symbol(x))||(tempy!=symbol(y)))
{
flag=-flag;
}
i=i-dx;
j=j+dy;
ang=ang+step;
}
return0;
}
intsymbol(doublenumber)
{
if(number>0)
{
return1;
}
else
{
return-1;
}
}
‘伍’ G01直线插补 是什么意思
G01是数控加工技术指令中的直线插补指令。直线插补指令的功能是刀具以程序中设定的进给速度,从某一点出发,直线移动目标点。G01倒角控制功能可以在两相邻轨迹的程序段之间插入直线倒角或圆弧倒角。
1.G01指令是在刀具加工直线轨迹时采用的,如车外圆、断面、内孔,切槽等。
2.机床执行直线插补指令时,程序段中必须有F指令。刀具移动的快慢是由F后面的数值大小来决定。
‘陆’ 插补算法仿真程序设计,c语言程序设计,求大神指点
本周该交了,加油,哈哈
‘柒’ 简答题何为插补常用的插补算法有哪几种
数控装置根据输入的零件程序的信息,将程序段所描述的曲线的起点、终点之间的空间进行数据密化,从而形成要求的轮廓轨迹,这种“数据密化”机能就称为“插补”。
插补常用方法:
1、逐点比较法:由运动偏差产生信息,通过不断比较刀具与被加工零件轮廓之间的相对位置,决定刀具的进给。
2、数据采样法:这种方法先根据编程速度,将给定轮廓轨迹按插补周期分割为插补进给段,即用一系列首尾相连的微小线段来逼近给定曲线。
3、数字积分法:数字积分法具有运算速度快、脉冲分配均匀、易于实现多坐标联动及描绘平面各种函数曲线的特点,应用比较广泛。
(7)直线插补c语言扩展阅读
插补分类:
1、直线插补:在此方式中,两点间的插补沿着直线的点群来逼近,沿此直线控制刀具的运动。所谓直线插补就是只能用于实际轮廓是直线的插补方式。
2、圆弧插补:圆这是一种插补方式,在此方式中,根据两端点间的插补数字信息,计算出逼近实际圆弧的点群,控制刀具沿这些点运动,加工出圆弧曲线。
参考资料
网络-插补
网络-插补运算
‘捌’ 数控编程中直线插补指的是什么
直线插补(Line Interpolation)为车床上常用的一种插补方式,在此方式中,两点间的插补沿着直线的点群来逼近,沿此直线控制刀具的运动。
所谓直线插补就是只能用于实际轮廓是直线的插补方式(如果不是直线,也可以用逼近的方式把曲线用一段线段去逼近,从而每一段线段就可以用直线插补了)。
首先假设在实际轮廓起始点处沿x方向走一小段(一个脉冲当量),发现终点在实际轮廓的下方,则下一条线段沿y方向走一小段,此时如果线段终点还在实际轮廓下方,则继续沿y方向走一小段,直到在实际轮廓上方以后,再向x方向走一小段,依次循环类推。
直到到达轮廓终点为止.这样,实际轮廓就由一段段的折线拼接而成,虽然是折线,但是如果我们每一段走刀线段都非常小(在精度允许范围内),那么此段折线和实际轮廓还是可以近似地看成相同的曲线的。
(8)直线插补c语言扩展阅读
G01为数控加工技术指令中的直线插补指令。直线插补指令的功能为刀具以程序中设定的进给速度,从某一点出发,直线移动到目标点。
在该模式下,刀具以两个端点间最短的距离从一个位置移动到另一个位置,这是非常重要的编程功能,主要应用于轮廓加工和成型加工中。任何斜线运动(比如倒角、斜切、角、锥体等)必须以这种模式编程,以进行精确加工。
G01倒角控制功能可以在两相邻轨迹的程序段之间插入直线倒角或圆弧倒角。
‘玖’ c语言直线插补程序,高手请进采纳后追加20分
程序问题是自己检查的,没有人会跟你看程序。
你只要说明方法或者是流程图。
你做的是直线逐点比较。
先砍掉插补程序,看能否画划线,在添加第一象限插补,最后全加上去。
确保每个步骤添加进去的代码没有问题。
‘拾’ 如何用C语言写出空间圆弧或者空间直线插补运动
程序问题是自己检查的,没有人会跟你看程序。 你只要说明方法或者是流程图。 你做的是直线逐点比较。 先砍掉插补程序,看能否画划线,在添加第一象限插补,最后全加上去。 确保每个步骤添加进去的代码没有问题。