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

📄 dcmotor.c

📁 51单片机对步进电机的控制程序,可实现步进电机的正反转
💻 C
字号:
/*
实验接线:
1、CPU板上的INT0接电机模块上的SIGNAL。
2、试验箱(台)上的CS0832选择CS1,A/D模块上的DS的1、2脚短接,VOUT接电机模块的DRV。
3、试验箱(台)上的CS244接CS0,244的输入IN0--IN7接平推开关KK1--KK8的输入K1--K8
实验说明:
  全速运行程序后,在数码管的左两位显示设定的转速(16进制),此数值可通过与
244输入端相连的8个平推开关kk1---kk8设定,同时在数码管的右两位显示电机实际转速,
显示的格式同左两位。认真观察数码管的右两位数值的变化,可以了解电机转速的控制过程。
*/
#include    <reg51.h>
#include    <absacc.h>
#define		da_port	 		XBYTE[0xcfa8]
#define		da_buf			XBYTE[0xcfa9]
#define		input			XBYTE[0xcfa0]
#define		Led_dat			XBYTE[0xcfe8]
#define		Led_ctl			XBYTE[0xcfe9]

unsigned char count,speed;
char  buf=0; 
void Display_byte(unsigned char loc,unsigned char dat)
  {
   unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
   loc &=0xf;
   Led_ctl = loc|0x80;
   if(dat==0xaa) Led_dat = table[16];
   else Led_dat = table[dat>>4];     /*显示高4位*/
   loc++;
   Led_ctl = loc|0x80;
   if(dat==0xaa) Led_dat = table[16];
   else Led_dat = table[dat&0xf];    /*显示低4位*/    
  }

void drv(unsigned char dat)
  {
   da_port = dat;
   da_buf = dat;
  }

void pulse(void) interrupt 0
  {
   EX0 = 0;
   count++;
   EX0 = 1;
  }
void time1(void) interrupt 3
  {
   TR1=0;
   TL1 = 0xaf;TH1 = 0x3c;
   buf++;
   if(buf>9)
     {
	  speed=count;
      count=0;
	  buf=0;
	 }
   TR1=1;
  }
void main(void)
  {
   unsigned char dat,tmp,tmp1,driver=0x80;
   float ave=0;
   drv(driver);
   Led_ctl = 0xd1;
   while((Led_ctl&0x80)==0x80);
   Led_ctl = 0x31;
   TR1 = 1;
   IT0=1;EX0=1;
   TMOD = 0x10;ET1=1;TL1 = 0xaf;TH1 = 0x3c;
   EA=1;
   Display_byte(2,0xaa);
   while(1)
     {
      dat = input;
	  Display_byte(0,dat);
	  while((buf==0)&&(tmp1!=speed))
        {
         Display_byte(4,speed);
	     if(speed<dat)
	       {
		    tmp=input-speed;
		    if(tmp>50)
		      {
			   driver -=0x18;
			   if(driver>(0xff-0x17)) driver = 0;
			  }
		    else if(tmp>30)
		      {
			   driver -=0x8;
			   if(driver>(0xff-0x7)) driver = 0;
			  }
		    else if(tmp>10)
		      {
			   driver -=2;
			   if(driver>(0xff-1)) driver = 0;
			  }
		    else 
			  {
			   driver -=1;
			   if(driver==0xff) driver = 0;
			  }
		   }
         else
	       {
		    tmp=speed-input;	
		    if(tmp>50)
		       {
			    driver +=0x18;
				if(driver<0x17) driver = 0xff;
			   }
		    else if(tmp>30)
		       {
			    driver +=0x8;
				if(driver<0x7) driver = 0xff;
			   }
		    else if(tmp>10)
		       {
			    driver +=0x2;
				if(driver<0x1) driver = 0xff;
			   }
		    else 
			   {
			    driver +=1;
				if(driver==0) driver = 0xff;
			   }
	       }
         drv(driver);
		 tmp1=speed;
 	    } 
	 }
  }

⌨️ 快捷键说明

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