历史上的今天
今天是: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;}}
史海拾趣
|
摘要 本文介绍了一种UC3843控制的小功率多路DC/DC模块电源的详细设计过程,重点讨论了多路输出模块电源设计与单路输出的不同,详细介绍了DC/DC模块电源中常用的新型芯片UC3843的外围电路参数的设计,给出了多路输出模块电源中变压器和耦合电感 ...… 查看全部问答> |
|
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 ► ...… 查看全部问答> |
|
#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共5线,怎么接踩可以使其正常工作! USB带有供电功能! ------------ 现在是在板子上点USB CONNECT 显示已连接,而且在PC端,ActiveSync的图片也在闪, 但过一会就显示无法连接! … 查看全部问答> |
|
本人在移植DM9000驱动中遇到一个棘手的问题,搞了两天仍未解决,望大家帮帮忙! 1.DM9000的CMD与ARM2440的A2地址线相连,AEN连接nGCS4,其偏移地址是0x20000300; 2.DM9000的ID为0x90000A46,但却始终检测不了,却读出为0x46464646,而0x46正是DM ...… 查看全部问答> |
|
…… #include #include \"gpio.h\" #define PRIVATE static #define PUBLIC /* GPIO 寄存器对应的虚拟地址 */ PRIVATE volatile S3C6410_IOPORT_ ...… 查看全部问答> |
|
多通道转换时的值比单通道转换时的值要小0.2V左右,并且通道越多,值越小,4通道转换时比单通道将近小一半? 什么原因啊, 我用的DMA方式缓存建立了一个 ADCConvertedValue[10][4];,DMA深度为10, 在DMA中断里 void DMA1_Channel1_IRQHandler(vo ...… 查看全部问答> |
|
>> C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\010763, line 30: error: illegal input character: hex ffffffed>> C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\ ...… 查看全部问答> |




