l++;
}
}
void motor_REV()
{ uchar i;
for (i=0; i<8; i++)
{ P1 = REV[i];
delay();
m++;
if(m%63==0)
n--;
if(m%264==0)
l++;
}
//显示时间加一
//电机反转子程序
//一个周期转 30 度
//取数据
//调节转速
//电机每转 1cm,显示高度减一
//显示时间加一
}
/********************************************************
*
*步进电机运行
*
*********************************************************/
void motor_turn()
{ for(;t>0;t--)
{motor_ffw();
//匀速
//匀速
//键盘扫描子程序
//消抖
}
}
void motor_REV1()
{for(;t
rnum=3;
}
P2=0xf0;
if((P2&0xf0)!=0xf0)
{ if(P2==0xe0)
lnum=0;
if(P2==0xd0)
lnum=1;
if(P2==0xb0)
lnum=2;
if(P2==0x70)
lnum=3;
keyflag=1;
keysbuf=rnum*4+lnum;
}
}
}
//T0 一方式
}
/********************************************************
*
*键盘扫描
*
*********************************************************/
main()
{TMOD=0x01;
TH0=-10000/256;
TL0=-10000%256;
EA=1;
ET0=1;
TR0=1;
P1=0xf0;
while(1)
{ if(keyflag!=0)
{keyflag=0;temp=anjian[keysbuf];
avonum=20;}
if(temp==1&&upflag==1)
{TR0=0;
motor_turn();
TR0=1;
temp=3;
m=0;upflag=0;bqupflag=0;
}
//按键为 1,电机正转运行
//有按键否?
//关掉定时中断
//启动定时中断
else if(temp==12&&upflag==0)
{TR0=0;
//按键为 12,电机反转运行
//按键为 4,电机正反转运行到半旗状态
//按键为 10,电机反正转运行到半旗状态
g=1425;
l=0;
motor_REV1();
TR0=1;
temp=3;upflag=1;bqupflag=1;
}
else if(temp==4&&bqupflag==1)
{TR0=0;
motor_turn();
m=0;
g=475;
motor_REV1();
temp=3;
bqupflag=0;
upflag=0;
t=475;
TR0=1;
}
else if(temp==10&&bqupflag==0)
{TR0=0;
motor_turn();
g=1425;
m=0;
motor_REV1();
temp=3;
bqupflag=1;
upflag=1;
TR0=1;
}
}
}
timer0() interrupt 1 using 1
{
TR0=0;
TH0=-10000/256;
TL0=-10000%256;
TR0=1;
if(temp==3)
count++;
if(avonum>0)
avonum--;
if((avonum==0)&&(keyflag==0))
理
{keyscan();
}
//T0 中断服务程序
//重装计数初值
//防重读数减一
//达到检测键盘条件且上个按键已处
//调用键盘扫描子程序
if(count/1000==1)
{count=0;
temp=7;
l=0;
}
display(n,l);
//10 秒到,时间显示清零
//调用显示子程序
}
/*显示子程序*/
void display(unsigned int i,k)
{
a=i/100;
b=i%100/10;
c=i%100%10;
d=l/10;
e=l%10;
P0=dis[c];
P1=0xa0;
delay1(48);
if((b||a)!=0)
{P0=dis[b];
P1=0x80;
delay1(10);}
if(a!=0)
{P0=dis[a];
P1=0x60;
delay1(10);}
P0=dis[e];
P1=0x20;
delay1(10);
P0=dis[d];
P1=0x00;
delay1(10);
}