600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 步进电机应用c语言程序设计实例 51单片机调节步进电机应用C语言程序设计

步进电机应用c语言程序设计实例 51单片机调节步进电机应用C语言程序设计

时间:2019-11-29 09:20:45

相关推荐

步进电机应用c语言程序设计实例 51单片机调节步进电机应用C语言程序设计

51单片机调节步进电机应用C语言程序设计

//步进电机应用C语言程序设计

#include

#define uchar unsigned char

sbit dula=P2^6; //数码管显示段选I/O口定义

sbit wela=P2^7; //数码管显示位选I/O口定义

sbit jia_key=P3^6; //电机加速I/O口定义

sbit jian_key=P3^7; //电机减速I/O口定义

sbit zf_key=P3^5; //电机正反转I/O定义

bit flag=0; //电机正反转标志位

uchar num=0,show_num=2,maichong=4,table_begin=0;

uchar code table1[]={0x01,0x02,0x04,0x08,0x08,0x04,0x02,0x01};

//uchar code table1[]={0x09,0x03,0x06,0x0c,0x08,0x04,0x02,0x01};

//uchar code table1[]={0x01,0x04,0x02,0x08,0x08,0x02,0x04,0x01};

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(uchar i) //延时函数

{

uchar j,k;

for(j=i;j>0;j--)

for(k=125;k>0;k--);

}

void display() //显示函数

{

dula=0;

P0=table[show_num];

dula=1;

dula=0;

wela=0;

P0=0xfe;

wela=1;

wela=0;

delay(5);

P0=table[0];

dula=1;

dula=0;

P0=0xfd;

wela=1;

wela=0;

delay(5);

}

void key () //按键检测处理函数

{

if(jia_key==0)

{

delay(5); //加速键按下,消抖

if(jia_key==0)

{

num++; //速度标示加1

if(num==4)

num=3; //达到最大3则保持

while(jia_key==0); //等待松开按键

}

}

if(jian_key==0)

{

delay(5); //减速键按下

if(jian_key==0)

{

if(num!=0)

num--; //速度标示减1

else

num=0; //达到最小0则保持

while(jian_key==0);

}

}

if(zf_key==0)

{

delay(5); //正反转按键按下

if(zf_key==0)

{

flag=~flag; //正反转标识取反

while(zf_key==0);

}

}

}

void dispose() //根据速度标识进行数据处理

{

switch(num)

{

case 0:

show_num=2; //数码管第一位显示的数字

maichong=5; //利用maichong数据控制送给电机脉冲的频率,控制速度

break;

case 1:

show_num=4;

maichong=4;

break;

case 2:

show_num=6;

maichong=3;

break;

case 3:

show_num=8;

maichong=2;

break;

}

if(flag==0)

{

table_begin=0; //flag为0,正转

}

else

table_begin=4; //flag为1,反转

}

void qudong() //电机速度,和正反转控制

{

uchar i,j;

for(j=0+table_begin;j<4+table_begin;j++)

{

P1=table1[j]; //读取控制电机转动I/O口表

for(i=0;i&

lt;maichong;i++)

{

display(); //利用显示函数起延时作用,控制电机速度

} //这样也不影响数码管显示,一举两得

}

}

void main()

{

while(1)

{

key();

disp

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。