完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
`程序如下通过共阳接法接俩个驱动器分别驱动步进电机 通过这俩个驱动板驱动步进实现后面的时序,不知道哪里不对了,请大师指点~ #include #define uchar unsigned char #define uint unsigned int ***it CP1=P1^0; ***it EN1=P1^1; ***it DR1=P1^2; ***it CP2=P1^3; ***it EN2=P1^4; ***it DR2=P1^5; ***it run=P1^6; ***it stop=P1^7; ***it shoudong=P2^0; uint a=0; uchar cishu=0; uint t=0; uint t1=0; uchar flag=0; uchar x=0; uchar y=0; void delay_10ms(void) { unsigned char a,b,c; for(c=5;c>0;c--) for(b=4;b>0;b--) for(a=248;a>0;a--); } void delay_3s(void) { unsigned char a,b,c; for(c=254;c>0;c--) for(b=96;b>0;b--) for(a=60;a>0;a--); _nop_(); } void init_I0() { CP1=0; EN1=0; DR1=1; CP2=0; EN2=0; DR2=0; run=1; stop=1; shoudong=1; TMOD=0x11; TH0=0x0ff; TL0=0x9c; EA=1; ET0=1; TR0=0; TH1=0xff; TL1=0x9c; //EA = 1; ET1 = 1; TR1 = 0; } void dianjiyunxin() { if(t==18000&&flag==0&&cishu<10) { EN1=0; DR1=0; EN2=1; delay_3s(); EN2=0; TR0=0; EN1=1; flag=1; t=0; cishu++;//cishu=1 } if(t==18000&&flag==1&&cishu<10) { EN1=0; DR1=1; EN2=1; delay_3s(); EN2=0; TR0=0; EN1=1; flag=0; t=0;// cishu++; //cishu=2 } if(cishu==10) { cishu=10; } if(t==18000&&flag==0&&cishu==10) { EN1=0; DR1=0; delay_3s(); EN1=1; flag=1; t=0; } if(t==18000&&flag==1&&cishu==10) { EN1=0; DR1=1; delay_3s(); EN1=1; flag=0; t=0; } } void main() { init_I0(); //Inittimer0(); //InitTimer1(); while(1) { if(shoudong==0) { delay_10ms(); if(shoudong==0) { for(cishu;cishu>0;cishu--) { TR0=1; EN2=1; DR2=1; delay_3s(); } EN2=0; while(a) { TR1=1; EN1=1; DR1=0; } EN1=0; DR1=1; } EN2=0; DR2=0; TR0=0; TR1=0; a=0; t=0; flag=0; CP1=0; CP2=0; } if(run==0) { delay_10ms(); if(run==0) { while(stop) { TR0=1; EN1=1; dianjiyunxin(); } } } if(stop==0) { delay_10ms(); if(stop==0) { if(DR1==1) a=t; if(DR1==0) a=(18000-t); // TR0=1; // while(!stop) // { // EN1=; // } EN1=0; //DR1=; } EN2=0; DR2=0; TR0=0; CP1=0; CP2=0; } } } void Timer0() interrupt 1 using 1 // 定时器中断 { TH0 = 0x0ff; TL0 = 0x9c; t1++; x++; y++; if(y==10)//提供2电机的脉冲 { CP2=~CP2; y=0; } if(x==5) //提供1电机的脉冲 { CP1=~CP1; x=0; } if(t1==10) { t++; t1=0; } } void Timer1() interrupt 3 using 2 // 定时器中断 { TH1 = 0x0ff; TL1 = 0x9c; t1++; x++; y++; if(y==10)//提供2电机的脉冲 { CP2=~CP2; y=0; } if(x==5) //提供1电机的脉冲 { CP1=~CP1; x=0; } if(t1==10) { a--; t1=0; } } ` |
|
相关推荐
1个回答
|
|
为什么延时3秒呀,这么长时间里,不知道中断了多少次了。不知道你要表达的是什么问题??
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
510 浏览 0 评论
792 浏览 0 评论
833 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
797 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1244 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11814 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 12:31 , Processed in 0.629843 second(s), Total 74, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号