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

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);

33 / 37

z[2]=0; z[3]=1; P0=d_p[d]; d_ms(20);

z[3]=0;

}

while(1); } }

void cs() /*{

zs=count/8*100; /* 8 } void pwm()

/*pwm{

ulong a; /* a=zs/zssd; /* zkbd=a/(a+1);

zkbg=1-zkbd;

P16=1; /* d_ms(1000*zkbg); /* P16=0; /* d_ms(1000*zkbd); /*}

void stop() /*{ P0=0;

测速函数*/ 转速=count*(1000000/10000)转子每转一圈,每个传感器都会个脉冲产生*/ 输出函数*/

定义临时变量*/ 求占空比*/ 输出高电平*/ 延长时间*/ 输出低电平*/ 延长时间*/ 停止函数*/ 34 / 37

P1=0; P2=0; TR0=0; TR1=0; }

void main(void)

{

TMOD=0x5D; /*T1软件启动,T0软件+脉冲启动,T1计

数器,T0定时器

T1工作在方式1,T0工作在方式1*/

TCON=0x20; TH1=0x00;

TL1=0x00; TH0=0xD8; TL0=0xF0;

IE=0x82; /*中断允许总控制,禁止T1中断*/ keyget();

if(tag!=0) /*启动标志为1时*/ {

TR0=1; /*启动T0、T1*/ TR1=1; keyget();

display(p1);

pwm();

} }

void interrupt1() interrupt 1 using 0 /*中断服务程序*/

else stop();

35 / 37

{

TR1=0; /*关闭定时器T1*/ count=T1; /*统计T1的值*/ TH1=0X00; /*计数器清零*/ TL1=0X00;

TH0=0xD8; /*装入初值*/ TL0=0XF0;

TR1=1; /*开启T1*/

TR0=1; /*开启T0*/ }

图 21 程序调试成功

36 / 37