单片机例程
C = 1; D = 1; }
void SetMotor() {
// if(Speed == 0) return;
MotorDelay=Speed; //调整速度 switch(MotorStep) {
case 0:
if(TIM) // A { A = 0; //0xf1 b = 1; C = 1; D = 1;
MotorStep = 1; TIM=0; } break;
case 1: // AB if(TIM) {
A = 0; //0xf3 b = 0; C = 1; D = 1;
MotorStep = 2; TIM=0; } break;
case 2: //B if(TIM) {
A = 1; b = 0; //0xf2 C = 1;
I Believe I Can Do 31
!
单片机例程
D = 1;
MotorStep = 3; TIM=0; } break;
case 3: //BC if(TIM) {
A = 1; b = 0; C = 0; D = 1;
MotorStep = 4; TIM=0; } break; case 4: //C if(TIM) {
A = 1; b = 1; C = 0; D = 1;
MotorStep = 5; TIM=0; } break; case 5: //CD if(TIM) {
A = 1; b = 1; C = 0; D = 0;
MotorStep = 6; TIM=0; } break; case 6: //D if(TIM) {
//0xf6 //0xf4 //0xfc I Believe I Can Do 32
!
单片机例程
A = 1; b = 1; //0xf8 C = 1; D = 0;
MotorStep = 7; TIM=0; } break; case 7: //DA if(TIM) {
A = 0; b = 1; C = 1; D = 0;
MotorStep = 0; TIM=0; } break; } }
void system_Ini() {
TMOD|= 0x11;
TH0=0xDC; //11.0592M TL0=0x00; IE = 0x8A; TR0 = 1; }
main()
{ system_Ini(); InitMotor(); while(1) { SetMotor(); }
//0xf9 I Believe I Can Do 33
!
单片机例程
}
/************************************************ * * * 定时中断延时 * ************************************************/ void Tzd(void) interrupt 1 {
TH0 = 0xfe; //11.0592 TL0 = 0x33; if( CT++==speed) {TIM=1; CT=0; } }
/*************************************************************************************
* 十九 标题: 步进电机试验三(加减速运行)
*
* *
* 通过本例程了解步进马达使用及驱动程序编写 * *; 单双八拍工作方式: *
*; A-AB-B-BC-C-CD-D-DA (即一个脉冲,转 3.75 度) *
* *
* 请学员一定要消化掉本例程 *
**************************************************************************************/
#include \
void delay();
I Believe I Can Do !
34
单片机例程
//Motor
sbit F1 = P1^0; sbit F2 = P1^1; sbit F3 = P1^2; sbit F4 = P1^3;
unsigned char code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; //反转 unsigned char code FFZ[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; //正转 unsigned int K, rate;
/********************************************************** * * * 步进电机驱动 * ***********************************************************/ void motor_ffw() {
unsigned char i;
for (i=0; i<8; i++) //一个周期转30度 {
P1 = FFW[i]&0x1f; //取数据
delay(); //调节转速 } }
/******************************************** 延时程序
*********************************************/
void delay()
{ unsigned int k,t; t=rate; while(t--) {
for(k=0; k<100; k++) { } } }
/********************************************************
I Believe I Can Do !
35