📄 步进电机.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 + -