51单片机步进电机调速-转动程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

//以下程序都是在VC++6.0上调试运行过的程序,没有错误,没有警告。//单片机是STC89C52RC,但是在所有的5152单片机上都是通用的。51只是一个学习的基础平台,你懂得。//程序在关键的位置添加了注释。//用//11111111111111111代表第一个程序。//2222222222222222222222222代表第二个程序,以此类推//1111111111111111111111111111111111111111111111111111111111111111111//1111111111111111111111111111111111111111111111111111111111111111111/********************************************************************************实验名:步进电机实验*使用的IO:电机用P1口,键盘使用P3.0、P3.1、P3.2、P3.3*实验效果:按下K1键,顺时针转,按下K2键,逆时针转,按下K3键,低速,*按下K4键,高速。*注意:由于P3.2口跟红外线共用,所以做按键实验时为了不让红外线影响实验*效果,最好把红外线先取下来。*******************************************************************************/#includereg52.h//电机IO#defineGPIO_MOTORP1//sbitF1=P1^0;//sbitF2=P1^1;//sbitF3=P1^2;//sbitF4=P1^3;//按键IOsbitK1=P3^0;sbitK2=P3^1;sbitK3=P3^2;sbitK4=P3^3;unsignedcharcodeFFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};//反转顺序unsignedcharcodeFFZ[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};//正转顺序unsignedcharDirection,Speed;voidDelay(unsignedintt);voidMotor();/********************************************************************************函数名:main*函数功能:主函数*输入:无*输出:无*******************************************************************************/voidmain(void){unsignedchari;Speed=30;while(1){if(K1==0)//检测按键K1是否按下{Delay(1);//消除抖动if(K1==0){Direction=1;}while((i200)&&(K1==0))//检测按键是否松开{Delay(1);i++;}i=0;}if(K2==0)//检测按键K1是否按下{Delay(1);//消除抖动if(K2==0){Direction=2;}while((i200)&&(K2==0))//检测按键是否松开{Delay(1);i++;}i=0;}if(K3==0)//检测按键K1是否按下{Delay(1);//消除抖动if(K3==0){Speed=13;}while((i200)&&(K3==0))//检测按键是否松开{Delay(1);i++;}i=0;}if(K4==0)//检测按键K1是否按下{Delay(1);//消除抖动if(K4==0){Speed=40;}while((i200)&&(K4==0))//检测按键是否松开{Delay(1);i++;}i=0;}Motor();}}/********************************************************************************函数名:Motor*函数功能:电机旋转函数*输入:无*输出:无*******************************************************************************/voidMotor(){unsignedchari;for(i=0;i8;i++){if(Direction==1)GPIO_MOTOR=FFW[i]&0x1f;//取数据if(Direction==2)GPIO_MOTOR=FFZ[i]&0x1f;Delay(Speed);//调节转速}}/********************************************************************************函数名:Delay*函数功能:延时*输入:t*输出:无*******************************************************************************/voidDelay(unsignedintt){unsignedintk;while(t--){for(k=0;k80;k++){}}}//2222222222222222222222222222222222222222222222222222222222//2222222222222222222222222222222222222222222222222222222222/********************************************************************************实验名:步进电机实验*使用的IO:电机用P1.0/P1.1/P1.2/P1.3*实验效果:*注意:由于P3.2口跟红外线共用,所以做按键实验时为了不让红外线影响实验*效果,最好把红外线先取下来。*******************************************************************************/#includereg52.h//电机IO#defineGPIO_MOTORP1//sbitF1=P1^0;//sbitF2=P1^1;//sbitF3=P1^2;//sbitF4=P1^3;//按键IOsbitK1=P3^0;sbitK2=P3^1;sbitK3=P3^2;sbitK4=P3^3;unsignedcharcodeFFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};//反转顺序voidDelay(unsignedintt);voidMotor();/********************************************************************************函数名:main*函数功能:主函数*输入:无*输出:无*******************************************************************************/voidmain(void){while(1){Motor();}}/********************************************************************************函数名:Motor*函数功能:电机旋转函数*输入:无*输出:无*******************************************************************************/voidMotor(){unsignedchari;for(i=0;i8;i++){GPIO_MOTOR=FFW[i]&0x1f;//取数据Delay(30);//调节转速}}/********************************************************************************函数名:Delay*函数功能:延时*输入:t*输出:无*******************************************************************************/voidDelay(unsignedintt){unsignedintk;while(t--){for(k=0;k80;k++){}}}

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功