uchar f=5; //计数的次数 周期200ms
sbit PWM1=P2^0; //PWM输出波形1
sbit PWM2=P2^1; //PWM输出波形2
sbit STW_ON=P3^0; // 启动
sbit STOP=P3^1; // 停止
sbit ZEFZ=P3^2; //正反转
sbit SWT_UP=P3^3; // 加速
sbit SWT_DOWN=P3^4; // 减速
uchar k;
uchar t; //脉冲加减
uchar code smg[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//程序存储区定义字型码表 共阴 dp-a
char data led[4]={0x08,0x04,0x02,0x01}; //位码
uint x; //数码管显示的数值
void display(); //数码管显示
void delays(); //延时函数
void key();
void displays();
main ()
{
TMOD=0x51; //T0方式1 定时计数 T1方式1计数
TH0=0xb1; //装入初值 20MS
TL0=0xe0;
TH1=0x00; // 计数567
TL1=0x00;
TR0=1; //启动 t0
TR1=1; //启动t1
gw=sw=bw=qw=0; //数码管初始化
P0=0xC0;
P1=0x0F;
while(1) //无限循环
{
display(); //数码管显示
key();
}
}
void display()
{
}
void delays()
{
uchar i;
for(i=5000;i>0;i--);
}
void t0() interrupt 1 using 2
{
TH0=0xb1; //重装t0 20MS
TL0=0xe0;
j++; //定时次数20MS+1
f--; //计数的次数 20MS后5-1
if(k==0) //正转
{
if(f
else
PWM1=0;
PWM2=0;
}
else //反转
{
if(f
else
PWM2=0;
PWM1=0;
}
if(f==0)
{
f=5;
}
if(j==50) //1S
{
j=0;
x=TH1*256+TL1; //t1方式1计数,读入计数值
TH1=0x00;
TL1=0x00;
x++;
display();
}
}
void key()
{
if(STW_ON==0) //如果按下, 启动
{
while(!STW_ON) //去抖动
display();
IE=0x8a;
}
if(ZEFZ==0)
{
while(ZEFZ==0);
k=~k;
}
if(SWT_UP==0) //加速
{
while (SWT_UP==0);
t++; //脉冲加减
}
if(t>=5)
t=5;
if(SWT_DOWN==0) //减速
{
while(SWT_DOWN==0);
t--;
}
if(t<1)
t=1;
if(STOP==0) //停止
{
while(STOP==0);
EA=0;
PWM1=0;
PWM2=0;
}
}