完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
正反转可控的步进电机
通过按钮控制电机顺时针或逆时针旋转: #include #include #include #include #include #define INT8U unsigned char #define INT16U unsigned int ***it FFW_KEY=P3^0; ***it REV_KEY=P3^1; ***it STOP_KEY=P3^2; //0000_0001 A->AB->B->BC->C->CD->D->AD INT8U code FFW_ARR[]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09}; //0000_1001 AD->D->CD->C->BC->B->AB->A INT8U code REV_ARR[]={0x09,0x08,0x0C,0x04,0x06,0x02,0x03,0x01}; /** *延时 * [email=*@param]*@param[/email] x 延时时间 [email=*@return]*@return[/email] */ void delay_ms(INT16U x) { INT8U t=120; while(x--) while(t--); } /** *顺时针旋转 * [email=*@param]*@param[/email] n 旋转圈数 [email=*@return]*@return[/email] */ void STEP_FFW(INT8U n) { INT8U i,j; for(i=0; i<5*n; i++) { for(j=0; j<8; j++) //8*9=72 { P1=FFW_ARR[j]; delay_ms(60); if(STOP_KEY==0) return; } } } /** *逆时间旋转 * [email=*@param]*@param[/email] n 旋转圈数 [email=*@return]*@return[/email] */ void STEP_REV(INT8U n) { INT8U i,j; for(i=0; i<5*n; i++) { for(j=0; j<8; j++) { P1=REV_ARR[j]; delay_ms(60); if(STOP_KEY==0) return; } } } void main() { INT8U n = 1; while(1) { if(FFW_KEY==0) { P0=0xFE; // 1111_1110 STEP_FFW(n); } else if(REV_KEY==0) { P0=0xFD; // 1111_1101 STEP_REV(n); } else { P0=0xFB; // 1111_1011 } } } |
|
|
|
只有小组成员才能发言,加入小组>>
2435 浏览 0 评论
9100 浏览 4 评论
36773 浏览 19 评论
5026 浏览 0 评论
24745 浏览 34 评论
1531浏览 2评论
1747浏览 1评论
2197浏览 1评论
1556浏览 0评论
526浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 10:55 , Processed in 1.364209 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号