⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.c

📁 基于51单片机控制步进电机的程序
💻 C
字号:
#include<reg51.h>
#include<key.h> 
#include<led.h>
#include<start.h>   
void count(unsigned char x,unsigned char y)	//x代表对那个变量的修改,y是数字的值
{
	if(x==1)
	{ 
	    if(czhengbujin>99) return;//已经设置完三位数字
		czhengbujin=czhengbujin*10+y;
		if(czhengbujin==0) return;
		a++;
		show(a,b,c,d);
	}

	else if(x==2)
	{  
	    if(cfanbujin>99)  return;
		cfanbujin=cfanbujin*10+y;
		if(cfanbujin==0) return;
		b++;
	 	show(a,b,c,d);
	}
	else if(x==3)
	{ 
	    if(czhengjuli>9) return;
	    czhengjuli=czhengjuli*10+y;
		c++;
		if(czhengjuli==0) return;
		show(a,b,c,d);
	}

	else if(x==4)
	{ 
	    if(cfanjuli>9) return;
		cfanjuli=cfanjuli*10+y;
		if(cfanjuli==0) return;
		d++;
		show(a,b,c,d);		 
	}
	else if(x==5)
	{
	    if(csudu>0) return;
	    csudu=y;
	    if(csudu==0) return;
	    show(a,b,c,d);
	}

}

void suduset(void)
{
    unsigned char keyword9;
	unsigned char start=0;
	P3_6=0;
	while(1)
    {
	  keyword9 =keyin();
	  switch(keyword9)
      { 
	    case 0x41: count(5,1);break;
	    case 0x21: count(5,2);break;
	    case 0x11: count(5,3);break;
	    case 0x82: count(5,4);break;//数字的设置
	    case 0x42: count(5,5);break;
	    case 0x22: count(5,6);break;
	    case 0x12: count(5,7);break;
	    case 0x84: count(5,8);break;
	    case 0x44: count(5,9);break; 
		case 0x18: start=1; break;   
	    default:break;
	  }
	  if(start==1)  break;
    }
    startset();
}

void delay(void) //去抖处理延迟
{
   unsigned int i;
   for(i=12500;i>0;i--);

}

unsigned char keyscan(void)	 //按键扫描
{
   unsigned char b,c,d,m;
   do
   {
  
      for(c=0;c<=3;c++)
      { 
	      if(c==0)
		  { 
			 P1=0xef;
		  }
		  
		  else if(c==1)
		  {
			 P1=0xdf;
		  }
		  
		  else if(c==2)
		  {
			 P1=0xbf;
		  }
		 
		  else if(c==3)
		  {	 
			 P1=0x7f;

		  }
		  m=P1;
		  d=~(m)&0x0f;
		  b=~(m)&0xff;
		  if(d!=0) return(b); 
      }   
   }
   while(d==0);
}

unsigned char keyin(void)	 //扫描确定那个键按下,做了按键去抖处理
{
   unsigned char t;
   do
   {
     t=keyscan();
	 delay();
   }
   while(t!=keyscan());
   return t;
}

void first(void)
{
    unsigned char keyword1;
	keyword1 =keyin();
	switch(keyword1)
	{
	case 0x24:second_0();    break;	//正转步数
    case 0x14:second_1();    break;	//反转步数
    case 0x88:second_2();    break;	//正转距离
	case 0x48:second_3();    break;	//反转距离
	default:break;
	}					  

}




void second_0(void)	 //正转步数设置 
{  
   
   unsigned char keyword2=0; //获得按键信息
   unsigned char fanzhuanbegin=0;//按下反转设置键标志位
   unsigned char sudu=0;		//按下速度键标志位
   P3_2=0;
   if(fanbujin==0)//在此之前并未设置反转
   {  
     zhengbujin=1;//设置正传优先标志位
     while(1)
     {
	    keyword2 =keyin();
	    switch(keyword2)
        {
		case 0x81: count(1,0);break;
	    case 0x41: count(1,1);break;
	    case 0x21: count(1,2);break;
	    case 0x11: count(1,3);break;
	    case 0x82: count(1,4);break;//数字的设置
	    case 0x42: count(1,5);break;
	    case 0x22: count(1,6);break;
	    case 0x12: count(1,7);break;
	    case 0x84: count(1,8);break;
	    case 0x44: count(1,9);break;
        case 0x14: fanzhuanbegin=1; break;	//反转步数
	    case 0x28: sudu=1;break;           //只进行正转设置,开始设置速度      
	    default:break;
	    }
		if (sudu==1||fanzhuanbegin==1) break;
      }
      if (fanzhuanbegin==1) second_1();
      else if(sudu==1) suduset();
    }
	
	
	
	
	
	else if(fanbujin==1) //已经设置好反转了,先在开始设置正传
	{
     while(1)
     {
	    keyword2 =keyin();
	    switch(keyword2)
        {
		case 0x81: count(1,0);break;
	    case 0x41: count(1,1);break;
	    case 0x21: count(1,2);break;
	    case 0x11: count(1,3);break;
	    case 0x82: count(1,4);break;
	    case 0x42: count(1,5);break; //数字设置
	    case 0x22: count(1,6);break;
	    case 0x12: count(1,7);break;
	    case 0x84: count(1,8);break;
	    case 0x44: count(1,9);break;
	    case 0x28: sudu=1;break;       //正反都以设置完成,设置速度      
	    default:break;
	    }
		if (sudu==1) break;
	
      }
      suduset();
     
	} 
}




///////////////////////////////////////////////////////////////////////////
void second_1(void)//反转步数设置
{
 
   unsigned char keyword3; //获得按键信息
   unsigned char zhengzhuanbegin=0;//按下正转设置键标志位
   unsigned char sudu=0;		//按下速度键标志位
   P3_3=0;
   if(zhengbujin==0)//先进行的是反转的设置
   {  
     fanbujin=1;//设置反传优先标志位
     while(1)
     {
	  keyword3 =keyin();
	    switch(keyword3)
        {
		case 0x81: count(2,0);break;
	    case 0x41: count(2,1);break;
	    case 0x21: count(2,2);break;
	    case 0x11: count(2,3);break;
	    case 0x82: count(2,4);break;//数字的设置
	    case 0x42: count(2,5);break;
	    case 0x22: count(2,6);break;
	    case 0x12: count(2,7);break;
	    case 0x84: count(2,8);break;
	    case 0x44: count(2,9);break;
        case 0x24: zhengzhuanbegin=1; break;	//正转步数
	    case 0x28: sudu=1;break;           //只进行反转设置,开始设置速度      
	    default:break;
	    }
		if (sudu==1) break;
		else if(zhengzhuanbegin==1) break;
      }
      if (zhengzhuanbegin==1) second_0();
      else if(sudu==1) suduset();
    }
	
	
	else if(zhengbujin==1) //已经设置好正转了,正转优先进行
	{
     while(1)
     {
	  keyword3=keyin();
	    switch(keyword3)
        {
		case 0x81: count(2,0);break;
	    case 0x41: count(2,1);break;
	    case 0x21: count(2,2);break;
	    case 0x11: count(2,3);break;
	    case 0x82: count(2,4);break;
	    case 0x42: count(2,5);break; //数字设置
	    case 0x22: count(2,6);break;
	    case 0x12: count(2,7);break;
	    case 0x84: count(2,8);break;
	    case 0x44: count(2,9);break;
	    case 0x28: sudu=1;break;       //正反都以设置完成,设置速度      
	    default:break;
	    }
		if (sudu==1) break;
	
      }
      suduset();
     
	} 
}
////////////////////////////////////////////////////////////////////////////////////////
void second_2(void)//正转距离设置
{

   unsigned char keyword4; //获得按键信息
   unsigned char fanzhuanbegin=0;//按下反转设置键标志位
   unsigned char sudu=0;		//按下速度键标志位 
   P3_4=0;
   if(fanjuli==0)//先进行的是正转的设置
   {  
     zhengjuli=1;//设置正传优先标志位
     while(1)
     {
	  keyword4 =keyin();
	    switch(keyword4)
        {
		case 0x81: count(3,0);break;
	    case 0x41: count(3,1);break;
	    case 0x21: count(3,2);break;
	    case 0x11: count(3,3);break;
	    case 0x82: count(3,4);break;//数字的设置
	    case 0x42: count(3,5);break;
	    case 0x22: count(3,6);break;
	    case 0x12: count(3,7);break;
	    case 0x84: count(3,8);break;
	    case 0x44: count(3,9);break;
        case 0x48: fanzhuanbegin=1; break;	//反转设置键
	    case 0x28: sudu=1;break;           //只进行正转设置,开始设置速度      
	    default:break;
	    }
		if (sudu==1) break;
		else if(fanzhuanbegin==1) break;
      }
      if (fanzhuanbegin==1) second_3();
      else if(sudu==1) suduset();
    }
	else if(fanjuli==1) //已经设置好反转了,反转优先进行
	{
     while(1)
     {
	  keyword4 =keyin();
	    switch(keyword4)
        {
		case 0x81: count(3,0);break;
	    case 0x41: count(3,1);break;
	    case 0x21: count(3,2);break;
	    case 0x11: count(3,3);break;
	    case 0x82: count(3,4);break;
	    case 0x42: count(3,5);break; //数字设置
	    case 0x22: count(3,6);break;
	    case 0x12: count(3,7);break;
	    case 0x84: count(3,8);break;
	    case 0x44: count(3,9);break;
	    case 0x28: sudu=1;break;       //正反都以设置完成,设置速度      
	    default:break;
	    }
		if (sudu==1) break;
	
      }
      suduset();
     
	} 


}
////////////////////////////////////////////////////////////////////////////////////////
void second_3(void)	//反转距离设置
{
   
   unsigned char keyword5; //获得按键信息
   unsigned char zhengzhuanbegin=0;//按下反转设置键标志位
   unsigned char sudu=0;		//按下速度键标志位
   P3_5=0;
   if(zhengjuli==0)//先进行的是反转的设置
   {  
     fanjuli=1;//设置反传优先标志位
     while(1)
     {
	  keyword5 =keyin();
	    switch(keyword5)
        {
		case 0x81: count(4,0);break;
	    case 0x41: count(4,1);break;
	    case 0x21: count(4,2);break;
	    case 0x11: count(4,3);break;
	    case 0x82: count(4,4);break;//数字的设置
	    case 0x42: count(4,5);break;
	    case 0x22: count(4,6);break;
	    case 0x12: count(4,7);break;
	    case 0x84: count(4,8);break;
	    case 0x44: count(4,9);break;
        case 0x88: zhengzhuanbegin=1; break;	//反转设置键
	    case 0x28: sudu=1;break;           //只进行正转设置,开始设置速度      
	    default:break;
	    }
		if (sudu==1) break;
		else if(zhengzhuanbegin==1) break;
      }
      if (zhengzhuanbegin==1) second_2();
      else if(sudu==1) suduset();
    }
	else if(zhengjuli==1) //已经设置好正转了,正转优先进行
	{
     while(1)
     {
	  keyword5 =keyin();
	    switch(keyword5)
        {
		case 0x81: count(4,0);break;
	    case 0x41: count(4,1);break;
	    case 0x21: count(4,2);break;
	    case 0x11: count(4,3);break;
	    case 0x82: count(4,4);break;
	    case 0x42: count(4,5);break; //数字设置
	    case 0x22: count(4,6);break;
	    case 0x12: count(4,7);break;
	    case 0x84: count(4,8);break;
	    case 0x44: count(4,9);break;
	    case 0x28: sudu=1;break;       //正反都以设置完成,设置速度      
	    default:break;
	    }
		if (sudu==1)  break;	
      }
      suduset();
     
	} 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -