?? motor.c
字號(hào):
/******************************************************************/
/*****************************************************************/
/*
/* 步進(jìn)電機(jī)加減速運(yùn)行程序
/* 步進(jìn)電機(jī)啟動(dòng)時(shí),轉(zhuǎn)速由慢到快逐步加速。
/* 步進(jìn)電機(jī)勻速運(yùn)行
/* 步進(jìn)電機(jī)由快到慢逐步減速到停止
/*
/******************************************************************/
#include <reg52.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
sbit addr0 = P1^4;
sbit addr1 = P1^5;
sbit addr2 = P1^6;
sbit addr3 = P1^7;
uchar code FFW[8]={0x0e,0x0c,0x0d,0x09,0x0b,0x03,0x07,0x06};//正轉(zhuǎn)數(shù)組
uchar code REV[8]={0x06,0x07,0x03,0x0b,0x09,0x0d,0x0c,0x0e};//反轉(zhuǎn)數(shù)組
uchar rate ;
/********************************************************/
/*
/* 延時(shí)
/* 11.0592MHz時(shí)鐘,
/*
/********************************************************/
void delay()
{
uchar k;
uint s;
k = rate;
do
{
for(s = 0 ; s <100 ; s++) ;
}while(--k);
}
void delay2(uchar k)
{
uchar s;
for(s = 0 ; s <k ; s++) ;
}
/********************************************************/
/*
/*步進(jìn)電機(jī)正轉(zhuǎn)
/*
/********************************************************/
void motor_ffw()
{
uchar i;
for (i=0; i<8; i++) //一個(gè)周期轉(zhuǎn)30度
{
P0 = FFW[i];//取數(shù)據(jù)
addr0 = 1;
addr1 = 0;
addr2 = 1;
addr3 = 1;
addr3 = 0;
delay(); //調(diào)節(jié)轉(zhuǎn)速
}
}
/********************************************************/
/*
/*步進(jìn)電機(jī)反轉(zhuǎn)
/*
/********************************************************/
void motor_rev()
{
uchar i;
for (i=0; i<8; i++) //一個(gè)周期轉(zhuǎn)30度
{
P0 = REV[i]; //取數(shù)據(jù)
addr0 = 1;
addr1 = 0;
addr2 = 1;
addr3 = 1;
addr3 = 0;
delay(); //調(diào)節(jié)轉(zhuǎn)速
}
}
/********************************************************
*
*步進(jìn)電機(jī)運(yùn)行
*
*********************************************************/
void motor_turn()
{
uchar x;
rate=0x30;
x=0xf0;
do
{
motor_ffw(); //正轉(zhuǎn)加速
rate--;
}while(rate!=0x0a);
do
{
motor_ffw(); //正轉(zhuǎn)勻速
x--;
}while(x!=0x01);
do
{
motor_ffw(); //正轉(zhuǎn)減速
rate++;
}while(rate!=0x30);
do
{
motor_rev(); //反轉(zhuǎn)加速
rate--;
}while(rate!=0x0a);
do
{
motor_rev(); //反轉(zhuǎn)勻速
x--;
}while(x!=0x01);
do
{
motor_rev(); //反轉(zhuǎn)減速
rate++;
}while(rate!=0x30);
}
/********************************************************
*
* 主程序
*
*********************************************************/
main()
{
P1=0xf0;
while(1)
{
P0 = 0x00;//ULN2003輸出高電平
addr0 = 1;
addr1 = 0;
addr2 = 1;
addr3 = 1;
addr3 = 0;
delay2(255);
motor_turn();
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -