今天在网上冲浪,看到了一个有趣的项目:51单片机-激光雕刻机。
项目效果:
STC51激光雕刻机
项目资料内容:
作者用的51单片机,看起来效果不错。有兴趣的,自己到博主页面下载,链接在文章底部。
因为原博主开源了,所以我在这里做个分享:
代码
/*********************************************************************************
* 【版 本】: 1.0
* 【实验平台】: QX-MCS51 单片机开发板
* 【外部晶振】: 11.0592mhz
* 【主控芯片】: STC89C52RC
* 【编译环境】: Keil μVisio4
* 【程序功能】: 通过串口接收电脑指令并控制相关执行机构完成激光雕刻过程
* 【使用说明】: 比特率9600,校验位:无 停止位:1
**********************************************************************************/
/*【指令说明】/'A'雕刻指令'B'x正转指令'C'x反转指令'D'y正转指令'E'复位指令
**********************************************************************************/
/*预处理命令*/
#include <reg52.h> //包含单片机寄存器的头文件
#define uchar unsigned char
#define uint unsigned int
uchar num,a;
int xfwjs,yfwjs; //复位步数计数
int js2,js3; //复位计数
sbit xmz1=P2^0; //X轴脉冲引脚1
sbit xmz2=P2^1; //X轴脉冲引脚2
sbit ymz1=P2^2; //Y轴脉冲引脚1
sbit ymz2=P2^3; //Y轴脉冲引脚2
sbit dykg=P2^7; //激光开关引脚
uint xjs=0; //
//
uint yjs=0; //
//
void ms(uint ms)//延时函数
{
uint i,j;
for(i=ms;i>0;i--)
for(j=115;j>0;j--);
}
/*
********************************************************************************
** 函数名称 : main(void)
** 函数功能 : 主函数
********************************************************************************
*/
void xf()//X正转函数
{
switch(xjs)
{
case 0:xjs=1;xmz1=1;xmz2=1; break;
case 1:xjs=2;xmz1=1;xmz2=0; break;
case 2:xjs=3;xmz1=0;xmz2=0; break;
case 3:xjs=0;xmz1=0;xmz2=1; break;
default:break;
}
ms(2);
}
void xz()//X反转函数
{
switch(xjs)
{
case 2:xjs=1;xmz1=1;xmz2=1; break;
case 3:xjs=2;xmz1=1;xmz2=0; break;
case 0:xjs=3;xmz1=0;xmz2=0; break;
case 1:xjs=0;xmz1=0;xmz2=1; break;
default:break;
}
ms(2);
}
void yf()//y正转函数
{
switch(yjs)
{
case 0:yjs=1;ymz1=1;ymz2=1; break;
case 1:yjs=2;ymz1=1;ymz2=0; break;
case 2:yjs=3;ymz1=0;ymz2=0; break;
case 3:yjs=0;ymz1=0;ymz2=1; break;
default:break;
}
ms(2);
}
void yz()//y反转函数
{
switch(yjs)
{
case 2:yjs=1;ymz1=1;ymz2=1; break;
case 3:yjs=2;ymz1=1;ymz2=0; break;
case 0:yjs=3;ymz1=0;ymz2=0; break;
case 1:yjs=0;ymz1=0;ymz2=1; break;
default:break;
}
ms(2);
}
void dk()//雕刻函数
{
dykg=0; //打开打印头
ms(25); //灼烧时间
dykg=1; //关闭打印头
}
void fw() //复位函数
{
for(js2=0;js2<xfwjs;js2++)
{
xf();
}
for(js3=0;js3<yfwjs;js3++)
{
yf();
}
xfwjs=0;
yfwjs=0;
}
void main()
{
TMOD=0x20; //用定时器设置串口波特率 9600
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1; //串口初始化
SM0=0;
SM1=1;
EA=1; //开启总中断
ES=1;
xfwjs=0;
yfwjs=0;
while(1)
{
if(num==1) //判断是否有串口数据的传送
{
ES=0;
num=0;
if(a!='E')
{
SBUF=a; //返回单片机收到的指令到计算机
while(!TI);
TI=0;
}
ES=1;
}
}
}
void ser() interrupt 4
{
RI=0;
a=SBUF; //接收数据SBUF,即将计算机的数据接收。
switch(a) //判断串口接收的数据
{
case 'A':dk();break; //雕刻指令
case 'D':yz();yfwjs++;break; //y正转一步
case 'B':xz();xfwjs++;break; //X正转一步
case 'C':xf();xfwjs--;break; //X反转一步
case 'E':fw();break; //激光回到原点
case 'F':dk();xz();xfwjs++;break; //雕刻,X正转一步
case 'G':dk();xf();xfwjs--;break; //雕刻,X反转一步
default :break;
}
num=1;
}
资料获取
转载自:
http://www.51hei.com/bbs/dpj-194873-1.html
评论(0)
您还未登录,请登录后发表或查看评论