it motor2=P1^1;
sbit motor3=P1^2;
sbit motor4=P1^3;
sbit k1=P3^1;//独立按键
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;
//数码管编码
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
u8 run;//电机启停
u8 left=0;//电机方向
u8 speed=0;//电机速度
u8 next=0,time=0;
void delay(u16 i)//延时
{
while(i--);
}
void disp()//显示
{
P0=0;//启停
P2=0xff;
P0=smgduan[run];
delay(100);
P0=0; //方向
P2=0xf7;
P0=smgduan[left];
delay(100);
P0=0; //速度
P2=0xef;
P0=smgduan[9-speed];
delay(100);
}
//主函数
void main()
{
u8 k=0;
P1=0x01;
TMOD|=0X01;
TH0=0XD8;
TL0=0XF0;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
while(1)
{
//显示
disp();
if(!k1 &&(k!=1))//正反转
{
k=1;
left=!left;
run=1;
}
if(!k2 &&(k!=2))//加速
{
k=2;
if(speed>0)
speed--;
}
if(!k3 &&(k!=3))//减速
{
k=3;
if(speed<9)
speed++;
}
if(!k4)//停止
run=0;
if(k1 && k2 && k3 && k4)
k=0;
}
}
//定时器中断
void Timer0() interrupt 1
{
if(run)//电机驱动
{
if(time<speed)
time++;
else
{
time=0;
if(left)//方向
{
switch(next)
资料借鉴于此纷传
阅读全文