/***************************************************** 程序说明 通过改变脉冲个数改变步进电机的角度,通过按键可以让步进电机停在任意角度及正反转 并在数码管显示,正转显示1,反转显示2 单片机 :STC12C5A60S2 晶振 :11.0592MHZ 步进电机驱动芯片:ULN2003A 作者 :苏义江 时间 :2015年6月5日 八拍方式驱动 :顺序为A AB B BC C CD D DA zhengzhuan[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; fanzhuan[] ={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; *****************************************************/#include<12c5a.H>//#include <reg52.h>//#define uchar unsigned char//#define uint unsigned int sbit key=P1^0; //按键控制步进电机的正转方向 sbit key1=P1^1; //按键控制步进电机的反转方向 sbit dula =P0^7; //段锁存使能sbit wela =P0^6; //位锁存使能 uchar code zhengzhuan[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; uchar code fanzhuan[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};//共阳段码 uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90,0x88,0x83,0xc6, 0xa1,0x86,0x8e,0x89};uchar code tab_f[]={0x0c,0x06,0x03,0x09, 0x0c,0x06,0x03,0x09};//2相励磁 反传uchar code tab_z[]={0x09,0x03,0x06,0x0c, 0x09,0x03,0x06,0x0c};//2相励磁 正传void Delay( uint i)//延时 { uint x,y; for(x=i;x>0;x--) for(y=300;y>0;y--);} void display(){ wela=1; P2=0xfe; wela=0; dula =1; P2=0xf9;//正转显示1 Delay( 10); P2=0xff; dula =0;}void display1(){ wela=1; P2=0xf7; wela=0; dula =1; P2=0xa4;//反转显示2 Delay( 10); P2=0xff; dula =0;}void main() { uint i,j;//j代表脉冲.i代表数据 P0M1=0; //设置P0口为强推免输出模式,下同 P0M0=0XFF; while(1) { //j等于13个脉冲,电机旋转一周。改变j的值就会改变电机的角度 for(j=3;j>0;j--)//正转4分之一周 { for(i=0;i<8;i++) { display(); P0=zhengzhuan[i];//正转数组 Delay(5);//5秒旋转一周 改变延时改变速度 } } Delay(200);//正反转之间延时 for(j=3;j>0;j--)//反转4分之一周 { for(i=0;i<8;i++) { display1(); P0=fanzhuan[i];//反转数组 Delay(5);//5秒旋转一周 改变延时改变速度 } } Delay(200); }/********下面程序都正常控制步进电机状态*****************/ /* while(1) { if(!key) Delay(10); { if(!key) { display(); Delay(10); for(j=7;j>0;j--)//j=7个脉冲,正转半周 { for(i=0;i<8;i++) { P0=zhengzhuan[i];//正转数组 Delay(10); } } } while(!key); } if(!key1) Delay(10); { if(!key1) { display1(); Delay(10); for(j=7;j>0;j--)//j=7个脉冲,反转半周 { for(i=0;i<8;i++) { P0=fanzhuan[i];//反转数组 Delay(10); } } } while(!key1); } }*//* while(1) { //j等于13个脉冲,电机旋转一周。改变j的值就会改变电机的角度 for(j=13;j>0;j--)//正转一周 { for(i=0;i<8;i++) { display(); P0=zhengzhuan[i];//正转数组 Delay(5);//6秒旋转一周 } } Delay(2000); for(j=13;j>0;j--)//反转一周 { for(i=0;i<8;i++) { display1(); P0=fanzhuan[i];//反转数组 Delay(5);//6秒旋转一周 } } Delay(2000); } */ /* while(1) { //j等于13个脉冲,电机旋转一周。改变j的值就会改变电机的角度 for(j=25;j>0;j--)//正转二周 { for(i=0;i<8;i++) { display(); P0=zhengzhuan[i];//正转数组 Delay(3); } } Delay(2000); for(j=25;j>0;j--)//反转一周 { for(i=0;i<8;i++) { display1(); P0=fanzhuan[i];//反转数组 Delay(3); } } Delay(2000); }*/ /* while(1) { //j等于13个脉冲,电机旋转一周。改变j的值就会改变电机的角度 for(j=250;j>0;j--)//正转二十周 { for(i=0;i<8;i++) { display(); P0=zhengzhuan[i];//正转数组 Delay(6); //延时控制转速不能小于500 } } Delay(2000); for(j=250;j>0;j--)//反转二十周 { for(i=0;i<8;i++) { display1(); P0=fanzhuan[i];//反转数组 Delay(6); //延时控制转速不能小于500 } } Delay(20000); }*//* while(1) { for(i=0;i<8;i++) { if(key) //按键未按下,正转 { P0=zhengzhuan[i];//正转数组 Delay(8); } else //按键按下,反转 { P0=fanzhuan[i];//反转数组 Delay(8); } } }*/}
导读:目前正在解读《按键控制步进电机并在数码管显示》的相关信息,《按键控制步进电机并在数码管显示》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《按键控制步进电机并在数码管显示》的详细说明。
简介:在这里和大家分享一个由按键控制步进电机并在数码管显示的程序。
提醒:《按键控制步进电机并在数码管显示》最后刷新时间 2024-03-14 00:58:14,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《按键控制步进电机并在数码管显示》该内容的真实性请自行鉴别。