文档库 最新最全的文档下载
当前位置:文档库 › 直流电机转速测量程序

直流电机转速测量程序

t531w488843
676576
直流电机转速计设计及仿真
论文

利用MATLAB或PROTEUS等软件设计仿真一个能够对直流电机的转速进行测量计数并显示的一个系统

#include
#include
#define uchar unsigned char
#define uint unsigned int
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f, 0x40,0x00};
/************************主程序*************************/
void main ()
{
int i;
TMOD=0x01 ; //定时器0设为16位定时
TH0=(65536-40000)/256;//40ms
TL0=(65536-40000)%256;
EA=1 ; //开CPU中断
ET0=1 ; //开T0中断
TR0=1 ; //启动定时器T0
while(1)
{
ledshow(i) ; //数码管显示
keyscan() ; //键盘扫描
}
}

/**********************数码管显示程序********************/
void ledshow(unsigned int i)
{
disdata[0]=i/1000; //百位数
disdata[1]=i%1000/100; //十位数
disdata[2]=i%100/10; //个位数
disdata[3]=i%10; //小数位
P2=0xf7;P0=0x00;
P0=table[ disdata[3]];
delay(20);
P2=0xfb;P0=0x00;
P0=table1[ disdata[2]];
delay(20);
P2=0xfd;P0=0x00;
P0=table[ disdata[1]];
delay(20);
P2=0xfe;P0=0x00;
P0=table[ disdata[0]];
delay(20);
}
void delay_20() //延时20uS
{ uchar bt ;
for(bt=0;bt<100;bt++);
}
/**********************键值扫描函数*************************/
void keyscan()
{
enum keydown kdwn;
P1=0xff;
If((P1&0xff)!=0x1f)
{
delay(1000) ; //延时10ms 消抖
If((P1&0x1f)!=0x1f)
{
kdwn=P1&0x1f ;
Switch(kdwn)
{
case clckws:clokwise( );
break; //正转
case antclckws: anticlokwise( );
break; //反转
case mstsp: motorstop( );
break; //急停
case spdp: speedup( );
break; //加速
case spdwn: speeddown( );
break; //减速
}
}
}
while((P1&0x1f)!=0x1f);
}

/********************TO中断服务程序****************/
void time0_int(void) interrupt 1
{
time++;
TH0 = 0xec;
TL0 = 0x78;
if(change == 0)
{
PWM2 = 1;
if(time == high)
PWM1=0;
else if(time == period)
{
PWM1 = 1;
time = 0;
}
}
else
{ PWM1 = 1;
if(time == high)
PWM2=0;
else if(time == period)
{
PWM2 = 1;
time = 0;
}
}
}

相关文档
相关文档 最新文档