历史上的今天
返回首页

历史上的今天

今天是:2024年11月15日(星期五)

正在发生

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

2019-11-15 来源: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;}}

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

推荐阅读

史海拾趣

屹晶微(EG)公司的发展小趣事

屹晶微的创始人黄米龙,原本在发电厂从事电气运营工作长达八年。这段经历让他对电子领域有了深入的了解和浓厚的兴趣。然而,他并没有满足于现状,而是看到了中国芯片产业的巨大潜力和发展空间。于是,在2007年,他毅然决定从发电厂辞职,利用自己的积蓄和借来的资金,在台州创立了屹晶微电子有限公司。

在创立初期,屹晶微面临着资金短缺、技术落后和市场竞争激烈的困境。但黄米龙凭借对电子行业的深刻理解和坚定的信念,带领团队克服了种种困难。他们不断引进先进技术和设备,加强研发力量,提升产品质量。经过几年的努力,屹晶微逐渐在芯片设计领域崭露头角,并成功推出了多款具有自主知识产权的芯片产品。

Amecon Magnetics公司的发展小趣事

在竞争激烈的电子行业中,品质是企业生存和发展的关键。Amecon Magnetics公司始终将品质管理放在首位,建立了严格的质量管理体系,确保从原材料采购到产品出厂的每一个环节都符合高标准的质量要求。这种对品质的执着追求使得公司的产品赢得了客户的广泛好评和信赖,为公司树立了良好的品牌形象。

Hendon Semiconductors公司的发展小趣事

Hendon Semiconductors在能源管理和照明控制领域也有着显著的成就。公司开发了一系列高效、可靠的能源管理解决方案和照明控制产品,广泛应用于智能家居、商业建筑和工业自动化等领域。这些解决方案不仅帮助客户降低了能耗和运营成本,还提高了能源使用效率和环境可持续性。通过不断创新和优化产品设计,Hendon Semiconductors在能源管理和照明控制市场上赢得了广泛的认可。

Appointech Inc公司的发展小趣事

为了进一步扩大市场份额,Appointech Inc公司开始积极拓展海外市场。通过与国际知名企业的合作,公司成功打入国际市场,产品销量大幅提升。同时,公司还积极参加国际电子展会和交流活动,与全球同行建立了广泛的合作关系,为公司的长远发展奠定了坚实的基础。

国兴(GOODSKY)公司的发展小趣事

随着技术的不断进步,Appointech Inc公司意识到只有不断创新才能在竞争激烈的市场中立足。因此,公司加大了对研发的投入,不断引进新的技术和设备。经过团队的不懈努力,公司成功开发出了一款具有颠覆性的电子产品,该产品不仅性能卓越,而且具有高度的集成性和便利性,为公司在行业中树立了新的标杆。

Astro Tool Corp公司的发展小趣事

随着企业规模的不断扩大和影响力的提升,Astro Tool Corp公司逐渐认识到企业社会责任的重要性。公司积极参与社会公益事业,为当地社区和弱势群体提供帮助和支持。同时,公司还注重环境保护和可持续发展,通过引进环保技术和设备,降低生产过程中的能耗和排放,实现绿色生产。这些举措不仅提升了公司的社会形象,也为公司的长远发展奠定了坚实基础。


请注意,这些故事是虚构的,旨在展示一个电子行业企业可能经历的一些典型发展阶段和策略,并不代表任何真实公司的具体情况。如果需要更贴近真实情况的故事,建议进一步调研和了解Astro Tool Corp公司的实际发展历程。

问答坊 | AI 解惑

15W三路输出DC/DC模块电源设计

摘要   本文介绍了一种UC3843控制的小功率多路DC/DC模块电源的详细设计过程,重点讨论了多路输出模块电源设计与单路输出的不同,详细介绍了DC/DC模块电源中常用的新型芯片UC3843的外围电路参数的设计,给出了多路输出模块电源中变压器和耦合电感 ...…

查看全部问答>

B题讨论

本帖最后由 paulhyde 于 2014-9-15 09:00 编辑 有对B题感兴趣的吗?进来一下,大家一起讨论一下  …

查看全部问答>

Freescale 2009 seminar之五New Product Update Update i.MX for Consumer and Ge

New Product Update: i.MXARM9 for Consumer and General Embedded Market ►i.MXApplications Processor Overview •Target markets, product portfolio •ARM®9 portfolio comparison •Platform support ► ...…

查看全部问答>

我用LPC932编的串口发送程序为什么不能发送,请高手指教

#include #define uchar unsigned char uchar key_in = 0x55; void main() { //P1口设置为准I/O口模式 P1M1 = 0x00; P1M2 = 0x00; SCON = 0x50; PCON = 0x00; SSTAT=0x00; BRGCON=0x00; BRGR0 = 0x90; BRGR1 = 0x01; BRGCON=0x0 ...…

查看全部问答>

2440 usb 接线

2440的开发板! 请问usb共5线,怎么接踩可以使其正常工作! USB带有供电功能! ------------ 现在是在板子上点USB CONNECT 显示已连接,而且在PC端,ActiveSync的图片也在闪, 但过一会就显示无法连接! …

查看全部问答>

DM9000网卡ID被检测为0x46464646如何解决?

本人在移植DM9000驱动中遇到一个棘手的问题,搞了两天仍未解决,望大家帮帮忙! 1.DM9000的CMD与ARM2440的A2地址线相连,AEN连接nGCS4,其偏移地址是0x20000300; 2.DM9000的ID为0x90000A46,但却始终检测不了,却读出为0x46464646,而0x46正是DM ...…

查看全部问答>

关于驱动编译(C语言)出现的问题

…… #include #include \"gpio.h\" #define PRIVATE                        static #define PUBLIC /* GPIO 寄存器对应的虚拟地址 */ PRIVATE volatile S3C6410_IOPORT_ ...…

查看全部问答>

上百个电路实用图集锦(刚才不知为何没传上,抱歉)

本帖最后由 paulhyde 于 2014-9-15 08:56 编辑 好东东  …

查看全部问答>

STM32ADC多通道转换的值和分别单通道转换的值不相等

多通道转换时的值比单通道转换时的值要小0.2V左右,并且通道越多,值越小,4通道转换时比单通道将近小一半? 什么原因啊, 我用的DMA方式缓存建立了一个 ADCConvertedValue[10][4];,DMA深度为10, 在DMA中断里 void DMA1_Channel1_IRQHandler(vo ...…

查看全部问答>

CCS3.3编译错误

>> C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\010763, line 30:   error:                illegal input character: hex ffffffed>> C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\ ...…

查看全部问答>