完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
请教各位大神,求大神们帮我看看程序,
想用单片机控制步进电机,步进电机有启动器,单片机上电步进电机正转,单片机上连接了一个激光接收器。 当激光照射到激光接收器第一次触发后,(激光为闪烁状态,不是常亮)步进电机停止转动1秒。 当在电机停止的1秒内,激光接收器第二次触发后,电机反转2秒。如果激光接收器没触发,电机正转,重新开始检测。 当在反转的2秒内,激光接收器再次触发,电机继续反转,直到激光接收器没有接收到激光信号不触发时,电机变回正转,再次等待激光接收器触发 小弟程序写到电机可以反转2秒,再往后就不会了,还请大神们指点指点,小弟写的程序如下 #include #define uint unsigned int #define uchar unsigned char***it ***it zhuan=P1^2; ***it fangxiang=P1^3; ***it jieshou=P2^2; //激光接收器 uchar flag1,flag2,flag3,flag4,t0,jsnum1; uint k; void yanshi(uint z) { uint x,y; for(x=z;x>0;x--) for(y=200;y>0;y--); } void qianjin() //步进电机正转 { fangxiang=0; zhuan=1; yanshi(1); zhuan=0; yanshi(1); } void houtui() //步进电机反转 { fangxiang=1; zhuan=0; yanshi(1); zhuan=1; yanshi(1); } void main() { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; jsnum1=0; //激光接收次数 flag1=0; //步进电机1标志位 while(1) { if(flag1==0) { jsnum1=0; qianjin(); } if(jieshou==0) //激光接收器第一次触发 { jsnum1++; flag1=1; TR0=1; flag2=1; while(!jieshou); } } } void dingshi() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; t0++; if(flag2==1) { flag1=1; if(t0==20) { t0=0; if(jieshou==0) //激光接收器第二次触发 { jsnum1++; while(!jieshou); } else //没有触发重新开始 TR0=0; flag1=0; if(jsnum1==2) //电机开始反转 { uint i; for(i=5000;i>0;i--) houtui(); jsnum1=0; } flag1=0; } } } |
|
相关推荐 |
|
644 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1819 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1262 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1136 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1357 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12031 浏览 31 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 16:30 , Processed in 0.605807 second(s), Total 62, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号