欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
51單片機控制步進電機正反轉和加減速keil源程序
[打印本頁]
作者:
liwen711
時間:
2018-6-11 16:44
標題:
51單片機控制步進電機正反轉和加減速keil源程序
單片機源程序如下:
/***********************************************************************************
* 標題: 步進電機+上位機 控制正反轉和加減速 *
* *
* 通過本例程了解步進馬達使用及驅動程序編寫 *
*; 單雙八拍工作方式: *
*; A-AB-B-BC-C-CD-D-DA *
* * *
**************************************************************************************/
//接線方法:請你一定要看,步進電機杜邦線接方法 步進電機模塊上“-”接到開發板上的GND “+接VCC
//IN1~IN4 分別接到P1.0~P1.3”
#include "reg52.h"
#include <string.h>
void delay(unsigned int t);
//Motor
sbit F1 = P1^0;
sbit F2 = P1^1;
sbit F3 = P1^2;
sbit F4 = P1^3;
unsigned char code FFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; //反轉
unsigned char code FFZ[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe}; //正轉
unsigned char g_Speed = 10; //最慢,1為最快
unsigned char g_State = 0; //0: 停止, 1為正轉,2為反轉
/*協議定義*/
bit startBit = 0; //串口接收開始標志位
bit newLineReceived = 0; //串口一幀協議包接收完成
unsigned char inputString[50]; //接收數據協議
/**********************************************************************
* *
* 步進電機驅動 *
* *
***********************************************************************/
void motor_ffw()
{
unsigned char i;
unsigned int j;
for (j=0; j<64; j++)
{
for (i=0; i<8; i++)
{
if(g_State==1) P1 = FFW[i]&0x1f; //取數據
if(g_State==2) P1 = FFZ[i]&0x1f;
delay(g_Speed); //調節轉速
}
}
}
/******************************************************
*
* 延時程序
*
********************************************************/
void delay(unsigned int t)
{
unsigned int k;
while(t--)
{
for(k=0; k<80; k++)
{ }
}
}
//串口初始化
void ComInit(void)
{
SCON = 0x50; // SCON: 模式1, 8-bit UART, 使能接收
TMOD |= 0x20;
TH1=0xfd; //波特率9600 初值
TL1=0xfd;
TR1= 1;
EA = 1; //開總中斷
ES= 1; //打開串口中斷
}
//串口發送函數
/*void PutString(unsigned char *TXStr)
{
ES=0;
while(*TXStr!=0)
{
SBUF=*TXStr;
while(TI==0);
TI=0;
TXStr++;
}
ES=1;
}*/
void Protocol(void)
{
while (newLineReceived) //協議數據接收完畢一包
{
//判斷是否是51的協議
if(inputString[1] != '5' || inputString[2] != '1')
{
newLineReceived = 0;
memset(inputString, 0x00, sizeof(inputString));
break;
}
//判斷是否是Step motor的協議數據
if(inputString[4] != 'S' && inputString[5] != 'M' && inputString[6] != 'T')
{
newLineReceived = 0;
memset(inputString, 0x00, sizeof(inputString));
break;
}
if(inputString[8] == '1') //加速
{
g_Speed--;
if(g_Speed == 0)
g_Speed = 1;
}
else if(inputString[8] == '2') //減速
{
g_Speed++;
if(g_Speed > 10)
g_Speed = 10;
}
//讀取功能執行
if(inputString[7] == '0') //停止
{
g_State = 0;
newLineReceived = 0;
memset(inputString, 0x00, sizeof(inputString));
break;
}
else if(inputString[7] == '1') //順轉
{
g_State = 1;
newLineReceived = 0;
memset(inputString, 0x00, sizeof(inputString));
break;
}
else if(inputString[7] == '2') //逆轉
{
g_State = 2;
newLineReceived = 0;
memset(inputString, 0x00, sizeof(inputString));
break;
}
newLineReceived = 0;
memset(inputString, 0x00, sizeof(inputString));
}
}
void main()
{
ComInit();
P1 = 0xff;
while(1)
{
if(g_State != 0 )
{
motor_ffw();
}
}
}
/******************************************************************/
/* 串口中斷程序*/
/******************************************************************/
void UART_SER () interrupt 4
{
unsigned char n; //定義臨時變量
static int num = 0;
if(RI) //判斷是接收中斷產生
{
RI = 0; //標志位清零
n = SBUF; //讀入緩沖區的值
//control=n;
if(n ==
)
{
startBit = 1;
num = 0;
}
if(startBit == 1)
{
inputString[num] = n;
num++;
}
if (n == '#')
{
newLineReceived = 1;
startBit = 0;
Protocol();
}
if(num >= 50)
{
num = 0;
startBit = 0;
newLineReceived = 0;
}
}
}
復制代碼
所有資料51hei提供下載:
程序 步進電機.zip
(45.43 KB, 下載次數: 33)
2018-6-11 16:43 上傳
點擊文件名下載附件
所有資料51hei提供下載:
下載積分: 黑幣 -5
作者:
admin
時間:
2018-6-12 01:34
補全原理圖才可獲取積分
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1