发布时间 : 星期五 文章基于单片机无刷直流电机控制系统的设计毕业设计论文更新完毕开始阅读
} else
--zy;
if(zy==p1[5]) { zy=p1+1;
}
d_ms(200000); tag1=0;
}
void keyget() { uchar x; * P2=0xC0; * if((P2&0xC0)==0) * { P2=0x80; *P2.7 if((P2&0x80)==0) * { d_ms(1500); * x=P2; * }
P2=0x40; *P2.6 if((P2&0x40)==0) * { d_ms(1500); * x=P2; * }
}
键盘扫描函数*
定义变量*
键盘扫描,看是否有键按下* 有键按下* 置1,扫描第一行* 第一行有键按下* 延时去抖* 读P2口*
置1,扫描第二行* 第二行有键按下* 延时去抖* 读P2口* *
}
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; *右移* }
void display(uchar *z) *显示函数* {
uchat code d_p[]={0XFC,0X60,0XDA,0XF2,0X66,0XB6,0XBE,0XFE, 0XE6}; *定义段选数组0-9*
uchar a,b,c,d; *转速各位* a=zs1000; *转速千位* b=zs%; *转速百位* c=zs010; *转速十位* d=zs; *转速个位* if(tag1==0) *无闪烁时* {
do {
z[0]=1; *P10置高*
P0=d_p[a]; *从数组读数,P0口输出* 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);
else *有闪烁的时候* {
do {
if(z==zy) *当前显示位和闪烁位重叠*
{
*z=1; *当前显示为置高* switch(*z) *查询当前是哪位同时显示*
{
case 0x90: P0=d_p[a];break; case 0x91: P0=d_p[b];break; case 0x92: P0=d_p[c];break; case 0x93: P0=d_p[d];break;
}
d_ms(50000); *亮0.5S* *z=0; *当前显示位置低*
d_ms(50000); *灭0.5S* }
z[0]=1; *如前所示* 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); } }
void cs() *{
zs=count8*100; * 8 } void pwm()
*pwm测速函数* 转速=count*()
转子每转一圈,每个传感器都会个脉冲产生* 输出函数*