本科毕设激光雕刻机

这篇文章主要介绍一下我的本科毕设(校级优秀)

激光雕刻机

时间比较久之前了2016年毕业。实现的功能是使用手机蓝牙串口工具发送G代码给单片机连接的HC09蓝牙模块,单片机进行插补最终实现控制两个步进电机实现激光雕刻。

视频:https://www.bilibili.com/video/av60409899/

 

1、系统原理图

2、实物图

当时实验条件简陋,老师只给了一张桌子。手机端发送的为G代码我当时是机床方向的。我又根据插补原理实现了椭圆插补等各种参数化线的插补功能。最后得了个校级优秀拿了1000块美滋滋。

下面是我的代码,其中我觉得最难的可能是串口和单片机通信,以及整个算法理论分析,涉及的知识都是大学学过的或者自学的东西,感觉意义还是很大的。

#include <REG52.h>
#include <FLOAT.h>
#define uchar unsigned char
#define uint unsigned int
char xdata m[17]={0};
int xdata H[17]={0};
int i=0;
int xdata t=0,n,w;
uchar xdata dat,num; 
unsigned zd0,zd1;
float xdata zxx1,zxx2,zxx3,zxx4,zxx5;
sbit error=P1^7;
sbit mai0=P1^0;
sbit k0=P1^2;
sbit mai1=P1^1;
sbit dir0=P1^3;
sbit dir1=P1^4;
sbit fun=P1^6;
sbit laser=P1^5;
sbit INTERRUPT0=P3^2;
sbit INTERRUPT1=P3^3;
void zf()
{	
	TMOD=0x20;		   //用定时器设置串口波特率
	TH1=0xfd;
	TL1=0xfd;
	TR1=1;
	REN=1;          //串口初始化
	SM0=0;
	SM1=1;
	}
void delay(unsigned int t){
         unsigned int g;
                      while(t!=0){
                       for(g=0;g<60;g++);
           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);
            mai0=1;	
			m0--;
            delay(n0);
                 }mai0=1;dir0=1;
        }		
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);
            mai1=1;
			m1--;
            delay(n1);
                 } mai1=1;dir1=1;
        }

void line(float mmx0,float mmy0,float mmx1,float mmy1,unsigned int v0)
{
     signed long x0=mmx0/0.075;
	 signed long y0=mmy0/0.075;
	 signed long x1=mmx1/0.075;
	 signed long y1=mmy1/0.075;
     float k=0;
     float y=0;
	 signed long ye=0;
	 signed long fi=0;
	  signed long sum=0;
	 signed long xe=0;
	  signed long yi=0;
	 signed long xi=0;
     xi=x0;
     yi=y0;
	  ye=y1-y0;
	 xe=x1-x0;
     k=(y1-y0)/(x1-x0);
     if(x0==x1){
                mc_p1((y1-y0)*2,500/v0);}
     if(y0==y1){
                mc_p0((x1-x0)*2,500/v0);}
     if((x0!=x1)&&(y0!=y1)){
       if(x0
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值