历史上的今天
返回首页

历史上的今天

今天是:2025年02月14日(星期五)

正在发生

2020年02月14日 | 基于51单片机的光驱激光雕刻机源程序电路图+上位机

2020-02-14 来源:51hei

根据他人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;}}

推荐阅读

史海拾趣

Aborn Electronics Inc公司的发展小趣事

随着产品线的不断丰富和技术实力的不断提升,Aborn Electronics开始积极寻求市场拓展。公司先后在国内外多个地区设立了销售网点和分支机构,并通过参加各类行业展会和论坛,加强与其他企业的交流与合作。同时,Aborn Electronics注重品牌建设,通过提升产品质量和服务水平,逐渐树立起了良好的企业形象和口碑。

Anadigm公司的发展小趣事

随着电子行业的快速发展,Aborn Electronics意识到只有不断创新才能在竞争中保持领先。公司加大了对研发的投入,引进了一批高素质的研发人才,并在多个技术领域取得了重要突破。其中,一项关于高效能电源管理技术的创新成果,不仅提高了产品的能效比,还为公司带来了可观的经济效益。这一技术的成功应用,进一步提升了Aborn Electronics在行业内的影响力。

富芯森美(FUXINSEMI)公司的发展小趣事

为了确保产品质量,富芯森美在成立初期便启动了严格的质量管理体系建设。公司通过了ISO、IATF 16949等国际质量管理体系认证,并严格按照标准执行。同时,公司产品还通过了UL、ROHS、REACH、HF等多项国际测试,确保了产品的安全性和可靠性。这一系列的举措不仅提升了富芯森美的市场竞争力,也赢得了客户的广泛信赖。

远东福斯特公司的发展小趣事

为了进一步提升公司的竞争力和市场地位,富芯森美积极寻求资本市场的支持。通过上市融资等方式,公司获得了充足的资金支持,为技术研发、市场拓展和产能扩张提供了有力保障。同时,资本市场的关注也进一步提升了富芯森美的品牌价值和市场影响力。在资本市场的助力下,富芯森美实现了快速发展,成为了电子行业中一颗璀璨的明星。

Alpha Industries公司的发展小趣事

随着电子技术的飞速发展,军事装备也在不断升级。Alpha Industries敏锐地捕捉到了这一趋势,开始将电子技术应用于其军事服装设计中。例如,公司研发了一款带有GPS定位功能的飞行夹克,帮助飞行员在复杂环境中快速定位。此外,Alpha Industries还利用电子传感器技术,开发出能够监测士兵体温和心率的战地风衣,为军队提供更为全面的保障。

Altitude Technology公司的发展小趣事

在电子行业中,合作与共赢是企业发展的重要途径。Altitude Technology深知这一点,因此积极寻求与其他企业的合作机会。通过与一家知名芯片制造商建立战略合作关系,Altitude Technology获得了更先进的芯片供应和技术支持,进一步提升了产品的竞争力。同时,公司还与其他企业开展了一系列合作项目,共同推动电子行业的发展。

问答坊 | AI 解惑

S3C6410 Google Android 进阶

转自:www.embed-training.com/ 触摸屏篇: Samsung-2.6.28 Patch: S3C6410 Android 触摸屏校准可以在应用层用tslib来触准,生成校准文件,也可以将校准数据直接写到内核触摸屏驱动里面。 下面我将XXXX6410 2.6.28的android的触摸屏patch ...…

查看全部问答>

WINCE平台能嵌入到PDA当中吗?(我是小白)

最近想做个项目参加比赛,想利用PDA嵌入一个软件,实现信息的交换,可是现在一头雾水不知道从什么地方开始,另外还想问下各位大虾,PDA能实现局域网无线通讯吗?…

查看全部问答>

招聘嵌入式开发工程师(Linux)

岗位描述: 1、嵌入式软件设计与开发。 2、根据项目需要进行软件技术支持。 3、嵌入式项目软件开发过程控制 任职要求: 1、熟悉linux开发环境,熟悉C/C++语言 2、具有 Linux、WinCE、VxWorks、ucos或其他至少一种嵌入式操作系统的开发、调 ...…

查看全部问答>

直接存取I/O埠與記憶體(Direct access I/O and Memory)

網路上有一個工具程式名為WINIO,透過它我們可以輕易的存取記憶體與I/O埠,但是它使用了一些已經過時或未公開的函數,因為不知微軟何時會將這些函數移除,所以使用這些函數會有一定的危險性,雖然到目前32位元的Windows 7版本中還可使用。 在此, ...…

查看全部问答>

Linux ACPI GPE error

想在内核模块中软件触发一个ACPI SCI。但是显示 ACPI Error.. No hander for GPE....。 不知道是不是端口弄错了。但是我查看了系统的端口映射表。和Intel ICH8手册上第一的有些不同。特别是GPE0_BLK。 我用的内核是2.6.18。 哪个兄弟对这个比较 ...…

查看全部问答>

查看硬件工具

用AIDA32 查看的硬件配置总是不对不知道还有更好的查看工具吗…

查看全部问答>

DLP大屏幕现场勘察需注意什么

电源为AC220V±5%;用有保护接地线的三眼插座,插座数与投影屏数有关,一般控制器一个,三个投影屏用一路插座;     投影系统和大屏控制器及控制PC等要求同相供电;     电源电压要稳定,可靠,特别防止断电后立即加电。因此 ...…

查看全部问答>

【求助】430用c编译器程序固定程序位置的问题!

各位DX:小弟在用430f149做用户终端,要实现远程升级的功能。这势必要固定某些程序的位置,试问430的IAR c编译器有没有这个功能。怎么去实现,请DX赐教!…

查看全部问答>

【手持信号发生器】进度汇报

1. 目前,已经完成所有器件资料阅读,并初步理解。 2. 收到EEWORLD提供主要器件。 3. FPGA平台已经到位,利用联华众科的EP1C06的NIOSII平台。 4. 三相信号发生器接口板的DDB原理图设计完成 下面是DDB原理图,本原理图设计有许多0欧姆电阻 ...…

查看全部问答>