
// 控制线接到MCU的P1口 独立键盘的接口接到MCU的P2口。
// KEY0- 右运动一步; KEY1- 左运动一步;
// KEY2- 右运动200步; KEY3- 左运动200步
// KEY4- 右运动1000步;
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

sbit en=P1^0;                  // 定义P1.0口
sbit rst=P1^1;                 // 定义P1.1口
sbit ccw=P1^2;                 // 定义P1.2口
sbit hf=P1^3;                  // 定义P1.3口
sbit clk=P1^4;                 // 定义P1.4口
sbit k1=P1^5;                  // 定义P1.5口
sbit k2=P1^6;                  // 定义P1.6口


void ShortDelay(void)
{ uchar x,y;
  for(x=0;x<5;x++)
     for(y=0;y<125;y++)
	      _nop_();
  return;
}


void outclk(uint a)
{  uint i,j;

 while(a--)
    { en=1;                  // 定义P1.0口
      rst=1;                 // 定义P1.1口 
      //if((k1&k2)!=0)         // K1，K2限位置判断
       // {
		clk=1;
         for(i=150;i>0;i--)	   //200
         for(j=150;j>0;j--);	   //200
         clk=0;  
       // }
     // else {rst=1;en=0;}  
    }   

}

uchar  key(void)
{uchar key_num;

   if( ( P2 & 0x3f) != 0x3f )        //判断按键
   {
       ShortDelay();                //消除抖动
       if( ( P2 & 0x3f ) != 0x3f )
	   {
          
          switch ( P2 & 0x3f )             //将按键码转换成键值
          {  
             case  0x3e: return  key_num=01;  
             case  0x3d: return  key_num=02;
             case  0x3b: return  key_num=03; 
             case  0x37: return  key_num=04;
             case  0x2f: return  key_num=05;
             case  0x1f: return  key_num=06;
             default :   return  key_num=00;
          }
	   }
	  
   }
   return key_num;
}


void main(void)
{ uchar b;

while(1)
 {
  
   b= key();
   switch(b) 
      {                //4步走1CM设定走5Cm 半应该是200的为了调整误差所以少4步 （10CM为多8步）
        case 00:rst=1;break;//0
        case 01:ccw=1; outclk(1);break;//1    右运动1步
        case 02:ccw=0; outclk(1);break;//2    左运动1步
        case 03:ccw=1; outclk(200);break;//3	  右运动1CM 
        case 04:ccw=0; outclk(200);break;//4   左运动1CM
        case 05:ccw=1; outclk(1000);break;//5   右运动5CM
        //case 06:ccw=0; outclk(1000);break;//6  左运动5CM
        default:break;
	  }
 }
}
