上次的帖沉了。。。重发一帖。。。。
现在对上次我编的延时程序做了一点简化,编译器编译一下没错误,不知道能不能正常运行
(高一党菜比,大家多多包涵)
#include<reg51.h>
#define unchar unsigned char
#define unint unsigned int
unint mum,a,b,eec;
sbit C1=P0^0;
sbit C2=P0^1;
sbit C3=P0^2;
sbit C4=P0^3;
sbit C5=P0^4;
sbit C6=P0^5;
sbit C7=P0^6;
sbit C8=P0^7;
sbit S1=P1^0;
void delayus(unchar);
void main()
{
while(1)//大循环
{
mum=0;
eec=0;
while(S1); //触发按键检测开始
for(a=10;a>0;a--) //延时10ms
for(b=120;b>0;b--);
while(S1); //触发按键检测结束
TMOD=0x01; //开始初始化定时计数器
TH0=(65536-10000)/256; //赋初值(注:10000不是工作值,填填上去而已)
TL0=(65536-10000)%256;
EA=1;
ET0=1; //初始化完毕
TR0=1; //定时计数器开始运行
mum++; //进入定时计数器中断的次数+1,下同
while(eec!=1); //限制程序执行步数,方便控制中断,这里根据eec的值来确定能不能跳过对应的while语句执行后面的“进入中断次数+1”
mum++;
while(eec!=2);
mum++;
while(eec!=3);
mum++;
while(eec!=4);
mum++;
while(eec!=5);
mum++;
while(eec!=6);
mum++;
while(eec!=7);
mum++;
while(eec!=8);
mum++;
while(eec!=9);
mum++;
while(eec!=10);
mum++;
while(eec!=11);
mum++;
while(eec!=12);
mum++;
while(eec!=13);
mum++;
while(eec!=14);
mum++;
while(eec!=15);
mum++;
while(eec!=16);
TR0=0; //把定时器计数器关掉,准备又一次循环,即发射
}
}
void DCP()interrupt 1 //中断程序
{
while(mum==1)
{
delayus(10000); //调用子函数,下同
C1=0; //触发对应级,下同
}
while(mum==2)
{
delayus(10000);
C1=1;
}
while(mum==3)
{
delayus(10000);
C2=0;
}
while(mum==4)
{
delayus(10000);
C2=1;
}
while(mum==5)
{
delayus(10000);
C3=0;
}
while(mum==6)
{
delayus(10000);
C3=1;
}
while(mum==7)
{
delayus(10000);
C4=0;
}
while(mum==8)
{
delayus(10000);
C4=1;
}
while(mum==9)
{
delayus(10000);
C5=0;
}
while(mum==10)
{
delayus(10000);
C5=1;
}
while(mum==11)
{
delayus(10000);
C6=0;
}
while(mum==12)
{
delayus(10000);
C6=1;
}
while(mum==13)
{
delayus(10000);
C7=0;
}
while(mum==14)
{
delayus(10000);
C7=1;
}
while(mum==15)
{
delayus(10000);
C8=0;
}
while(mum==16)
{
C8=1;//最后一次执行中断程序,不赋定时器初值
eec++;
}
}
void delayus(unchar sj) //用来赋值的子函数
{
TH0=(65536-sj)/256;
TL0=(65536-sj)%256;
eec++;
}
200字以内,仅用于支线交流,主线讨论请采用回复功能。