单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6582|回复: 39
收起左侧

51单片机激光雕刻机制作 含易语言上位机源码等资料

  [复制链接]
onyloveonlyu 发表于 2018-1-20 22:51 | 显示全部楼层 |阅读模式
刚刚注册的论坛,纯纯的萌新。
习惯性的浏览论坛版块中的精华帖子,看看到很多前辈大佬的作品。其中自己也做过一些差不多的项目,后悔当初没来论坛学习下,走过不少弯路啊。
刚刚浏览到本版块的时候看到
基于STM32的简易激光雕刻机这个帖子。就像顺路我也发一个吧
首先这个激光雕刻机是没有实物了的,这是我大一的时候参加校内竞赛做的。当然这种东西的水平是拿不到什么奖的啦。后来同学拿去玩把激光头给烧了就直接把他分尸了。
幸亏我有保存些资料的习惯,不然真的尸骨无存了。
忘记当初为什么要做这个东西了,可能是为了后来的CNC雕刻机做的初代版本练手,具体原因我记不清了。
一共貌似用了一周左右的时间,使用的是STC89C52RC单片机,也是当时我唯一会的啦。XY轴电机使用拆机光驱,光驱来自实验室古董台式机,当时还拆了软驱的很多人都没见过软驱了现在。
激光头是后来才邮过来的,12V 500mW应该,反正很小。前面几天测试使用的油笔芯画图的。
机架用的是文具店的A4板夹就是这个样子的

8

8

我们记得是买了好几个,用壁纸刀划开,用胶枪拼成的机架
由于当时单片机水平垃圾,所以下位机没有处理过多的程序。大部分的处理是通过上位机进行的。
上位机用的是易语言,话说这个也是第一次,当时找破jie就找了一天多。
还好是中文编程上手快。
上位机支持拖拽,可以转换灰度图。其他记不清了。
因为使用易语言写的因此很可能或者说肯定360等安全软件会报毒,但是放心吧各位,当初我那个水平是没有能力的。源码也会上传大家自己修改编译就好
当初也百度搜索下载了很多大神的文件上位机等,也一并上传了。
等下。。。我看看还有啥
啊哈哈 这个后来去参加过博创杯,但是呢~并没有完成参赛手续,学校的某些领导公务过于繁忙而忘记了给组委会交付一些文件
但是当初为博创杯准备的视频还有。不过上传视频还得等待审核,只好等等啦


刚刚去重温了下我佳哥的视频,浓郁的非主流风格哈哈哈
由于时间仓促,后来没有参加上比赛有些心灰意冷,这期间同学就给拆了。所以就没有了后续版本。运动轨迹优化啥的都没有做,现在是单纯一行行的打点。诸位谁有空可以接着做
开发手册
一、系统运行环境
       上位机软件支持x86x64构架的Windows操作系统(98以上)
       上位机软件属于小型软件不要求系统配置,windows运行环境即可运行。
       下位机自带220v变压电源,支持210~240v交流电源
二、系统配置
       将激光雕刻机通电、放置于水平稳定的平台上,环境要求通风。
       打开上位机软件,将激光雕刻机自带的USB线连接,点击上位机刷新按钮,软件会自动检测使用的串口。(串口通讯需要计算机安装CH340USB转串口驱动,具体方法自行寻找)
       选择打开的串口,点击打开按键。点击激光控制按键检测连接是否正常。
       将需要打印的材料放置于激光头下部,可以通过软件设置中控制按键微调激光头位置、激光轴移动速度等。
       选择文字模式或图片模式,也可以通过快捷键ctrl+M快速切换。
       图片模式支持BMP等大多数图片格式,用户可以通过常规文件打开方式或快捷拖动到编辑区来添加图片。
       文字模式下、用户可以在编辑区中编辑、排版需要打印的内容。
三、说明
       更多功能说明请查看上位机软件说明部分。
/*z地址定义
50 x+前进
51 x-
52 y+
53 y-
54/55 字宽
56 前进步
57 激光开关
58/59 激光强度
60 x轴速度
61 y轴速度
62 开始打印0,57
63 暂停
64 停止标志
65 bmp灰度图标志位
100开始时灰度图数据
*/

单片机下位机源程序如下:
  1. #include <reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. #define N z[60]           //X速度
  5. #define M z[61]           //Y速度
  6. //#define zil 54]*256+z[55]
  7. unsigned char code Z1[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; // 正转
  8. //unsigned char code F1[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //反转
  9. sbit jg=P2^0;
  10. sbit EN1=P2^7;
  11. sbit EN2=P2^6;
  12. sbit EN3=P2^5;
  13. sbit EN4=P2^4;
  14. sbit led=P2^1;//指示灯
  15. uchar xdata z[500]={0};//缓存
  16. uchar buff[3];//串口缓存
  17. uchar x1,x0,y1,y0,cont2=0;
  18. uchar xfb=4,yfb=4;//走步标志位
  19. uchar x,y,k,temp,t;//变量定义,有些没有用
  20. char i,j;
  21. uint h=0,jiguang;
  22. void delayms(uint xms)                                
  23. {   
  24.         uint i,j;
  25.         for(i=xms;i>0;i--)                      //i=xms即延时约xms毫秒
  26.                 for(j=110;j>0;j--);
  27. }


  28. /**********************************************************************
  29. *                                                                                                                                          *
  30. *              步进电机驱动                                  *
  31. *                                                                                                                                          *
  32. ***********************************************************************/

  33. /********x方向正转***********/
  34. void  motor_fxw(uint flag)                 
  35. {
  36.          while(1)
  37.          {
  38.     P0=Z1[i];
  39.                 delayms(N);
  40.                 flag--;
  41.           i++;
  42.           if(i>7)
  43.                         i=0;
  44.                 if(flag==0)
  45.                         break;
  46.          }
  47. }

  48. /********x方向逆转***********/
  49. void  motor_fxz(uint flag)                 
  50. {
  51.     while(1)
  52.          {
  53.     P0=Z1[i];
  54.                 delayms(N);
  55.                 flag--;
  56.           i--;
  57.           if(i<0)
  58.                         i=7;
  59.                 if(flag==0)
  60.                         break;
  61.          }
  62. }

  63. /********y方向正转***********/
  64. void  motor_fyw(uint flag)                 
  65. {
  66.     while(1)
  67.          {
  68.     P1=Z1[j];
  69.           delayms(M);
  70.                 flag--;
  71.           j++;
  72.           if(j>7)
  73.                         j=0;
  74.                 if(flag==0)
  75.                         break;
  76.          }
  77. }

  78. /********y方向逆转***********/
  79. void  motor_fyz(uint flag)                 
  80. {
  81.      while(1)
  82.          {
  83.     P1=Z1[j];
  84.                 delayms(M);
  85.                 flag--;
  86.           j--;
  87.           if(j<0)
  88.                         j=7;
  89.                 if(flag==0)
  90.                         break;
  91.          }
  92. }
  93. /*****************打点完毕激光移至原点****************************/
  94. void huanyuan(uint zix,uint ziy)
  95. {
  96.           while(1)
  97.                   motor_fxz(zix);
  98.           while(1)
  99.                   motor_fyz(ziy);        
  100. }


  101. void dazi(uint zik,uchar bu)//打印函数                  
  102. {
  103.    uint x;
  104.         uint s;
  105.                 jg=1;

  106.                         for(x=0;x<zik;x++)     //执行zik个循环,x轴右移zik步
  107.                         {
  108.                           while(z[63]);//暂停等待
  109.                                 if(z[64]==1) break;//停止标志 跳出循环
  110.                                 s=z[99+x]*(z[58]*256+z[59])/100;        
  111.                           jg=0;//开激光
  112.                                 delayms(s);
  113.                             jg=1;                //关闭激光
  114. //                 if(y%2==0)
  115.                       motor_fxw(1);                         //x轴前进一步
  116. //                        else
  117. //                                         motor_fxz(1);                         //x轴后退一步
  118.                         }
  119.                      if(z[64]==1)    z[64]=0; //停止标志 跳出循环
  120.                      else                        //y轴进一行
  121.                                  {
  122.                                         y++;
  123.                                  motor_fxz(zik);
  124.                            motor_fyw(1);               
  125.                                          }
  126. //                if(y==zil)
  127. //                {               
  128. //                        huanyuan(zik,ziy);
  129. //                }                        
  130. }


  131. /* 串口配置函数,baud-通信波特率 */
  132. void ConfigUART(unsigned int baud)
  133. {
  134.     SCON  = 0x50;  //配置串口为模式1
  135.     TMOD &= 0x0F;  //清零T1的控制位
  136.     TMOD |= 0x20;  //配置T1为模式2
  137.     TH1 = 256 - (11059200/12/32)/baud;  //计算T1重载值
  138.     TL1 = TH1;     //初值等于重载值
  139.     ET1 = 0;       //禁止T1中断
  140.     ES  = 1;       //使能串口中断
  141.     TR1 = 1;       //启动T1
  142. }


  143. void chuanlo() interrupt 4
  144. {
  145.   if(RI)
  146.   {
  147.    
  148.      buff[cont2]=SBUF;//每次3字节,地址高,地址低,数据,,
  149.            cont2++;
  150.      if(cont2==3)//每收3个字节,把数据写入地址中
  151.            {
  152.             z[(buff[0]*256)+buff[1]]=buff[2];
  153.                   cont2=0;
  154.            }
  155.          RI=0;
  156.   }
  157. }

  158. main()
  159. {  
  160.    EA=1;
  161.    P0=0xff;
  162.   ConfigUART(9600)        ;
  163.         z[60]=15;//默认的参数
  164.         z[61]=50;
  165.         z[56]=1;
  166.         z[62]=0;
  167.         jg=1;
  168.         cont2=0;
  169.           EN1=1;
  170.           EN2=1;
  171.           EN3=1;
  172.           EN4=1;
  173.           y=0;
  174.           i=0;
  175.           j=0;
  176.           t=1;
  177. //        z[54]=0;
  178. //        z[55]=44;
  179. //        z[60]=50;
  180. //        z[61]=50;

  181.    while(1)
  182.    {
  183.     if(z[57]==100){jg=0;}//上位机指令处理,开关激光               
  184.         if(z[57]==0) {jg=1;}
  185. ////         //if(z[57]==100){jg=~jg;z[57]=0;}
  186. ////          if(cont2!=0) led=1;  else led=0;//指示通信是否可用  
  187. ////         // if(cont2!=0) led=0;  else led=1;
  188.     if(z[50]>0){motor_fxw(t);z[50]=0;}   //x轴前进一步
  189.           if(z[51]>0){motor_fxz(t);z[51]=0;}
  190.           if(z[52]>0){motor_fyz(t);z[52]=0;}
  191.           if(z[53]>0){motor_fyw(t);z[53]=0;}


  192.      if(z[62])//开始打印标志
  193.           {
  194.             dazi(z[54]*256+z[55],z[56]);
  195.                 z[62]=0;//一行打印完成
  196.                 SBUF=1;//发送信息,表示打印完成
  197.           while(!TI);
  198.                 TI=0;
  199.           }
  200.    
  201.   }


  202. }
复制代码
0.png

所有资料51hei提供下载:
各版本上位机.zip (3.93 MB, 下载次数: 334)

评分

参与人数 6黑币 +131 收起 理由
zwk34 + 5 共享资料的黑币奖励!
zqy181818 + 7 共享资料的黑币奖励!
红尘过客 + 5 共享资料的黑币奖励!
qjzyx + 6 赞一个!
芦苇劫 + 8 赞一个!
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

 楼主| onyloveonlyu 发表于 2018-1-21 00:39 | 显示全部楼层
刚要睡觉就被通知审核通过了,赶快用手机查了一下。然后发现登陆的账号并没有帖子。好奇怪啊。赶快起来开电脑看一眼。我的天应该有两个账号了,名字差了一个字母。上次注册之后没有怎么登陆,账号密码记忆有点混淆了,今天逛论坛以为自己没有账号就注册了,然后一直没有发觉自己用户名打错了啊啊啊
真是不开心的一天。
楼上说要把全部相关资料共享的,之前百度云上传需要一些时间就直接发表。刚刚百度云上传好了。
链接:pan点baidu点com/s/1brffs67 (注意点替换一下.)密码:saht
网络上面下载的,看过但是没有验证过可靠性。既然是网络搜集的,相信原作者不会反对我发出来的。
好啦,郁闷ing睡觉取
回复

使用道具 举报

sam0528 发表于 2018-2-1 20:50 | 显示全部楼层
不错,谢谢分享!!!
回复

使用道具 举报

ftfsvtt3 发表于 2018-2-7 19:05 | 显示全部楼层
好好学习
回复

使用道具 举报

qjzyx 发表于 2018-2-7 22:49 | 显示全部楼层
谢谢分享
回复

使用道具 举报

lvlv99 发表于 2018-3-2 16:07 | 显示全部楼层
DIY乐趣,
回复

使用道具 举报

creator 发表于 2018-3-3 23:25 | 显示全部楼层
谢谢分享
回复

使用道具 举报

爱喝奶的小孩子 发表于 2018-3-8 21:17 | 显示全部楼层
这个是,,上位机把图形转换成G代码,然后传给下位机,下位机再解析G代码控制步进电机吗
回复

使用道具 举报

大角哥 发表于 2018-3-9 19:57 | 显示全部楼层
有原理图没有啊?
回复

使用道具 举报

pmsjzj 发表于 2018-3-30 15:53 | 显示全部楼层
共享资料的黑币奖励!
回复

使用道具 举报

vvv64 发表于 2018-4-4 14:20 | 显示全部楼层
,谢谢分享!!!
回复

使用道具 举报

l630034911 发表于 2018-5-4 11:08 | 显示全部楼层
很好很不错,楼主威武
回复

使用道具 举报

TSY666 发表于 2018-5-15 15:30 | 显示全部楼层
楼主无私,感谢!
回复

使用道具 举报

尘莫央 发表于 2018-5-16 14:40 | 显示全部楼层

楼主无私,感谢!
回复

使用道具 举报

zangchao 发表于 2018-5-25 22:00 | 显示全部楼层
学习学习,真好
回复

使用道具 举报

yaoyl2010 发表于 2018-5-28 22:13 | 显示全部楼层
谢谢楼主,试着和单片机连接了一下,通信正常,剩下就买备件了
回复

使用道具 举报

dragonman 发表于 2018-6-18 14:41 | 显示全部楼层
学习中,谢谢分享
回复

使用道具 举报

九头鸟 发表于 2018-7-14 17:09 来自手机 | 显示全部楼层
谢谢楼主的分享
回复

使用道具 举报

hefeng898961 发表于 2018-8-2 16:05 | 显示全部楼层
感谢分享
回复

使用道具 举报

qxdqx 发表于 2018-8-25 07:42 | 显示全部楼层
太好啦!谢谢!
回复

使用道具 举报

mohoxo 发表于 2018-8-25 11:36 | 显示全部楼层
你好。我想请教一下,有没办法用Arduino开发出二氧化碳激光管的雕刻机,
回复

使用道具 举报

a1377361899 发表于 2018-9-8 23:46 | 显示全部楼层
很好的i东西哦 收下了 谢了
回复

使用道具 举报

rs7cai 发表于 2018-9-9 09:28 | 显示全部楼层
谢谢楼主的分享
回复

使用道具 举报

szzxl10 发表于 2018-9-11 13:58 | 显示全部楼层
谢谢分享!!!
回复

使用道具 举报

gonglizhiming 发表于 2018-9-24 09:23 | 显示全部楼层
谢谢分享
回复

使用道具 举报

lbewan 发表于 2018-10-3 17:06 | 显示全部楼层
109行的bu参数是干什么的?
回复

使用道具 举报

Drise 发表于 2018-10-4 20:34 | 显示全部楼层
谢谢分享
回复

使用道具 举报

govox 发表于 2018-11-11 16:17 | 显示全部楼层
是不是还要有电路图呀
回复

使用道具 举报

aking991 发表于 2018-11-14 13:29 | 显示全部楼层
谢谢分享,学习一下
回复

使用道具 举报

wan0215 发表于 2018-11-15 08:36 | 显示全部楼层
学习下
回复

使用道具 举报

名叫兔子的喵 发表于 2018-11-15 11:14 | 显示全部楼层
找资料 慢慢学
回复

使用道具 举报

调皮猫 发表于 2018-11-28 14:28 | 显示全部楼层
很想自己做个玩玩,先学习一下。
回复

使用道具 举报

dmmcu 发表于 2018-12-2 10:53 | 显示全部楼层

不错,谢谢分享!!!
回复

使用道具 举报

zxcvbnm12345 发表于 2018-12-21 21:34 | 显示全部楼层
感谢分享
回复

使用道具 举报

boyihu 发表于 2019-1-22 19:53 | 显示全部楼层
请问楼主,我想用易语言编写个马林3d打印机的上位机,发什么代码过去马林固件都重启,不知道应该用什么格式的数据发送.郁闷中.
回复

使用道具 举报

supper战 发表于 2019-2-9 22:47 来自手机 | 显示全部楼层
厉害厉害,很不错
回复

使用道具 举报

df812244658 发表于 2019-2-22 16:36 | 显示全部楼层
刚来不知道怎么下载
回复

使用道具 举报

zwk34 发表于 2019-4-1 22:21 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

laoying45 发表于 2019-4-2 22:29 | 显示全部楼层

谢谢分享。
回复

使用道具 举报

zhao9988 发表于 2019-4-10 08:14 | 显示全部楼层
请问楼主,上位机用的什么软件呀?谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51hei电子论坛2群 联系QQ:125739409;技术交流QQ群219535678

Powered by 单片机教程网

快速回复 返回顶部 返回列表