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

📄 text1

📁 步进电机控制
💻
字号:
//********************************************************************************
// 步近电机控制程序
//  完整篇
// 测试可以运行
//********************************************************************************

#include <at89x51.h>

#include <stdio.h>
 
bit b=0,q=0;

unsigned char code j[3]={9,6,3};  //速度选项

unsigned char code z[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//正转

unsigned char code f[8]={0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03};//反转  

unsigned char code xs[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//显示

unsigned char code wx[]={0x01,0x02,0x04,0x10,0x20,0x40,0x80};//位选

unsigned char x,i;

unsigned char n,y,m;

unsigned int c,s,s1,s2,s3,s4;
 
unsigned char e[7];//缓冲数据    	



void delay(int a)          //延时
                   {  while(--a); }     						


void led()   //  设定圈数并显示
            {    
				     s1=(int)s%10;
 			        
					  s2=(int)s%1000%100/10;
                 
					  s3=(int)s%1000/100;
                 
					  s4=(int)s/1000;
                 
					  e[0]=xs[y];  //速度设定
        		 
                 e[1]=xs[b]; // 正反转
        	   
                 e[2]=xs[q]; //开始
 
                 e[3]=xs[s1]; //设定

					  e[4]=xs[s2];

					  e[5]=xs[s3];
                  
                 e[6]=xs[s4];
					  
				}			    

    			

void control()
               
                { 
                     if(b==0)      //判断正反转
                    
                    	     P1=z[x];
                   
                       else   
                      
                    		  P1=f[x];
               
                     if(P3_3==0)   // 选择正反转
    	  
                        delay(10000);
    	  
                     if(P3_3==0)
        
                        b=~b;
    	
                     if(P3_4==0)   //转动速度设定
    	
                       delay(10000);
     
                      if(P3_4==0)
                       
            				y++;
    	 
                      if(y==3)
                      
            				y=0;
        				
                      
                      if(P3_5==0) //转动圈数设定
            	
                     delay(10000);
        	 		
                      if(P3_5==0)			
        			 
                  	   s++; 
              
                		if(s==10000)
  
                         s=0; 
								 
 					}

        					

void main()
      
            {
        		        TMOD=0x11; 
    	
                    TH0=(65536-m*1000)/256;   
    	
                    TL0=(65536-m*1000)%256;
    	
                    TH1=(65536-4000)/256;
      
                    TL1=(65536-4000)%256;
           
						  TR1=1;
                     
						  ET1=1;
    	 
              	     EA=1;

                    while(1) 
			                   {
									   led();
    	 
                              control();

                              if(P3_2==0) //电机启动选择(1启动,0停止)
                        
                           delay(10000);
               
                              if(P3_2==0)
                       
                               q=~q;       
              
                              if(q==0 || c==s*10)//判断是否启动和设定圈数是否已到
                
                               ET0=0;    
               
               			         else

                             {  
									    delay(100);
						           
						           	ET0=1; 	
										
										TR0=1;
										}
                         }		
        				 }	 


void t0(void) interrupt 1  using 3  //给电机脉冲
                         { 
            					 x++; //每隔(m*1000)就读取一个脉冲

                            c++; 
									
									 if(x==8)  
                				 
									  x=0; 
            					 
                				  m=j[y];//代入设定初始数值
    	
                            TH0=(65536-m*1000)/256;
    	
                            TL0=(65536-m*1000)%256;
                           }



void t1(void) interrupt 3   using 1 //  显示部分 
                         
                           {
                           
                               P2=wx[i];
                      
                    				 P0=e[i];
                              
                					 i++;
        
                    				 if(i==7)
                              							
                					 i=0;
         
                               TH1=(65536-3000)/256;
        
                               TL1=(65536-3000)%256;  
}

⌨️ 快捷键说明

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