发 帖
[问答]

怎么通过按键控制步进电机的转动还是停止?

16546 步进电机
已退回5积分
2016-7-17 11:27:16   1评论 分享淘帖 邀请回答 举报
1 条评论
  • 2020-9-11 01:54

    你的程序按键扫描只进行一次,按键扫描要放在while(flag)里面

10个回答
2016-7-17 11:27:30 1评论

举报

1 条评论
  • 2022-4-29 21:41

    这个是·我的: #include "reg52.h" typedef unsigned int u16; typedef unsigned char u8; sbit IN1_A=P1^0; sbit IN2_B=P1^1; sbit IN3_C=P1^2; sbit IN4_D=P1^3; sbit LED1=P2^0; sbit BEEP=P2^5; sbit KEY1=P3^1; sbit KEY2=P3^0; sbit KEY3=P3^2; sbit KEY4=P3^3; #define KEY1_PRESS 1 #define KEY2_PRESS 2 #define KEY3_PRESS 3 #define KEY4_PRESS 4 #define KEY_UNPRESS 0 #define STEPMOTOR_MAXSPEED 1 #define STEPMOTOR_MINSPEED 5 void delay_10us(u16 ten_us) { while(ten_us--); } void delay_ms(u16 ms) { u16 i,j; for(i=ms;i>0;i--) for(j=110;j>0;j--); } void beep_alarm(u16 time,u16 fre); #endif void beep_alarm(u16 time,u16 fre) { while(time--) { BEEP=!BEEP; delay_10us(fre); } } void step_motor_28BYJ48_send_pulse(u8 step,u8 dir) { u8 temp=step; if(dir==0) //如果为逆时针旋转 temp=7-step;//调换节拍信号 switch(temp)//8个节拍控制:A->AB->B->BC->C->CD->D->DA { case 0: IN1_A=1;IN2_B=0;IN3_C=0;IN4_D=0;break; case 1: IN1_A=1;IN2_B=1;IN3_C=0;IN4_D=0;break; case 2: IN1_A=0;IN2_B=1;IN3_C=0;IN4_D=0;break; case 3: IN1_A=0;IN2_B=1;IN3_C=1;IN4_D=0;break; case 4: IN1_A=0;IN2_B=0;IN3_C=1;IN4_D=0;break; case 5: IN1_A=0;IN2_B=0;IN3_C=1;IN4_D=1;break; case 6: IN1_A=0;IN2_B=0;IN3_C=0;IN4_D=1;break; case 7: IN1_A=1;IN2_B=0;IN3_C=0;IN4_D=1;break; default: IN1_A=0;IN2_B=0;IN3_C=0;IN4_D=0;break;//停止相序 } } u8 key_scan(u8 mode) { static u8 key=1; if(mode)key=1;//连续扫描按键 if(key==1&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0))//任意按键按下 { delay_10us(1000);//消抖 key=0; if(KEY1==0) return KEY1_PRESS; else if(KEY2==0) return KEY2_PRESS; else if(KEY3==0) return KEY3_PRESS; else if(KEY4==0) return KEY4_PRESS; } else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1) //无按键按下 { key=1; } return KEY_UNPRESS; } void main() { u8 key=0; u8 dir=0;//默认逆时针方向 u8 speed=STEPMOTOR_MAXSPEED;//默认最大速度旋转 u8 step=0; u8 start=0; u8 KEY4_start; u8 flag; while(1) { key=key_scan(0); if(key==KEY1_PRESS) { beep_alarm(750,100); beep_alarm(2000,50); beep_alarm(1000,70); } else if(key==KEY2_PRESS) { if(speed>STEPMOTOR_MAXSPEED) speed-=1; } else if(key==KEY3_PRESS) { if(speed<STEPMOTOR_MINSPEED) speed+=1; } else if(key==KEY4_PRESS) { beep_alarm(750,100); beep_alarm(2000,50); beep_alarm(1000,70); while(!KEY4_start); } step_motor_28BYJ48_send_pulse(step++,dir); if(step==8)step=0; delay_ms(speed); } }能关掉步进电机但是不知道怎么打开

2016-7-17 11:27:54 评论

举报

2016-7-17 11:28:05 评论

举报

2016-7-17 11:29:14 2评论

举报

2 条评论
2016-7-17 15:08:42 评论

举报

2016-7-17 19:21:40 评论

举报

评分

参与人数1 积分+2 收起理由
你猜啊 + 2

查看全部评分

2016-7-18 09:03:01 评论

举报

2016-7-18 09:50:21 评论

举报

2017-8-1 15:02:36 评论

举报

2017-8-1 15:02:56 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

您需要登录后才可以回帖 登录/注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
快速回复 返回顶部 返回列表
关注微信公众号

德赢Vwin官网 网

德赢Vwin官网 论坛

社区合作
刘勇
联系电话:15994832713
邮箱地址:liuyong@huaqiu.com
社区管理
elecfans短短
微信:elecfans_666
邮箱:users@huaqiu.com
关闭

站长推荐上一条/6下一条

快速回复 返回顶部 返回列表