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

📄 lcd1602-motor-key.c

📁 利用上位机pc+key控制步进电机运行,停止,加速,减速等一系列功能应用.
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
/********************************************************/
void  motor_DR()
  {
       if(direction==1)           //正转方向标志
        { for(m=0;m<2;m++)
          { 
		    lcd_pos(0x0c+m);      //显示方向符号
            lcd_wdat(0x3e);
		   }
		 }
  }

/********************************************************
/*
/* 显示运行状态
/*
/********************************************************/
void  motor_RUN()
 {
      if(on_off==1)
	   { 
        if(j==1)    //判断运行键是否重复
         {
         TR0=1;
         TR1=0;
         } 
	     lcd_pos(0);     //设置显示位置为第一行的第1个字符
         m = 0;
         while(cdis5[m] != '\0')
          { lcd_wdat(cdis5[m]);      //RUNNING
            m++;   }
            motor_DR();              //
	   }  
      else  
	   { 
         TR0=0; TR1=0;
         P1 =0xf0; 
		 lcd_pos(0);     //设置显示位置为第一行的第1个字符
         m = 0;
         while(cdis3[m] != '\0')
          { lcd_wdat(cdis3[m]);      //STOP
            m++;   }
            motor_DR();              //
         }
  }
void Reta(uchar rate)
 {
   switch(rate)
   {
    case(0):  
             if(k<=7) { if(r==255) { r=0; k++; } r++; }
             else { if(r==110) { r=0;  k=0; TR1=1; TR0=0; } r++; }
             break;
    case(1): 
             if(k<=7) { if(r==255) { r=0; k++; } r++; }
             else { if(r==100) { r=0; k=0; TR1=1; TR0=0; } r++; }
             break;
    case(2): 
             if(k<=7) { if(r==255) { r=0; k++; } r++; }
             else { if(r==70) { r=0; k=0; TR1=1; TR0=0; } r++;  }
             break;
    case(3): 
             if(k<=7) { if(r==255) { r=0; k++; } r++; }
             else { if(r==15) { r=0; k=0; TR1=1; TR0=0; } r++; }
             break;
    case(4): 
             if(k<=6) { if(r==255) { r=0; k++; } r++; }
             else { if(r==230) { r=0; k=0; TR1=1; TR0=0; } r++; }
             break;
    case(5): 
             if(k<=6) { if(r==255) { r=0; k++; } r++; }
             else { if(r==150) { r=0; k=0; TR1=1; TR0=0; } r++; }
             break;
    case(6): 
             if(k<=6) { if(r==255) { r=0; k++; } r++; }
             else { if(r==150) { r=0; k=0; TR1=1; TR0=0; } r++; }
             break;
    case(7): 
             if(k<=6) { if(r==255) { r=0; k++; } r++; }
             else { if(r==150) { r=0; k=0; TR1=1; TR0=0; } r++; }
             break;
    case(8): 
             if(k<=6) { if(r==255) { r=0; k++; } r++; }
             else { if(r==150) { r=0; k=0; TR1=1; TR0=0; } r++; }
             break;
    case(9): 
             if(k<=5) { if(r==255) { r=0; k++; } r++; }
             else { if(r==200) { r=0; k=0; TR1=1; TR0=0; } r++; }
             break;
    case(10): 
             if(k<=4) { if(r==255) { r=0; k++; } r++; }
             else { if(r==255) { r=0; k=0; TR1=1; TR0=0; } r++; }
             break;
    case(11): 
             if(k<=3) { if(r==255) { r=0; k++; } r++; }
             else { if(r==255) { r=0; k=0; TR1=1; TR0=0; } r++; }
             break;
    case(12):
             if(k==2) { if(r==255) { r=0; k++; } r++; }
             else { if(r==255) {r=0; k=0;TR1=1;TR0=0; } r++;}
             break;
    case(13):
             if(k==1) { if(r==255) { r=0; k++; } r++; }
             else { if(r==255) {r=0; k=0;TR1=1;TR0=0; } r++;}
             break;
    case(14):
             if(k==0) { if(r==255) { r=0; k++; } r++; }
             else { if(r==255) {r=0; k=0;TR1=1;TR0=0; } r++;}
             break;
    default: 
             if(k==0) { if(r==255) { r=0; k++; } r++; }
             else { if(r==255) {r=0; k=0;TR1=1;TR0=0; } r++;}
             break;

   }
 }

/********************************************************
*                                                       
*  主程序                                               
*                                                      
*********************************************************/ 
main()
 { 
         LCD_init_DIS();
		
		 P1   = 0xf0; 
		 TMOD = 0x11;       //T0和T1定时方式1
         TL0  = 0xff;
         TH0  = 0xff; 
         TL1  = 0xff;
         TH1  = 0xff; 
		 EA   = 1;        // 开总中断
		 ET0  = 1;        // 开T0中断	
         ET1  = 1;        // 开T1中断
		
   while(1)
    {  
  if(off_on==1)
   {
     j=1;
	if(K4==0)
	{
     while(K4==0)
	 {
	 on_off=0;
	 motor_RUN();
	 on_off=1;
     j=1;
	 }
	 motor_RUN();
	}
   }

      if(K5==0)			  //停
	   {
	     beep();
 		 delay(100);      
	     while(K5==0);       //等待键释放
 		 delay(100);
		 off_on=0;      
	     on_off=0;  
		 o=1;
         BEEP=1;      
		 motor_RUN();
         j=1;                 //重复键值1    表示无重复
        }   //K1 end
/********************************************************/
      if(K6==0)    			 //运行
       {
	     beep();
 		 delay(100);      
	     while(K6==0); 
 		 delay(100); 
         BEEP=1; 
		 off_on=1;    
	     on_off=1;       
         motor_RUN();
         l=3;                 //0起步加速
         j++;                //使J>1  产生重复 
		 o=0;
	   } //K2  end
/********************************************************/
        if(K7==0)    		 //减速
      {
	     beep();
 		 delay(100);      
         while(K7==0); 
		 delay(100);      
		 if(rate>0)
		  { 
		    rate--;
			snum=(rr+1-rate) * dd;
            l=0;                    //减速标志
		  }
      }//K3 end

/********************************************************/
        if(K8==0)    		 //加速
       {
	     beep();
		 delay(100);      
         while(K8==0); 
		 delay(100);            
		 if(rate<rr)
		  { 
		    rate++;
			snum=(rr+1-rate) * dd;
            l=1;                     //加速标志
		  }
		} //K4 end
    
/********************************************************/
     if(o==0)
	  {
	  if(K9==0)			  //停 PC控制
	   {
		 delay(10); 
		 off_on=0;     
	     on_off=0;  
 		 delay(10);
         BEEP=0;      
        motor_RUN();
        j=1;
        }
	  }   //K9 end
     data_dis();
	}  // while(1) end
 }  //main end

/********************************************************/
/*
/*  定时器 0 中断 
/*
/********************************************************/

void  motor_onoff()  interrupt  1  
 {   
//   if(l==3)
//    {  	    
     TH0=-9+k; 
     TL0=-255+r; 
     Reta(rate);    
     P1_0 = !P1_0;
//    }

} 

/********************************************************/
 void motor() interrupt 3
  {
   switch(rate)
   {
    case(0):  TH1=-1; TL1=-135; break;
    case(1):  TH1=-1; TL1=-150; break;
    case(2):  TH1=-1; TL1=-180; break;
    case(3):  TH1=-1; TL1=-200; break;
    case(4):  TH1=-1; TL1=-230;  break;
    case(5):  TH1=-2; TL1=-15; break;
    case(6):  TH1=-2; TL1=-60; break;
    case(7):  TH1=-2; TL1=-110; break;
    case(8):  TH1=-2; TL1=-170; break;
    case(9):  TH1=-2; TL1=-250; break;
    case(10): TH1=-3; TL1=-80; break;
    case(11): TH1=-3; TL1=-150; break;
    case(12): TH1=-3; TL1=-250; break;
    case(13): TH1=-4; TL1=-250; break;
    case(14): TH1=-5; TL1=-250; break;
    case(15): TH1=-6; TL1=-250; break;
    case(16): TH1=-7; TL1=-250; break;
    case(17): TH1=-8; TL1=-250; break;
    case(18): TH1=-9; TL1=-250; break;
    case(19): TH1=-10; TL1=-250; break;
    case(20): TH1=-11; TL1=-250; break;
    default: TH1=-8; TL1=-255; break;
   }
   P1_0 = !P1_0;
  }

⌨️ 快捷键说明

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