p10 点
p11划
p12速度减少
p13速度加
p14开关蜂鸣器
带点划记忆,点划自动插入
已经调试好了可以正常工作。
#include<at89x51.h>
bit d=1,di1=0,da1=0;//d蜂鸣器开关;di1点的标志位为实现点划记忆,da1达标志位
unsigned int v,a=140;
void da(void)//发达子程序
{
tr0=1;//开定时器
if(d==1)p2_3=1;//判断要不要开蜂鸣器
p2_1=1; //led点亮
while(v!=3*a);//等待达的时间到
p2_3=0;关蜂鸣器
p2_1=0;
while(v!=4*a);等待间隔时间到
tr0=0;关定时器
v=0;时间初值清零
da1=0;达标志位清零
}
void di(void)//发嘀子程序
{
tr0=1;
if(d==1)p2_3=1;
p2_1=1;
while(v!=a);
p2_3=0;
p2_1=0;
while(v!=2*a);
tr0=0;
v=0;
di1=0;
}
void time0(void)interrupt 1//定时器0中断
{
v++;记时
if(p1_0==0){di1=1;}判断有没有按建置标志位
if(p1_1==0){da1=1;}
}
void main(void)
{
p2=0x00;
tmod=0x02;
th0=0x06;
tl0=0x06;
ea=1;
et0=1;
while(1)
{
if(p1_2==0)//减速
{
a=a+20;
if(a!=280){di();di();di();da();}
if(a==280){a=260;da();}
if(a==140){da();da();da();}我习惯的速度提示大大大
}
if(p1_3==0)//加速
{
a=a-20;
if(a!=40){di();di();di();da();}
if(a==40){a=60;da();}
if(a==140){da();da();da();}
}
while(p1_0==0||di1==1)//sed di
{
di();
if(da1==1)break;
}
while(p1_1==0||da1==1)//sed da
{
da();
if(di1==1)break;
}
if(p1_4==0){d=~d;di();di();di();da();}//关蜂鸣器
}
}