步进电机控制下位机程序

 #include "STC.H"
// sbit s=P1^0 ;
unsigned?char?dat;?//用于存储单片机接收发送缓冲寄存器SBUF里面的内容
sbit pul=P0^0; //脉冲信号输出,LED0.0可显示状态
sbit dir=P0^1; //方向信号输出,LED0.1可显示状态
sbit ena=P0^2; //使能信号输出,LED0.2可显示状态
sbit S1=P1^4;  //  方向控制 独立按键K5
sbit S2=P1^5;  // 使能控制 独立按键K6




void delay_1ms(unsigned int i) //1MS 延时
{
unsigned int j;
for(;i>0;i--)
for(j=0;j<125;j++)
{;}
}


void delay(unsigned int i)//  us级延时
{   
while(--i);
}




void keyscan()   //键盘扫描
{
 if(S2==0)
 {
  delay_1ms(10);//延时,防抖
   if(S2==0)
 ena=~ena;// 使能改变
 }
  if(S1==0)
 {
 delay_1ms(10);//延时,防抖
   if(S1==0)
 dir=~dir;// 方向改变
 }


}
///
void init_com()
{
TMOD = 0x21;
 TH0 = 0x3c;
 TL0 = 0xb0;
 TH1 = 0xfd;
 TL1 = 0xfd;
 TR1 = 1;
 SM0 = 0;
 SM1 = 1;
 REN = 1;
 EA = 1;
 ES = 1;
 RI = 0;
       ena=1      ;//高电平使能,初始化为低电平。
       //delay(5) ;//使能信号要至少要早于方向信号5us建立
       dir=1 ;//初始化转动方向
       //delay(5)  ;  //因为方向信号要至少要早于脉冲信号5us建立


}


   void main(void)
   {   
   init_com();
/*  while(1)
  {
   
P1=0xf0;
  if(RI==1)
  {
  P0=SBUF;
  RI=0;
  }


// keyscan();  
// delay(5)  ;  //因为方向信号要至少要早于脉冲信号5us建立  
 pul=0;   //pul输出低电平
 delay_1ms(1);   //周期的1/2时间
 pul=1;   //pul 输出高电平
 delay_1ms(1);  //
  
  }*/
while(1)
{


if (RI) //扫描判断是否接收到数据
 { 
    dat = SBUF; //接收数据SBUF赋与dat 
 if(dat==0xFF) //如果PC发送十六进制FF,表示打开或关闭电机

   P1.4=1;//方向不变
   P1.5=1;//启动或关闭电机

  else if(dat==0xEF) //如果PC发送十六进制FF,表示改变电机方向
{
   if(P1.5==1)//先判断电机是否打开
   {
         P1.4=0;//电机反相
    }
}
  RI=0; //RI 清零。
   }


    if(P1.5==1)//先判断电机是否打开
   {
        pul=0;   //pul输出低电平
 delay_1ms(1);   //周期的1/2时间,单位毫秒
 pul=1;   //pul 输出高电平
 delay_1ms(1);  //周期的1/2时间,单位毫秒


    }




}
   
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值