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

📄 motor-key.c

📁 自动报警、lcd1602、键控、pc控制步进电机c51源码89s52最终完善版
💻 C
📖 第 1 页 / 共 2 页
字号:
		    lcd_pos(0x0c+m);      //显示方向符号
            lcd_wdat(0x3e);
		   }
		 }
  }

/********************************************************
/*
/* 显示运行状态
/*
/********************************************************/
void  motor_RUN()
 {
      if(on_off==1)	 //运行停止标志: 1 表示运行  0 表示停止
	   { 
        if(j==1)    //判断运行键是否重复	,j=1表示不重复并加速启动	,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 =0x80; 
		 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()
 { 
         P0   = 0x7f;
		 P1   = 0x80; 
		 P2   = 0xf8;
		 P3   = 0x80;

         LCD_init_DIS();
		

		 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)	 //实时控制标志 0:屏蔽实时控制键	 1:实时控制键
   {
    j=1;		  //预设 键值不重复
	if(K1==0)	  //判断实时控制运行停止键 高电平 1 停 低电平 0 运行
	{
     while(K1==0)
	 {
	  on_off=0;	  //预设运行状态   停	止
 	  motor_RUN();
	  on_off=1;	  //预设运行状态   运行
      j=1;		  //预设 键值不重复
	  }
	 motor_RUN();
 	 }
    }

/********************************************************/
        if(K2==0)    		 //加速
       {
//	     beep();
		 delay(100);      
         while(K2==0); 
		 delay(100);            
		 if(rate<rr)
		  { 
		    rate++;
			snum=(rr+1-rate) * dd;
		  }
		} 
    
/********************************************************/
        if(K3==0)    		 //减速
      {
//	     beep();
 		 delay(100);      
         while(K3==0); 
		 delay(100);      
		 if(rate>0)
		  { 
		    rate--;
			snum=(rr+1-rate) * dd;
		  }
      }

/********************************************************/
      if(K4==0)    			 //运行
       {
//	     beep();
 		 delay(100);      
	     while(K4==0); 
 		 delay(100); 
         BEEP=1; 
		 off_on=1;    
	     on_off=1;       
         motor_RUN();
         j++;                //使J>1  产生重复 
		 o=0;				//pc控制状态 启用
	   } 

 /********************************************************/
     if(K5==0)			  //停
	   {
//	     beep();
 		 delay(100);      
	     while(K5==0);       //等待键释放
 		 delay(100);
		 off_on=0;      
	     on_off=0;  
		 o=1;			//屏蔽pc控制
         BEEP=1;      	// 停止报警
		 motor_RUN();
         j=1;                 //重复键值1    表示无重复
        }   

/********************************************************/
     if(o==0) //0状态 :Pc控制生效   1状态:屏蔽pc控制
	  {
	  if(K6==0)			  // PC控制键  停  
	   {
//		 delay(10); 
		 off_on=0;     
	     on_off=0;  
// 		 delay(10);
         BEEP=0;       //报警
        motor_RUN();
        j=1;
        }
	  }   

 /********************************************************/
    data_dis();
	}  // while(1) end
 }  //main end

/********************************************************/
/*
/*  定时器 1 中断 
/*
/********************************************************/

void  motor_onoff()  interrupt  1  
 {   
     TH0=-9+k; 
     TL0=-255+1; 
     Reta(rate);    
     P1_0 = !P1_0;

} 

/********************************************************/
/*
/*  速度 3 中断 
/*
/********************************************************/

 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 + -