新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > AT89S52控制混合式步進電機 C程序

AT89S52控制混合式步進電機 C程序

作者: 時間:2016-11-22 來源:網(wǎng)絡(luò) 收藏
#include<uart.h>//包含串口通信頭文件(里面含有reg52.h)

#include//包含printf頭文件
#define uint unsigned int
#define uchar unsigned char

本文引用地址:http://butianyuan.cn/article/201611/320052.htm

sbit cp = P2^0;//脈沖輸入端
sbit dir = P2^1;//方向控制端
sbit free = P2^2;//脫機控制端,一般接高即可

sbit jia_su = P1^0;//加速鍵key1聲明
sbit jian_su = P1^1;//減速鍵key2聲明
sbit fang_xiang = P1^2;//切換方向鍵key3聲明
sbit ting = P1^3;//停止鍵key4聲明
uint num;
void uart_Init();//串口初始化子函數(shù)聲明

void delay(uint z)//ms子函數(shù)
{
uint x,y;
for(x = 0;xfor(y = 0;y<120;y++);
}

void delay1(uint z)//電機延時子函數(shù)us級
{
uint x;
for(x = 0;x
}

void init()//初始化電機、串口子函數(shù)
{
num = 2;
dir = 1;
free = 1;
uart_Init();
}

void key_scan()//鍵盤控制子函數(shù)
{
if(jia_su == 0)//判斷有加速鍵按下
{
delay(5);//延時消抖
if(jia_su == 0)//再次判斷有加速鍵按下
{
num++;//num(代表電機轉(zhuǎn)速)增加
if(num>4)
{num=4;}
while(!jia_su);//松手檢測
delay(5);
while(!jia_su);
printf("num = %dn",num);//通過串口查看num值
}
}
if(jian_su == 0)//判斷有減速鍵按下
{
delay(5);//延時消抖
if(jian_su == 0)//再次判斷有減速鍵按下
{
num--;//num(代表電機轉(zhuǎn)速)減小
if(num<1)
{num=0;}
while(!jian_su);//松手檢測
delay(5);
while(!jian_su);
printf("num = %dn",num);//通過串口查看num值
}
}
if(fang_xiang ==0)//判斷是否有方向切換鍵按下
{
delay(5);//延時消抖
if(fang_xiang == 0)
{
dir =~dir;//方向改變
while(!fang_xiang);//松手檢測
delay(5);
while(!fang_xiang);
printf("dir = %dn",dir);
}
}
if(ting ==0)//判斷是否有停止鍵按下
{
delay(5);//延時消抖
if(ting == 0)
{
num = 0;//停止
while(!ting);//松手檢測
delay(5);
while(!ting);
}
}

switch(num)
{
case 0: cp = 1; break;//電機停止
case 1: //以低速轉(zhuǎn)動
{


cp = 1;
delay1(20);
cp = 0;
delay1(20);

}
break;

case 2: //以中速轉(zhuǎn)動
{


cp = 1;
delay1(15);
cp = 0;
delay1(15);

}
break;

case 3: //以高速轉(zhuǎn)動
{


cp = 1;
delay1(10);
cp = 0;
delay1(10);

}
break;

case 4: //以更高速轉(zhuǎn)動
{


cp = 1;
delay1(5);
cp = 0;
delay1(5);

}
break;
}

}
void main()
{
init();//調(diào)用初始化子函數(shù)
while(1)
{
key_scan();//不停鍵盤掃描
}

}



關(guān)鍵詞: AT89S52控制混合式步進電

評論


技術(shù)專區(qū)

關(guān)閉