按键控制步进电机并在数码管显示

来源:本站
导读:目前正在解读《按键控制步进电机并在数码管显示》的相关信息,《按键控制步进电机并在数码管显示》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《按键控制步进电机并在数码管显示》的详细说明。
简介:在这里和大家分享一个由按键控制步进电机并在数码管显示的程序。

/*****************************************************                                    程序说明    通过改变脉冲个数改变步进电机的角度,通过按键可以让步进电机停在任意角度及正反转 并在数码管显示,正转显示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);                  }             }      }*/}

提醒:《按键控制步进电机并在数码管显示》最后刷新时间 2024-03-14 00:58:14,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《按键控制步进电机并在数码管显示》该内容的真实性请自行鉴别。