從機程序:
#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; //后退右轉
}
}
} |