基于单片机机械手的毕业设计内容摘要:

当复位脚由高电平变为低电平时,芯片为 ROM的 00H处开始运行程序。 复位外部的复位电路来实现的。 片内复位电路是复位引脚 RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的 S5P2,由复位电路采样一次。 复位 - 18 - 电路通常采用上电自动复位和按钮复位两种方式,此电路系统采用的是上电与按钮复位电路。 当时钟频率选用 6MHz 时, C 取 22μ F,Rs约为 200Ω, Rk约为 1K。 复位操作不会对内部 RAM有所影响。 4 软件系统设计 流程图 本设计系统流程图如图 11所示。 - 19 - 图 11 主程序流程图 源程序 系统源程序如下: /********************************************************/ /* 名称:机械手控制和计数系统的设计与实现 */ /* 功能:按下 S1启动机械手 */ /* 按下 S2停止机械手 */ /* 按下 S3计数器清零 */ /********************************************************/ include define uchar unsigned char define uint unsigned int uint count,a,ge,shi,bai,qian,wan。 uchar code 开始 软件初始化 键盘扫描程序 2s 键盘处理程序 电磁阀扫描 2s 电磁阀处理 否 是 是 否 显示程序 运行机械手 是 - 20 - led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}。 /********************************************************//* 定义接口信息 */ /********************************************************/ sbit sled=P1^1。 //启动状态 sbit uled=P1^2。 //上升状态 sbit dled=P1^3。 //下降状态 sbit lled=P1^4。 //左行状态 sbit rled=P1^5。 //右行状态 sbit cled=P1^6。 //夹紧状态 sbit sbym1=P2^0。 sbit sbym2=P2^0。 sbit sbym3=P2^0。 sbit up=P2^3。 //上升电磁阀 sbit down=P2^4。 //下降电磁阀 sbit left=P2^5。 //左行电磁阀 sbit right=P2^6。 //右行电磁阀 sbit clamp=P2^7。 //夹紧电磁阀 sbit s1=P3^0。 //启动 sbit s2=P3^1。 //停止 sbit s3=P3^2。 //计数器清零 sbit ulimit=P3^3。 //上限 位信号 sbit dlimit=P3^4。 //下限位信号 sbit llimit=P3^5。 //左限位信号 sbit rlimit=P3^6。 //右限位信号 /********************************************************/ /* 函数声明 */ - 21 - /********************************************************/ void delay(uint t)。 //延时函数 void delay_1s(uchar t)。 //延时函数 void keyscan()。 //按键扫描 void display()。 //LED 数码管显示函数 void carry()。 //传送物体 void return0()。 //返回原位 /********************************************************/ /* 主程序 */ /********************************************************/ void main()// 主函数 { count=12345。 while(1) { keyscan()。 display()。 } } /********************************************************/ /* 传送物体函数 */ /********************************************************/ void carry() { sled=0。 //开启状态 down=1。 //开下降电磁阀 dled=0。 //下降状态 亮 while(dlimit)display()。 //等待下限为发送信号 if(dlimit==0)//机械手向下运动时是否触及下限位 { - 22 - down=0。 //关闭下降电磁阀 dled=1。 //下降状态 灭 clamp=1。 //开启夹紧电磁阀 cled=0。 //夹紧状态 亮 delay_1s(2)。 //延时 2S up=1。 //开启上升电磁阀 uled=0。 //上升状态 亮 while(ulimit)display()。 //等待上限位输入信号 if(ulimit==0)//机械手向上运动时是否触及上限位 { up=0。 //关闭上升电磁阀 uled=1。 //上升状态 灭 right=1。 //开启右行电磁阀 rled=0。 //右行状态 亮 while(rlimit)display()。 //等待右限位输入信号 if(rlimit==0)//机械手向右运动时是否触及右限位 { right=0。 //关闭右行电磁阀 rled=1。 //右行状态 灭 down=1。 //开启下降电磁阀 dled=0。 //下降状态 亮 while(dlimit)display()。 //等待下限为输入信号 if(dlimit==0)//机械手向下运动时是否触及下限位 { down=0。 //关闭下降电磁阀 dled=1。 //下降状态 灭 clamp=0。 //关闭夹紧电磁阀,讲物体放在指定位置 count++。 //计数器加 1 delay_1s(2)。 //延时 2S cled=1。 //夹紧状态 灭 } } - 23 - } } return0()。 } /********************************************************/ /* 返回原位函数 */ /********************************************************/ void return0() { up=1。 //开启 上升电磁阀 uled=0。 //上升状态 亮 while(ulimit)display()。 //等待上限位输入信号 if(ulimit==0)//机械手向上运动时是否触及上限位 { up=0。 //关闭上升电磁阀 uled=1。 //上升状态 灭 left=1。 //开启左行电磁阀 lled=0。 //左行状态 亮 while(llimit)display()。 //等待左限位输入信号 if(llimit==0) { left=0。 //关闭左行电磁阀 lled=1。 //左行状态 灭 ,此时机械手已经回到原位 } } carry()。 } /********************************************************/ /* LED数码管显示函数 */ /********************************************************/ void display() - 24 - { wan=count%100000/10000。 //显示万位 qian=count%10000/1000。 //显示千位 bai=count%1000/100。 //显示百位 shi=count%100/10。 //显示十位 ge=count%10。 //显示个位 P2=0。 P0=led[wan]。 //显示 wan 位 delay(1)。 P2=1。 P0=led[qian]。 //显示千位 delay(1)。 P2=2。 P0=led[bai]。 //显示百位 delay(1)。 P2=3。 P0=led[shi]。 //显示十位 delay(1)。 P2=4。 P0=led[ge]。 //显示个位 delay(1)。 } /********************************************************/ /* 延时函数 */ /********************************************************/ void delay(uint t) { uint i,j。 for(i=0。 it。 i++) for(j=0。 j500。 j++)。 } - 25 - /*******************************************************/ /* 1s 延时函数 */ /********************************************************/ void delay_1s(uchar t) { uint i,j,k。 for(i=0。 it。 i++) for(j=0。 j。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。