#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
code unsigned char runz[8]={0x08,0x0a,0x02,0x06,0x04,0x05,0x01,0x09}; // 正转数组 0x08,0x0a,0x02,0x06,0x04,0x05,0x01,0x09
code unsigned char runf[8]={0x09,0x01,0x05,0x04,0x06,0x02,0x0a,0x08}; //反转数组 0x09,0x01,0x05,0x04,0x06,0x02,0x0a,0x08
uchar keycan=0; //键值
int y=20; //定义转动速度,数值越大电机转速越慢反之则快
sbit P34=P3^4 ; //正转按键
sbit P35=P3^5; //反转按键
void delay(i)//延时函数
{
uchar j,k;
for(j=0;j<i;j++)
for(k=0;k<250;k++);
}
void INT_init (void)
{
EA = 1; //中断总开关
EX1 = 1; //允许外部中断1中断
EX0 = 1; //允许外部中断0中断
IT1 = 1; //1:下沿触发 0:低电平触发
IT0 = 1; //1:下沿触发 0:低电平触发
}
void INT_1 (void) interrupt 2 using 2 //切换寄存器组到2
{
y-=1;delay(y+1);
}
void INT_0 (void) interrupt 0 using 2 //切换寄存器组到2
{
y+=1;delay(y+1);
}
///////////////////////////////////////////////////////// 正转运行
void zrun()
{
uchar z;
for(z=0;z<8;z++)
{
P1=runz[z];
delay(y+5);
}
}
/////////////////////////////////////////////////////////// 反转运行
void frun()
{
uchar z;
for(z=0;z<8;z++)
{
P1=runf[z];
delay(y+5);
}
}
/////////////////////////////////////////////////////////////没停住
main()
{
INT_init(); //外部中断初始化
while(1)
{
if(P34==0) //如果电机正转按键按下
{
keycan=1; //键值等于1
}
if(P35==0) //如果电机反转按键按下
{
keycan=2; //键值等于2
}
switch (keycan)
{
case 1: zrun(); //键值等于1 正转
break;
case 2: frun(); //键值等于2 反转
break;
}
}
}
/////////////////////////////////
为什么电机抖动较大,速度提不上去!
刚玩这个,不知道怎么处理了,高手提个意见啊! |