完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
原程序程序如图所示
#include #define uint unsigned int #define uchar unsigned char //------8拍----- uchar code zz1[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //正转 uchar code fz1[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //反转 uchar code zz2[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90}; //2正转 uchar code fz2[]={0x90,0x80,0xc0,0x40,0x60,0x20,0x30,0x10}; //2反转. /*********************************** 时间函数 ************************************/ void delay(uint ms) { uint t; while(ms--) for(t=0;t<120;t++); } /*********************************** 定义各变量 ************************************/ void motor_zz1(uint n) { uint i,j; for(i=0;i<5*n;i++) { for(j=0;j<8;j++) { if(P0==0xbf||P3==0x9f) break; P2=zz1[j]; delay(20); } } } void motor_zz2(uint n) { uint i,j; for(i=0;i<5*n;i++) { for(j=0;j<8;j++) { if(P0==0xbf||P3==0x5f) break; P2=zz2[j]; delay(20); } } } void motor_fz1(uint n) { uint i,j; for(i=0;i<5*n;i++) { for(j=0;j<8;j++) { if(P0==0xbf||P3==0x6f||P3==0xef||P3==0xaf) break; P2=fz1[j]; delay(20); } } } void motor_fz2(uint n) { uint i,j; for(i=0;i<5*n;i++) { for(j=0;j<8;j++) { if(P0==0xbf||P3==0xaf) break; P2=fz2[j]; delay(20); } } } /*********************************** 主函数 ************************************/ void main() { uint N=361; //转动圈速 while(1) { //****************检测键****************ok P0=0xff; if(P0==0xef&&P3==0xaf)//传感器1和3=1的时候,即复位完成时*****检测键(0.4)+传感器1(3.4)和传感器3(3.6) { while(P0==0xef);//检测键(0.4)*********+传感器1(3.4)和传感器3(3.6) delay(200);//延时启动 motor_zz1(N); if(P3==0x9f);//碰到传感器2(3.5)+此时传感器3仍闭合(3.6) delay(500); motor_zz2(N); if(P3==0x5f);//碰到传感器4(3.7)+此时传感器2仍闭合(3.5) delay(500); motor_fz1(N); if(P3==0x6f)//碰到传感器1(3.4)+此时传感器4仍闭合(3.7) delay(500); motor_fz2(N); if(P3==0xaf)//碰到传感器3(3.6)+此时传感器1仍闭合(3.4) break;//结束检测 if(P0==0xbf)//p0.6(暂停) break; } //****************复位键**************** if(P0==0xdf)//按下复位键(0.5) { while(P0==0xdf); motor_fz1(N); if(P3==0xef||P3==0xaf);//(传感器1)或(传感器1+4) delay(500); motor_fz2(N); if(P3==0xaf);//(传感器3+1) break; if(P0==0xbf)//(暂停) break; } //****************电动机手动控制**************** if(P0==0xfe) { while(P0==0xfe);//p0.0+p0.1(电动机1正转) motor_zz1(N) ; if(P0==0xbf) break; } else if(P0==0xfd)//p0.0+p0.2(电动机1反转) { while(P0==0xfd); motor_fz1(N); if(P0==0xbf) break; } else if(P0==0xfb)//p0.0+p0.3(电动机2正转) { while(P0==0xfb); motor_zz2(N); if(P0==0xbf) break; } else if(P0==0xf7)//p0.0+p0.4(电动机2反转) { while(P0==0xf7); motor_fz2(N); if(P0==0xbf) break; } } } 麻烦大家帮帮忙,谢谢~~~
|
|
相关推荐
4个回答
|
|
好吧,百度了大半天才发现延时消抖逻辑出错导致消抖不成功,现在改好了,把程序贴出了给有需要的看看吧,只是很普通的很笨的软件消抖程序,仅供像我这样的小白参考,大神勿喷,如有不合理的地方还请指点一下
#include #define uint unsigned int #define uchar unsigned char //------8拍----- uchar code zz1[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //正转 uchar code fz1[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //反转 uchar code zz2[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90}; //2正转 uchar code fz2[]={0x90,0x80,0xc0,0x40,0x60,0x20,0x30,0x10}; //2反转. /*********************************** 时间函数 ************************************/ void delay(uint ms) { uint t; while(ms--) for(t=0;t<120;t++); } /*********************************** 定义各变量 ************************************/ void motor_zz1(uint n) { uint i,j; for(i=0;i<5*n;i++) { for(j=0;j<8;j++) { if(P0==0xbf||P3==0x9f) break; P2=zz1[j]; delay(20); } } } void motor_zz2(uint n) { uint i,j; for(i=0;i<5*n;i++) { for(j=0;j<8;j++) { if(P0==0xbf||P3==0x5f) break; P2=zz2[j]; delay(20); } } } void motor_fz1(uint n) { uint i,j; for(i=0;i<5*n;i++) { for(j=0;j<8;j++) { if(P0==0xbf||P3==0x6f||P3==0xef||P3==0xaf) break; P2=fz1[j]; delay(20); } } } void motor_fz2(uint n) { uint i,j; for(i=0;i<5*n;i++) { for(j=0;j<8;j++) { if(P0==0xbf||P3==0xaf) break; P2=fz2[j]; delay(20); } } } /*********************************** 主函数 ************************************/ void main() { uint N=361; //转动圈速 while(1) { P0=0xff; //****************检测键**************** if(P0==0xef) //去抖 { delay(200); if(P0==0xef&&P3==0xaf)//传感器1和3=1的时候,即复位完成时*****检测键(0.4)+传感器1(3.4)和传感器3(3.6) { while(P0==0xef);//消除抖动 motor_zz1(N); if(P3==0x9f);//碰到传感器2(3.5)+此时传感器3仍闭合(3.6) delay(500); motor_zz2(N); if(P3==0x5f);//碰到传感器4(3.7)+此时传感器2仍闭合(3.5) delay(500); motor_fz1(N); if(P3==0x6f)//碰到传感器1(3.4)+此时传感器4仍闭合(3.7) delay(500); motor_fz2(N); if(P3==0xaf)//碰到传感器3(3.6)+此时传感器1仍闭合(3.4) break;//结束检测 if(P0==0xbf)//p0.6(暂停)+消除抖动 { delay(200); if(P0==0xbf)//(暂停) { break; } } } } //****************复位键**************** if(P0==0xdf) //消除抖动 { delay(200); if(P0==0xdf)//按下复位键(0.5) { while(P0==0xdf); motor_fz1(N); if(P3==0xef||P3==0xaf);//(传感器1)或(传感器1+4) delay(500); motor_fz2(N); if(P3==0xaf);//(传感器3+1) break; if(P0==0xbf)//消除抖动 { delay(200); if(P0==0xbf)//(暂停) { break; } } } } //****************电动机手动控制**************** if(P0==0xfe) //消除抖动 { delay(200); if(P0==0xfe) { while(P0==0xfe);//p0.0(电动机1正转) motor_zz1(N) ; if(P0==0xbf)//消除抖动 { delay(200); if(P0==0xbf)//(暂停) { break; } } } } else if(P0==0xfd) //消除抖动 { delay(200); if(P0==0xfd)//p0.1(电动机1反转) { while(P0==0xfd); motor_fz1(N); if(P0==0xbf)//消除抖动 { delay(200); if(P0==0xbf)//(暂停) { break; } } } } else if(P0==0xfb) //消除抖动 { delay(200); if(P0==0xfb)//p0.3(电动机2正转) { while(P0==0xfb); motor_zz2(N); if(P0==0xbf)//消除抖动 { delay(200); if(P0==0xbf)//(暂停) { break; } } } } else if(P0==0xf7) //消除抖动 { delay(200); if(P0==0xf7)//p0.4(电动机2反转) { while(P0==0xf7); motor_fz2(N); if(P0==0xbf)//消除抖动 { delay(200); if(P0==0xbf)//(暂停) { break; } } } } } } |
|
|
|
同小白,你做过单片机pid控制程序之类的吗?
|
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-spi编程示例之spi编写程序
643 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第三十七章 image图像对比实验
625 浏览 0 评论
722 浏览 1 评论
528 浏览 0 评论
关于RT-Thread studio添加freemodbus控件失败的问题
883 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11648 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-9 18:24 , Processed in 0.564466 second(s), Total 75, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号