门户网站兴化建设局 金,青岛济南网页设计公司,40个免费网站推广平台,wordpress centos 安装直流电机没有正负之分#xff0c;在两端加上直流电就能工作 P1.0-P1.3都可以控制电机#xff0c;例如#xff1a;使用P1.0#xff0c;则需要把线接在J47的1#xff08;VCC#xff09;和2#xff08;OUT1#xff09;上
1、直流电机实验
要实现的功能是#xff1a;直…直流电机没有正负之分在两端加上直流电就能工作 P1.0-P1.3都可以控制电机例如使用P1.0则需要把线接在J47的1VCC和2OUT1上
1、直流电机实验
要实现的功能是直流电机工作约5s后停止 #include reg51.h typedef unsigned int u16; typedef unsigned char u8; //输入1表示10us void delay(u16 time){ while(time--); } //毫秒的延时函数输入1表示1毫秒 void delay_ms(u16 ms){ u16 i0,j0; for(ims;i0;i--){ for(j110;j0;j--); } } //P1.0口控制电机P1.0-P1.3都可以控制电机 sbit DC_MOTORP1^0; //定义一个时间5s //不分正负极 void main(){ DC_MOTOR1; delay_ms(5000); DC_MOTOR0; while(1){ } } 2、步进电机实验
要实现的功能是通过ULN2003驱动模块控制28BYJ48步进电机运行方向及速度当按下KEY1键可调节电机旋转方向当按下KEY2键电机加速当按下KEY3键电机减速 #include reg51.h typedef unsigned int u16; typedef unsigned char u8; void delay_10us(u16 us){ while(us--); } //定义延时函数ms1时大约延时1ms void delay_ms(u16 ms){ u16 i0,j0; for(ims;i0;i--){ for(j110;j0;j--); } } //定义控制步进电机的管脚 //8个节拍控制A-AB-B-BC-C-CD-D-DA sbit IN1_AP1^0; //橙线 sbit IN2_BP1^1; //黄线 sbit IN3_CP1^2; //粉线 sbit IN4_DP1^3; //蓝线 //独立按键 //使用宏定义的方法定义独立按键的键值 #define KEY1_PRESS 1 #define KEY2_PRESS 2 #define KEY3_PRESS 3 #define KEY4_PRESS 4 #define KEY_UNPRESS 0 //定义按键对应的管脚口 sbit KEY1P3^1; sbit KEY2P3^0; sbit KEY3P3^2; sbit KEY4P3^3; //封装一个函数按键返回一个键值 u8 key_scan(u16 mode){ //mode模式有0和1操作如果操作0单次扫描如果操作1连续扫描 //打一个标志 static u16 key1; if(mode1){ key1; } if(key1(KEY10||KEY20||KEY30||KEY40)){ //消抖处理需要延时5ms-10ms delay_10us(1000); key0; //如果仍是按下信号稳定 if(KEY10){ return KEY1_PRESS; }else if(KEY20){ return KEY2_PRESS; }else if(KEY30){ return KEY3_PRESS; }else if(KEY40){ return KEY4_PRESS; } }else if(KEY11KEY21KEY31KEY41){ key1; return KEY_UNPRESS; } } //步进电机 step(拍数)0-7dir(电机方向)0逆时针1顺时针 void step_motor_28BYJ48C_send_pulse(u8 step,u8 dir){ u8 tempstep; if(dir1){ temp7-step; } switch(temp){ case 0: IN1_A1,IN2_B0,IN3_C0,IN4_D0; break; case 1: IN1_A1,IN2_B1,IN3_C0,IN4_D0; break; case 2: IN1_A0,IN2_B1,IN3_C0,IN4_D0; break; case 3: IN1_A0,IN2_B1,IN3_C1,IN4_D0; break; case 4: IN1_A0,IN2_B0,IN3_C1,IN4_D0; break; case 5: IN1_A0,IN2_B0,IN3_C1,IN4_D1; break; case 6: IN1_A0,IN2_B0,IN3_C0,IN4_D1; break; case 7: IN1_A1,IN2_B0,IN3_C0,IN4_D1; break; } } //定义转速1-5区间最小不能小于1步进电机的速度的值越小速度越快值越大速度越慢 #define STEPMOTOR_MAXSPEED 1 //可以改 #define STEPMOTOR_MINSPEED 5 void main(){ u8 key0; //按键的返回值 u8 dir0; //默认逆时针 u8 step0; //拍数 u8 speedSTEPMOTOR_MAXSPEED; //默认最大转速 while(1){ keykey_scan(0); if(keyKEY1_PRESS){ //换方向 dir!dir; }else if(keyKEY2_PRESS){ //加速 if(speedSTEPMOTOR_MAXSPEED){ speed-1; } }else if(keyKEY3_PRESS){ //减速 if(speedSTEPMOTOR_MINSPEED){ speed1; } } //电机工作 step_motor_28BYJ48C_send_pulse(step,dir); if(step8){ step0; } delay_ms(speed); //脉冲频率 } }