从机程序:
#include<reg51.h>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define MotorData P2 //步进电机控制接口定义
sbit P10=P1^0; //前进显示
sbit P11=P1^1; //后退显示
sbit P12=P1^2; //左转显示
sbit P13=P1^3; //右转显示
sbit P24=P2^4; //
sbit P25=P2^5; //
sbit P26=P2^6; //
sbit P27=P2^7; //
uchar code turn[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90}; //旋转编码
/********************************************************************
函数功能:延时x毫秒函数
入口参数: x
出口参数:
********************************************************************/
void delay(uchar x) //设晶体振荡器的频率为12MHz
{
uchar k;
while(x--) //延时大约x毫秒
for(k=0;k<125;k++){}
}
/********************************************************************
函数功能:定时器及串口初始化函数
入口参数:
出口参数:
********************************************************************/
void Timer_init() {
TMOD = 0x20; //定时器1工作方式2(8位自动重装定时器);定时器0工作方式1(16位计数器)
TH1 = 0xf4; //波特率2400b/s。
TL1 = 0xf4; //定时器初值必须同时装入TH0和TL0
PCON = 0; //波特率不加倍
SCON = 0X50; //串口方式1(10位帧,其中8位数据,异步)。TI和RI清零,允许接收
TR1 = 1; //启动T1
}
/********************************************************************
函数功能:接收一个字节
入口参数:
出口参数: dat
********************************************************************/
uchar Get(void)
{
uchar dat;
while(RI==0);
RI=0;
dat=SBUF;
return dat;
}
/********************************************************************
函数功能:顺时针转动(前进)
入口参数:
出口参数:
********************************************************************/
void MotorCW(void)
{
uchar i;
for(i=0;i<8;i++)
{
MotorData=turn[i];
delay(30); //转速调节
}
}
/********************************************************************
函数功能:逆时针转动(后退)
入口参数:
出口参数:
********************************************************************/
void MotorCCW(void)
{
uchar i;
for(i=0;i<8;i++)
{
MotorData=turn[8-i];
delay(30); //转速调节
}
}
/********************************************************************
函数功能:主函数
入口参数:
出口参数:
********************************************************************/
void main(void)
{
uchar Temp;
Timer_init();
while(1)
{
P1=0xff;
Temp=Get();
switch(Temp)
{
case 1: {P10=0; MotorCW();} break; //前进直行
case 2: {P11=0; MotorCCW();} break; //后退直行
case 3: {P10=0; P12=0; MotorCW();} break; //前进左转
case 4: {P10=0; P13=0; MotorCW();} break; //前进右转
case 5: {P11=0; P12=0; MotorCCW();} break; //后退左转
case 6: {P11=0; P13=0; MotorCCW();} break; //后退右转
}
}
} |