一个60秒倒计时的程序,不知道哪里错了,求解答。
时间:10-02
整理:3721RD
点击:
#include<reg51.h>
#include<display.h>
#define uchar unsigned char
uchar p=0;
uchar second[2];
void Init_time0(void);
void main(void)
{
uchar i,s;
delayus(10);
Init_time0();
lcd_init();
s=60;
while(1)
{
second[0]=s/10;
second[1]=s%10;
lcd_pos(0,0);
for(i=0;i<2;i++)
{
lcd_wdat(second[i]+0x30);
}
lcd_wdat('s');
while(p==200);
p=0;
if(s)
s--;
}
}
void Init_time0(void)
{
TMOD|=0x01;
TH0=(65536-4068)/256;
TL0=(65536-4068)%256;
EA=1;
ET0=1;
TR0=1;
}
void time0()interrupt 1
{
TH0=(65536-4068)/256;
TL0=(65536-4068)%256;
p++;
}
#include<display.h>
#define uchar unsigned char
uchar p=0;
uchar second[2];
void Init_time0(void);
void main(void)
{
uchar i,s;
delayus(10);
Init_time0();
lcd_init();
s=60;
while(1)
{
second[0]=s/10;
second[1]=s%10;
lcd_pos(0,0);
for(i=0;i<2;i++)
{
lcd_wdat(second[i]+0x30);
}
lcd_wdat('s');
while(p==200);
p=0;
if(s)
s--;
}
}
void Init_time0(void)
{
TMOD|=0x01;
TH0=(65536-4068)/256;
TL0=(65536-4068)%256;
EA=1;
ET0=1;
TR0=1;
}
void time0()interrupt 1
{
TH0=(65536-4068)/256;
TL0=(65536-4068)%256;
p++;
}
if(s) s--;这句当s减到0之后是不是就没得减了。
对呀!问题已经发现了,延时那里应该是while(p!=200);
哦,对。不错,很聪明
这个计时方法很有意思,不过还是像上面那哥们提的,变量s应该加一个判断
程序思想还是比较好的,就是while(p==200);p=0;if(s) s--;这里有错以及编程思想不大好,建议改成 if(p==200){p=0;if(s) s--;} 不过,这个程序不适合加大比较大的工程里,建议再改进
if(s) s--;当s减到零后,不是没得减,是不执行s--;也就是说,此程序只能从60减到0
