/***************************************************************
* 实 验 名 :步进电机实验
* 实验说明 :电机启动、停止、正转、反转
* 实验平台 :51单片机开发板
* 连接方式 :pulse接P10 DIR接P11 KYE1接P20 KYE2接P21 KYE3接P22 KYE4接P23 ENABLE接P12 MS1-3接P13-P14
* 注 意 :本例程使用了中断定时器,中断介绍会在下一实验中说明
****************************************************************************/
#include
#include
#define FOSC 11059200L //晶振设置,默认使用11.0592M Hz
//#define FOSC 12000000L //晶振设置,使用12M Hz
//#define FOSC 24000000L //晶振设置,使用24M Hz
#define TIME_MS 1 //设定定时时间 ms ,在11.0592M晶振下,不易超过60ms
//IO接口定义
sbit pulse = P1^0;//脉冲信号
sbit Dir = P1^1; //正反转
sbit EN = P1^2;
sbit MS1 = P1^3;
sbit MS2 = P1^4;
sbit MS3 = P1^5;
sbit KEY1 = P2^0; //启动
sbit KEY2 = P2^1; //停止
sbit KEY3 = P2^2; //正转
sbit KEY4 = P2^3; //反转
//全局变量定义
unsigned char count=0;
/*******************************************************************************
* 函 数 名 :Delayms
* 函数功能 :实现 ms级的延时
* 输 入 :ms
* 输 出 :无
*******************************************************************************/
void Delayms(unsigned int ms)
{
unsigned int i,j;
for(i=0;i
#if FOSC == 11059200L
for(j=0;j<114;j++);
#elif FOSC == 12000000L
for(j=0;j<123;j++);
#elif FOSC == 24000000L
for(j=0;j<249;j++);
#else
for(j=0;j<114;j++);
#endif
}
/*******************************************************************************
* 函 数 名 :Timer0Init
* 函数功能 :定时器0初始化
* 输 入 :无
* 输 出 :无
*******************************************************************************/
void Timer0Init()
{
TMOD=0x01; //设置定时器0工作方式为1
TH0=(65536-FOSC/12/1000*TIME_MS)/256;
TL0=(65536-FOSC/12/1000*TIME_MS)%256;
ET0=1; //开启定时器0中断
// TR0=1; //开启定时器
EA=1; //打开总中断
}
/*******************************************************************************
* 函 数 名 :main
* 函数功能 :主函数
* 输 入 :无
* 输 出 :无
*******************************************************************************/
void main()
{
Timer0Init();
EN=0;
MS1=0;
MS2=0;
MS3=0;
while(1)
{
if(KEY1==0) //判断是否按下键盘
{
Delayms(10); //延时,软件去干扰
if(KEY1==0) //确认按键按下
{
TR0=1;
}
while(KEY1==0);//按键锁定,每按一次count只加1.
}
if(KEY2==0) //判断是否按下键盘
{
Delayms(10); //延时,软件去干扰
if(KEY2==0) //确认按键按下
{
TR0=0;
}
while(KEY2==0);//按键锁定,每按一次count只加1.
}
if(KEY3==0) //判断是否按下键盘
{
Delayms(10); //延时,软件去干扰
if(KEY3==0) //确认按键按下
{
Dir=0;
}
while(KEY3==0);//按键锁定,每按一次count只加1.
}
if(KEY4==0) //判断是否按下键盘
{
Delayms(10); //延时,软件去干扰
if(KEY4==0) //确认按键按下
{
Dir=1;
}
while(KEY4==0);//按键锁定,每按一次count只加1.
}
}
}
/*******************************************************************************
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………