久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
基于C語言的51單片機直線圓弧插補程序
[打印本頁]
作者:
liuqin
時間:
2015-5-9 17:27
標題:
基于C語言的51單片機直線圓弧插補程序
經過幾天的鉆研和調試,終于在51單片機上實現了二軸聯動,通過調用line(x1,y1,x2,y2,v)函數以及cytu(x1,y1,x2,a,b,r,v)和cyao(x1,y1,x2,a,b,r,v)三個命令便可實現任意圓弧和直線的插補,注意任意二字,比如直線命令,可以是水平線可以是豎直線,可以是從左往右也可從右往左,可以當做一個繪圖儀使用,如果愿意進一步升級,簡單修改加個Z軸做成數控銑床的控制器亦未嘗不可。下面是整個源程序,有興趣的可以參考參考。
#include <REG51.h>
#include <FLOAT.h>
#include <MATH.h>
sbit mai0=P1^0;
sbit mai1=P1^1;
sbit shuru=P0^0;
sbit dir0=P1^6;
sbit dir1=P1^7;
void delay(unsigned int t){
unsigned int g;
while(t!=0){
for(g=0;g++;g<600);
t--;
}
}
void mc_p0(signed long m0,unsigned int n0)
{if(m0<0){
m0=-m0;
dir0=1;
}
else{dir0=0;}
while(m0--!=0){
mai0=0;
delay(n0/2);
mai0=1;
delay(n0/2);
}
}
void mc_p1(signed long m1,unsigned int n1)
{if(m1<0){
m1=-m1;
dir1=1;
}
else{dir1=0;}
while(m1--!=0){mai1=0;
delay(n1/2);
mai1=1;
delay(n1/2);
}
}
void line(float x0,float y0,float x1,float y1,unsigned int v0){
float k=0;
float x=0;
float y=0;
float ys=0;
signed long yc=0;
x=x0;
ys=y0;
k=(y1-y0)/(x1-x0);
if(x0==x1){
mc_p1((y1-y0)*2,50000/v0);}
if(y0==y1){
mc_p0((x1-x0)*2,50000/v0);}
if((x0!=x1)&&(y0!=y1)){
if(x0<x1){ while(x<x1){
mc_p0(2,50000/v0);
x=x+1;
y=k*(x-x1)+y1;
yc=y-ys;
ys=y;
mc_p1(yc*2,50000/v0);
}
}
if(x0>x1){ while(x>x1){
mc_p0(-2,50000/v0);
x=x-1;
y=k*(x-x1)+y1;
yc=y-ys;
ys=y;
mc_p1(yc*2,50000/v0);
}
}
}
}
void cytu(float x3,float y3,float x4,float a1,float b1,
float r1,unsigned int v1){
float xx;
float yy;
float yys;
signed int yyc;
xx=x3;
yys=y3;
if(x3<x4){
while(xx<x4){
mc_p0(2,50000/v1);
xx=xx+1;
yy=b1+sqrt(r1*r1-(xx-a1)*(xx-a1));
yyc=yy-yys;
yys=yy;
mc_p1(yyc*2,50000/v1);
}
}
if(x3>x4){
while(xx>x4){
mc_p0(-2,50000/v1);
xx=xx-1;
yy=b1+sqrt(r1*r1-(xx-a1)*(xx-a1));
yyc=yy-yys;
yys=yy;
mc_p1(yyc*2,50000/v1);
}
}
}
void cyao(float x5,float y5,float x6,float a2,float b2,
float r2,unsigned int v2){
float xxx;
float yyy;
float yyys;
signed int yyyc;
xxx=x5;
yyys=y5;
if(x5<x6){
while(xxx<x6){
mc_p0(2,50000/v2);
xxx=xxx+1;
yyy=b2-sqrt(r2*r2-(xxx-a2)*(xxx-a2));
yyyc=yyy-yyys;
yyys=yyy;
mc_p1(yyyc*2,50000/v2);
}
}
if(x5>x6){
while(xxx>x6){
mc_p0(-2,50000/v2);
xxx=xxx-1;
yyy=b2-sqrt(r2*r2-(xxx-a2)*(xxx-a2));
yyyc=yyy-yyys;
yyys=yyy;
mc_p1(yyyc*2,50000/v2);
}
}
}
void main (void){
while(1){
while(shuru==0){
line(0,0,10,10,5); //直線命令,調用格式line(起點坐標x1,y1,終點坐標x2,y2,速度v)
delay(100000); //延時
line(10,10,0,0,5);
delay(100000);
line(0,0,-20,0,5);
delay(60000);
cytu(-20,0,20,0,0,20,5); //位于本身圓心上面的圓弧命令,調用格式cytu(起點x1,y1,終點x2,圓心a,b,半徑r,速度v)
delay(60000);
cyao(20,0,60,40,0,20,5); //位于本身圓心下面的圓弧命令,調用格式cyao(起點x1,y1,終點x2,圓心a,b,半徑r,速度v)
delay(60000);
cytu(60,0,20,40,0,20,5);
delay(60000);
cyao(20,0,-20,0,0,20,5); }
作者:
hippo6
時間:
2015-6-18 19:53
這個是對應g代碼的?
作者:
hippo6
時間:
2015-6-18 20:40
樓主在嗎?
作者:
yanzaihong
時間:
2015-9-18 18:32
本帖最后由 yanzaihong 于 2015-9-19 11:52 編輯
樓主該程序,我遇到個問題。就是直線插補中當:如X0 = 0; Y0 = 0; X1 = 40; Y1 = 20; X1 的值小于Y1的值時,好像運行的不對!
作者:
caidance
時間:
2015-12-21 00:23
等了好久終于等到了大神
作者:
cardtech
時間:
2017-3-7 11:33
謝謝,學習中
作者:
cardtech
時間:
2017-3-7 11:35
hippo6 發表于 2015-6-18 19:53
**** 作者被禁止或刪除 內容自動屏蔽 ****
肯定要轉譯的,G代碼是另一回事。也是G代碼要下傳下來,由單片機再翻成運作。
作者:
張威威
時間:
2017-3-29 17:11
師傅 你太厲害了
作者:
492851160
時間:
2017-5-17 19:18
你好,有原理圖嗎?我也想做一個來玩?
作者:
492851160
時間:
2017-5-17 19:20
你好,我是初學者,也想做一個玩,能給張原理圖嗎,謝謝了
作者:
CIKAR
時間:
2021-10-6 07:38
感謝無私共享,你的程序很有啟發,為別人指出了一個方向。
作者:
linta
時間:
2022-4-24 12:41
正在研究
作者:
qzusergod
時間:
2022-5-30 20:56
請問這個是如何實現繪圖的呢?
作者:
2441982213
時間:
2022-11-24 21:46
這個正是我需要的
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日韩一区二区在线观看视频
|
欧美又大又硬又粗bbbbb
|
精品一二区
|
欧美日韩一区二
|
欧美不卡一区二区三区
|
黄色片网站在线观看
|
国产91视频在线观看
|
日韩中文字幕在线观看
|
国产一级黄色大片
|
午夜看看
|
涩涩999
|
一级欧美一级日韩
|
99视频网站
|
91丨porny丨成人蝌蚪
|
在线中文字幕网站
|
日韩网站在线观看
|
午夜久久久久久
|
国产视频一区二区在线
|
青青草手机视频
|
激情影院在线观看
|
久久a级片
|
天天干网站
|
免费国产视频
|
岛国一区二区三区
|
亚洲免费二区
|
天天操天天操天天操
|
欧美日在线
|
最新超碰
|
天天精品视频
|
国产精品福利视频
|
一级特黄视频
|
亚洲黄色录像
|
国产精品国产三级国产aⅴ浪潮
|
一级片免费播放
|
国产欧美日韩一区二区三区
|
天天躁日日躁狠狠躁av麻豆男男
|
国产午夜精品久久久久久久
|
在线观看日韩视频
|
亚洲免费在线观看视频
|
国产精品福利一区
|
在线天堂视频
|