基于单片机的无刷直流电机的控制系统 下载本文

P15=0; /*P1.5口取反,默认高电平*/ P14=0; /*P1.4口取反,默认低电平*/ P17=0; /*P1.7口取反,默认高电平*/ }

void left() /*左移函数*/ { if(tag1==0) /* { tag1=1; /* zy=p1+1; /*

}

else /* ++zy; /* if(zy==p1[0]) /* { zy=p1+4; /* }

d_ms(200000); /*2S tag1=0; /*}

void down() /*{ if(tag1==0)

{

if(zssd>=2000) {

zssd-=100; }

}

闪烁标志位为0,无闪烁*/ 闪烁标志位置1,开始闪烁*/ 指针指向位选数组首地址*/

已经开始闪烁*/ 指针指向当前位选数组下一位*/ 当指针指向第一位时*/ 自动跳转到第五位*/

内没动作,停止闪烁*/ 闪烁标志位置0,停止闪烁*/

参考up()函数*/ 29 / 37

}

else

switch(*zy) {

case 0x90: zssd=zs-1000;break; case 0x91: zssd=zs-100;break; case 0x92: zssd=zs-10;break; case 0x93: zssd=zs-1;break;

}

void right() { }

void keyget() {

if(tag1==0) { } else

--zy; tag1=1; zy=p1+4;

/*参考left()函数*/

if(zy==p1[5]) { }

d_ms(200000); tag1=0;

zy=p1+1;

/*键盘扫描函数*/

uchar x; /*定义变量*/

30 / 37

}

P2=0xC0; /*键盘扫描,看是否有键按下*/ if((P2&0xC0)==0) /*有键按下*/ { }

switch(x-0x21) {

case 0x7F: start();break; /*启动*/ case 0x6F: up();break; /*向上箭头*/ case 0x67: fanzhuan();break; /*反转*/ case 0x3F: left();break; /*左移*/ case 0x2F: down();break; /*向下箭头*/ case 0x27: right();break; /*右移*/ }

P2=0x80; /*P2.7置1,扫描第一行*/ if((P2&0x80)==0) /*第一行有键按下*/ { }

P2=0x40; /*P2.6

置1,扫描第二行*/

d_ms(1500); /*延时去抖*/ x=P2; /*读P2口*/

if((P2&0x40)==0) /*第二行有键按下*/ { }

d_ms(1500); /*延时去抖*/ x=P2; /*读P2口*/

void display(uchar *z) /*显示函数*/ {

uchat code d_p[]={0XFC,0X60,0XDA,0XF2,0X66,0XB6,0XBE,0XFE,

31 / 37

0XE6}; /*定义段选数组0-9*/ uchar a,b,c,d; /*转速各位*/ a=zs/1000; /*转速千位*/ b=zs00/100; /*转速百位*/ c=zs0/10; /*转速十位*/ d=zs; /*转速个位*/ if(tag1==0) /* { do { z[0]=1; /*P10 P0=d_p[a]; /* d_ms(20); /* z[0]=0; z[1]=1; P0=d_p[b]; d_ms(20); z[1]=0; z[2]=1; P0=d_p[c]; d_ms(20); z[2]=0; z[3]=1; P0=d_p[d]; d_ms(20); z[3]=0;

} while(1);

}

无闪烁时*/ 置高*/

从数组读数,P0口输出*/ 延迟显示*/ 32 / 37