基于51单片机的光驱激光雕刻机源程序电路图+上位机

发布者:闪耀星空最新更新时间:2020-02-14 来源: 51hei关键字:51单片机  光驱激光雕刻机  上位机 手机看文章 扫描二维码
随时随地手机看文章

根据他人DIY 激光雕刻机  手绘原理图 画得不好勿怪,实验操中
电路原理图如下:
 

单片机源程序如下:

/*z地址定义

50 1=x+,2=x-,3=y+,4=y-

51 前进后退步数高

52 前进后退步数低

53 

54/55 字宽 

56 

57 弱光开关

58/59 激光强度

60 x轴速度

61 y轴速度

62 开始打印0,57

63 暂停

64 停止标志

65

66  左右标记 

100开始时灰度图数据

*/


#include

#define uint unsigned int 

#define uchar unsigned char 

#define N z[60]           //X速度

#define M z[61]           //Y速度

sbit a=P1^3;//步进电机接线定义  移动激光头

sbit a_=P1^2;

sbit b=P1^1;

sbit b_=P1^0;

sbit xa=P1^4;

sbit xa_=P1^5;

sbit xb=P1^6;

sbit xb_=P1^7;

/*sbit a=P1^4;//步进电机接线定义 移动底板

sbit a_=P1^5;

sbit b=P1^6;

sbit b_=P1^7;

sbit xa=P1^3;

sbit xa_=P1^2;

sbit xb=P1^1;

sbit xb_=P1^0;  */

sbit jg=P2^0;

sbit led=P2^1;//指示灯

uchar xdata z[500]={0};//缓存

uchar buff[3];//串口缓存

uchar x1,x0,y1,y0,cont2=0;

uchar xfb=4,yfb=4;//走步标志位



unsigned char HighRH = 0;  //高电平重载值的高字节

unsigned char HighRL = 0;  //高电平重载值的低字节

unsigned char LowRH  = 0;  //低电平重载值的高字节

unsigned char LowRL  = 0;  //低电平重载值的低字节




void delayms(uint xms)                                

{   

        uint i,j;

        for(i=xms;i>0;i--)                      //i=xms即延时约xms毫秒

                for(j=110;j>0;j--);

}


/* 配置并启动PWM,fr-频率,dc-占空比 */

void ConfigPWM(unsigned int fr, unsigned char dc)

{

    unsigned int  high, low;

    unsigned long tmp;

    

    tmp  = (11059200/12) / fr;  //计算一个周期所需的计数值

    high = (tmp*dc) / 100;      //计算高电平所需的计数值

    low  = tmp - high;          //计算低电平所需的计数值

    high = 65536 - high + 12;   //计算高电平的重载值并补偿中断延时

    low  = 65536 - low  + 12;   //计算低电平的重载值并补偿中断延时

    HighRH = (unsigned char)(high>>8); //高电平重载值拆分为高低字节

    HighRL = (unsigned char)high;

    LowRH  = (unsigned char)(low>>8);  //低电平重载值拆分为高低字节

    LowRL  = (unsigned char)low;

    TMOD &= 0xF0;   //清零T0的控制位

    TMOD |= 0x01;   //配置T0为模式1

    TH0 = HighRH;   //加载T0重载值

    TL0 = HighRL;

    ET0 = 1;        //使能T0中断

    TR0 = 1;        //启动T0

    jg = 1;     //输出低电平,关闭激光

}

/* 关闭PWM */

void ClosePWM()

{

    TR0 = 0;     //停止定时器0

    ET0 = 0;     //禁止定时器0中断

    jg = 1;  //输出低电平,关闭激光

}

/* T0中断服务函数,产生PWM输出 */

void InterruptTimer0() interrupt 1

{

    if (jg == 1)  //当前输出为低电平时,装载高电平值并输出高电平

    {

        TH0 = LowRH;

        TL0 = LowRL;

        jg = 0;

    }

    else              //当前输出为高电平时,装载低电平值并输出低电平

    {

        TH0 = HighRH;

        TL0 = HighRL;

        jg = 1;

    }

}




void xfor(uint i)                //x轴前进函数,前进多少步

{   

  while(1) 

  {

                if(xfb==4)

                  {

         xa=xb=1;

               xb_=xa_=0;

                     xfb=1;

                     i--;                        

               delayms(N);

                     if(i==0){xa=xb=0; break;}

                  }

                   if(xfb==1)

                  {

         xb=xa_=1;

               xa=xb_=0;

                     xfb=2;

                     i--;        

               delayms(N);

                     if(i==0){xa_=xb=0; break;}

                  }

                   if(xfb==2)

                  {

         xa_=xb_=1;

         xb=xa=0;

                     xfb=3;        //走步标志位

                     i--;

               delayms(N);

                     if(i==0){xa_=xb_=0; break;}

                   }

                   if(xfb==3)

                  {

         xa_=xb=0;

               xb_=xa=1;

                     xfb=4;

                     i--;        

               delayms(N);

                     if(i==0){xa=xb_=0; break;}

                  }



                }


}



void xbac(uint i)                //xxx后退函数

{   

     while(1) 

         {

                if(xfb==1)

                  {

         xa_=xb=0;

               xb_=xa=1;

                     xfb=4;

                     i--;                                //走步标志位

               delayms(N);

                     if(i==0){xa=xb_=0; break;}

                   }

                   if(xfb==4)

                  {

         xa_=xb_=1;

         xb=xa=0;

                     xfb=3;

                     i--;        

               delayms(N);

                     if(i==0){xa_=xb_=0; break;}

                   }

                   if(xfb==3)

                  {

         xb=xa_=1;

               xa=xb_=0;

                     xfb=2;        //走步标志位

                     i--;        

               delayms(N);

                     if(i==0){xa_=xb=0; break;}

                   }

                   if(xfb==2)

                  {

         xa=xb=1;

               xb_=xa_=0;

                     xfb=1;

                     i--;        

               delayms(N);

                     if(i==0){xa=xb=0; break;}

                  }

                }

}




void yfor(uint i)                //y轴前进函数

{   

     while(1) 

     {

               switch(yfb)

                   {

                       case 4:{a=b=1; b_=a_=0; yfb=1; i--; delayms(M); if(i==0){a=b=0;break;}}

                                 case 1:{b=a_=1; a=b_=0; yfb=2; i--; delayms(M); if(i==0){a_=b=0;break;}}

                                 case 2:{a_=b_=1; b=a=0; yfb=3; i--; delayms(M); if(i==0){a_=b_=0;break;}}

[1] [2]
关键字:51单片机  光驱激光雕刻机  上位机 引用地址:基于51单片机的光驱激光雕刻机源程序电路图+上位机

上一篇:基于单片机+ADC0809的数字电流表仿真+源程序+设计报告
下一篇:单片机+PT100+SHT11的温湿度检测系统仿真与程序源码

推荐阅读最新更新时间:2024-11-09 19:38

51单片机-程序点灯
1.头文件 在 #include reg52.h 头文件中,把单片机中的寄存器地址封装起来定义成宏供我们调用,寄存器这个概念我们初学先不用太深刻的去理解它,在《手把手教你学51单片机》文档中2.4.1节有讲解,大家熟读几遍,如果还是无法理解后面我们再用程序配合硬件来领悟它们的作用。 2.单片机端口 首先我们知道STC89C52RC这个芯片有4*8=32个IO端口是可以被我们用程序控制输出高电平或低电平的。拿P0表示它可以一次性控制8个引脚端口输出每个引脚想输出的电平状态,P0是一个寄存器,它的功能是控制所对应的8个单片机IO端口(P0.0~P0.7)输出我们想要输出的电平,比如我们控制P0.0单个IO端口输出低电平,P0.1~
[单片机]
<font color='red'>51单片机</font>-程序点灯
基于51单片机的温湿度控制系统
一.硬件方案 本设计采用51单片机每2秒钟从DHT11温湿度传感器中读入温度和湿度,在液晶屏上即时显示。液晶屏上同时显示温湿度上限值,该上限值保存外外部EEPROM存储器中,掉电不失,并且可以通过四只按键上调或下调。当温度或湿度值超过上限值时,报警信号点亮相应报警灯。该报警信号可以通过三极管驱动继电器,以控制外部风机或加热器。 主要由51单片机+最小系统+LCD1602液晶显示模块+温湿度采集模块+继电器驱动模块+风扇模块+LED指示灯模块+按键模块+AT24C02存储模块+蜂鸣器报警模块;如图: 二.设计功能 (1)AT24c02芯片掉电存储设置的上下限。 (2)四个按键为设置、加、减、确定,实现了阀值的调节。 (3)L
[单片机]
基于<font color='red'>51单片机</font>的温湿度控制系统
自制51单片机常用头文件(st7920并行方式)
/*-------------------------------------------------------------------------- ST7920.H The user function is C51. Copyright (c) 1988-2004 Keil Elektronik GmbH sum zhaojun All rights reserved. --------------------------------------------------------------------------*/ // 并行方式 #ifndef __ST7920_H__ #define __ST7920_H__ #
[单片机]
51单片机简易波形发生器(正弦波 锯齿波 三角波)
下面是51单片机简易波形发生器源程序: #include AT89X52.h #include math.h #define ADDR1 0x2c //MAX5820LEUA sbit key_sin=P1^0; sbit key_tran=P1^2; sbit key_tooth=P1^4; sbit SCL = P2 ^ 0; sbit SDA = P2 ^ 1; unsigned char code sin = //正弦表 { 0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
[单片机]
<font color='red'>51单片机</font>简易波形发生器(正弦波 锯齿波 三角波)
C51单片机学习笔记之LED
简介 LED就是一个发光二极管,没啥好说的。唯一 一点就是低电平有效! 原理图 代码部分 #include REGX52.H void delay() { unsigned int i; for(i=0;i 30000;i++); } main() { unsigned int i; unsigned char J; while(1) { /*P0=0xFE; delay(); P0=0xFD; delay(); P0=0xFB; delay(); P0=0xF7; delay(); P0=0xEF; delay(); P0=0x
[单片机]
C<font color='red'>51单片机</font>学习笔记之LED
51单片机C语言程序100例分析(2)定时器+中断
#include reg51.h //包含 51 单片机寄存器定义的头文件 void main(void) { TMOD=0x01;// 使用定时器 T0 的模式 1 TH0=(65536-46083)/256; // 定时器 T0的高 8 位赋初值 TL0=(65536-46083)%256; // 定时器 T0的低 8 位赋初值 TR0=1; // 启动定时器 T0 TF0=0; //清定时器溢出标志位 P2=0xff; while(1)// 无限循环等待查询 { while(TF0==0); TF0=0; P2=~P2;//按位取反 TH0=(65536-46083)/256; /
[单片机]
基于AT89C51单片机的无级调光系统的实现
在生活中有很多可以自主调节挡位的设备,比如台灯的亮度、玩具车的速度、风扇的转速等等。它们调节档位的方式各有不同,有些是改变功率,有些是改变动力,但都离不开对激励或输入信号的改变,我们这里简单介绍一下对LED灯的无级调光的实现,可以自己动手做一个可变亮度的小灯。 一、所需器材: AT89C51×1、100Ω定值电阻×1、LED×1、示波器×1、滑动变阻器×1、直流电压表×1、ADC0808×1、500kHz时钟信号×1、+5V直流电源×2。 主要器材介绍:(我们这里只做简单介绍,各接口定义可自行查阅资料——反正这里也用不着) (1)AT89C51:AT89C51是一种带4K字节FLASH存储器(FPEROM—Flas
[单片机]
基于AT89C<font color='red'>51单片机</font>的无级调光系统的实现
利用51单片机制作廉价盒仔机器人
一、盒仔机器人   BOXZ,昵称盒仔,是一款开源的互动娱乐平台!百度一下,有很多盒仔的制作教程,基本都是用arduino制作完成的。假期没事,带着宝宝们用51制作了一个廉价的BOXZ。先上张图: 从图上不难看出,为了宝宝们易于接受,我把盒仔的手机摇控改成了用线控的方法,做了一个简易的摇控器。 二、材料准备 名称 型号及参数 数量 备注 5V稳压模块 LM7805 1 充电电池 12V 1 电容 22pf 2 按钮 4 自锁按钮 1 51单片机 stc12c2052ad 1 晶振 11.0592Mhz 1 电机驱动 L298N模块 1 降压模块 可调,
[单片机]
利用<font color='red'>51单片机</font>制作廉价盒仔机器人
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved