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;
//數(shù)碼管編碼
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);
}
//主函數(shù)
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)
資料借鑒于此紛傳
閱讀全文