/*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;}}

}

if(i==0)  break;

}

}

void ybac(uint i)                //yy后退函数

{

while(1)

{

switch(yfb)

{

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

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

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

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

}

if(i==0)  break;

}

}

void dazi(uint zik)//打印函数                   ******打印函数已更改******

{

uint x;

jg=0;

for(x=0;x

{

while(z[63]);        //暂停等待

if(z[64]==1) break;//停止标志 跳出循环

SBUF=255;                    // 每开始打印一个点,向上位机发送255,上位机进度显示用

jg=0;              //开激光

delayms((z[99+x]*(z[58]*256+z[59]))/100);

jg=1;              //关闭激光

if(z[66]==1)

{

xbac(1);

}

else

{

xfor(1);

}

}

if(z[64==1])    z[64]=0;

else{yfor(1);}             //y轴进一行

z[62]=0;                   //一行打印完成

SBUF=1;                    //发送信息,表示打印一行完成

}

/* 串口配置函数,baud-通信波特率 */

void ConfigUART(unsigned int baud)

{

SCON  = 0x50;  //配置串口为模式1

TMOD &= 0x0F;  //清零T1的控制位

TMOD |= 0x20;  //配置T1为模式2

TH1 = 256 - (11059200/12/32)/baud;  //计算T1重载值

TL1 = TH1;     //初值等于重载值

ET1 = 0;       //禁止T1中断

ES  = 1;       //使能串口中断

TR1 = 1;       //启动T1

}

void chuanlo() interrupt 4

{

if(RI)

{

buff[cont2]=SBUF;//每次3字节,地址高,地址低,数据,,

cont2++;

if(cont2==3)//每收3个字节,把数据写入地址中

{

z[(buff[0]*256)+buff[1]]=buff[2];

cont2=0;

SBUF=0;  //*****************在这里加入这行代码测试一下*******************************

}

RI=0;

}

if(TI)

{

TI=0;

}

}

main()

{

EA=1;

P0=0xff;

ConfigUART(9600)        ;

z[60]=15;//默认的参数

z[61]=15;

z[56]=1;

z[62]=0;

jg=0;

cont2=0;

while(1)

{

//        *****此处已更改******

if(z[57]==100){ConfigPWM(100, 98);delayms(10);}         //上位机指令处理,打开弱光定位,频率100Hz,占空比98%

else if(z[57]==1)   jg=0;                                                   //打开强光

else   { ClosePWM(); delayms(10);}

if(cont2!=0) led=0;  else led=1;//指示通信是否可用

if(z[50]==1){xfor(z[51]*256+z[52]);z[50]=0;}//x+

if(z[50]==2){xbac(z[51]*256+z[52]);z[50]=0;}//x-

if(z[50]==3){yfor(z[51]*256+z[52]);z[50]=0;}//y+

if(z[50]==4){ybac(z[51]*256+z[52]);z[50]=0;}//y-

if(z[62])//开始打印标志

{

dazi(z[54]*256+z[55]);

}

}

}

雕刻机c语言程序,基于51单片机的激光雕刻机相关推荐

  1. 共阳极数码时钟c语言程序,基于51单片机C语言数字钟程序.doc

    基于51单片机C语言数字钟程序 基于51单片机C语言数字钟程序 数字电子钟的设计 一. 绪论 (一)引言 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地 ...

  2. 湿度控制c语言程序,基于51单片机的湿度控制系统设计.doc

    基于51单片机的湿度控制系统设计 基于51单片机的湿度控制系统设计 摘要 关键词:单片机:湿度传感器:ADC0832数模转换 目 录 序 言1 第一章 系统的整体设计方案2 1.1设计内容2 1.2系 ...

  3. 51单片机的电子钟c语言程序,基于51单片机的电子钟C语言程序

    基于单片机C语言的电子钟程序代码与仿真 基于51单片机的电子钟C语言程序: 程序代码 #include #include #define uchar unsigned char #define uin ...

  4. 74hc164驱动数码管c语言程序,基于51单片机的74HC164驱动数码管显示程序与仿真

    基于51单片机的74HC164驱动数码管显示程序与仿真 基于51单片机的74HC164驱动一位数码管显示程序与仿真 #include #include #define uchar unsigned c ...

  5. 水塔水位测量c语言程序,基于51单片机水塔水箱水位检测系统控制器设计(附程序代码)...

    基于51单片机水塔水箱水位检测系统控制器设计(附程序代码)(任务书,开题报告,外文翻译,论文18000字) 摘  要 为了能实现水位监测与控制,以STC89C52作为核心控制芯片,进行了水位检测系统控 ...

  6. 51lcd显示光传感器c语言程序,基于51单片机1602液晶显示GY-30数字光照传感器BH1750FVI程序实例...

    基于51单片机1602液晶显示GY-30数字光照传感器BH1750FVI程序实例,系统由GY-30数字光照传感器.51单片机最小系统.1602液晶显示屏组成,电路简单,附件中的程序是实物验证过了的.1 ...

  7. 单片机遥控车c语言程序,基于51单片机的无线遥控小车设计[附发射接收程序]

    /***************************************************************/ /*[基于51单片机的无线遥控小车设计] 作者王*茹 */ /*** ...

  8. 基于51单片机的光照强度检测c语言程序,基于51单片机光照强度检测报告.doc

    基于51单片机光照强度检测报告 课程设计报告 课程名称: 智能仪器课程设计 题 目: 基于51单片机的光照强度 摘要 光敏电阻测光强度系统,该系统可以自动检测光照强度的强弱并显示让人们知道此时光照强度 ...

  9. 收音机c语言程序,基于51单片机的数字FM调频收音机的设计(附接线图,主程序代码)...

    基于51单片机的数字FM调频收音机的设计(附接线图,主程序代码)(任务书,开题报告,论文15000字) 摘要 在当今的社会时代中,信息的传输扮演着极其重要的地位.随着科学技术的不断发展与进步,人类的生 ...

  10. 水质检测c语言程序,基于51单片机的水质监测系统的设计.doc

    基于51单片机的水质监测系统的设计 基于AT89C51单片机的水质监测系统的设计 摘要:现在水源污染已经成了社会密切关注的话题,所以对水质进行监测成了保护水资源的一项重要措施,基于此本文设计了一款能够 ...

最新文章

  1. 关于window.localtion的用法几点总结
  2. python爬虫不错的文章
  3. 喜报!良品铺子签约神策数据
  4. 类属性-类属性的定义及使用
  5. 一文吃透Json解析工具类合集(FastJson、Jackson、Gson)
  6. 网络/系统调试维护笔记
  7. 如何复制服务器数据库文件大小,如何复制服务器数据库文件夹
  8. 第2节 azkaban调度:17、azkaban的两个服务模式的安装
  9. 记Hadoop HA高可用性分布式集群搭建过程
  10. vue入门:(class与style绑定)
  11. Mac 删除不必要的 Adobe PS AI 组件
  12. DOS命令查看局域网所有IP
  13. 06【五险一金解读】还有你的工资条哦?
  14. Router的路由表
  15. Latex爬过的坑(2)——I was expecting a ‘,‘ or a ‘}‘
  16. windows7、10磁盘分区以及磁盘扩展(详细教程以及注意事项)
  17. 怎么在多层循环中直接跳出循环
  18. damon ps2 android,DamonPS2模拟器
  19. Vmware虚拟机安装黑群辉提示系统可恢复,无限还原,解决办法。
  20. 浅尝辄止MongoDB:基础

热门文章

  1. 海量数据实时计算系统在高并发互联网应用中的原理和实践
  2. 树莓派百度云下载工具bypy
  3. 使用http请求发送文件,文件标题乱码
  4. 自定义注解+AOP,优雅的打印方法接受和返回的参数内容
  5. python如何执行代码漏洞_在漏洞利用Python代码真的很爽
  6. 全局唯一递增的id_细聊分布式ID生成方法
  7. android-goldfish-3.4内核源码下载与编译
  8. MATLAB实现一个简单的车牌识别小程序
  9. Gym 100796B Wet Boxes(思维)题解
  10. A wet night