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

📄 步进电机.txt

📁 基于c8051f020的步进电机驱动程序
💻 TXT
字号:
#i nclude <c8051f020.h>                 
#i nclude<hd7279a.h>
sbit led=P1^6;
sfr16 TMR3R=0X92;
bit fsign=0,keysign=0;

void PORT_Init (void);
void SYSCLK_Init (void);
void keyscan(void);
void delay(void);
unsigned char motor[]={0xf7,0xfb,0xfd,0xfe};   //两相
//unsigned char motor[]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe};//四相 
char i=0;
unsigned char knb=0;
unsigned int bjspeed=0;
unsigned int j;
void main(void)
{
WDTCN = 0xde;
WDTCN = 0xad;
SYSCLK_Init ();                         
PORT_Init ();
TMR3CN= 0x00;
TMR3R= 0xDC00;
TMR3H=0XFF;
TMR3L=0XFF;
IE   = 0x80;
EIE2 = 0x01;
send8w(0xa4);
while(1)
{
keyscan();
if((knb==1)&&(keysign==1))fsign=~fsign;
if((knb==2)&&(keysign==1))TMR3CN=0X04;
if((knb==3)&&(keysign==1)){if(bjspeed>=10)bjspeed-=10;}
if((knb==4)&&(keysign==1)){if(bjspeed<=990)bjspeed+=10;}

wt7279(0x80+0,bjspeed%10);
wt7279(0x80+1,bjspeed/10%10);
wt7279(0x80+2,bjspeed/100%10);
wt7279(0x98,0xd7);
wt7279(0x80+4,0x0a&&fsign);
wt7279(0x80+6,knb%10);
wt7279(0x80+7,knb/10%10);
keysign=0;
wt7279(0x88,0XFF);
if(j>=bjspeed){TMR3CN=0X00;j=0;}
 

}
}
void SYSCLK_Init (void)
{
  unsigned int j;                              
  OSCXCN = 0x67;                      
  for (j=0; j < 3000; j++) ;           
  while (!(OSCXCN & 0x80)) ;         
  OSCICN = 0x88;    

 }
void PORT_Init (void)
{  
 
   XBR2     = 0x40;
   P0MDOUT  =0X4f;
   P0      |=0x08;
   P1MDOUT  =0X4F;
   P74OUT   |=0XD0;
}

void keyscan(void)
{
  unsigned char keytemp,sctemp;
  P7=0xf0;
  if((P7&0xf0)!=0xf0)
 { keysign=1;
   delay();
   if((P7&0xf0)!=0xf0)
  { 
    P7=0xfe;
    if((P7&0xf0)!=0xf0){keytemp=P7;sctemp=P7;while((P7&0xf0)!=0xf0)led=1;}
 else
 P7=0xfd;
 if((P7&0xf0)!=0xf0){keytemp=P7;sctemp=P7;while((P7&0xf0)!=0xf0)led=1;}
 else
 P7=0xfb;
 if((P7&0xf0)!=0xf0){keytemp=P7;sctemp=P7;while((P7&0xf0)!=0xf0)led=1;}
 else
 P7=0xf7;
 if((P7&0xf0)!=0xf0){keytemp=P7;sctemp=P7;while((P7&0xf0)!=0xf0)led=1;}
 }
    keytemp=(~keytemp&0xf0)+(~sctemp&0x0f);
    switch(keytemp)
   {
    case 0x11:knb=1;break;
 case 0x21:knb=2;break;
    case 0x41:knb=3;break;
 case 0x81:knb=4;break;
 case 0x12:knb=5;break;
 case 0x22:knb=6;break;
    case 0x42:knb=7;break;
 case 0x82:knb=8;break;
 case 0x14:knb=9;break;
 case 0x24:knb=10;break;
    case 0x44:knb=11;break;
 case 0x84:knb=12;break;
 case 0x18:knb=13;break;
 case 0x28:knb=14;break;
    case 0x48:knb=15;break;
 case 0x88:knb=16;break;
 default:break;
 }

  }
  led=0; 
}
void delay(void)
{
  int a=1000;
  while(a!=0)
  {
    a--;
   }
 }
 void t2(void) interrupt 14 
{
 TMR3CN &= ~(0x80);
 P1=motor[i];
 j++;
 if(fsign==0)i++;else i--;
 if(i<0)i=3;else if(i>3)i=0;
}

⌨️ 快捷键说明

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