写了一个简单的倒计时程序,源码如下:#include<reg51.h> #define uchar unsigned char #define uint unsigned int code uchar tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uint second=15; uint shiW,geW; static char count=0;
sbit P20=P2^0; sbit P21=P2^1;
void delay() { uchar i; for(i=0;i<15;i++); }
void Delay(unsigned int i) //延时程序 i=1 就延时1ms { unsigned int j; for(;i>0;i--) for(j=0;j<125;j++) {;} }
void int1()interrupt 1 using 2 //定时中断响应定为 50ms { TH0=0x3c; //通过对TMOD的赋值,让定时/计数器0工作,从而可以算的THO TL0的值 TL0=0xb0; count++; }
main() { TMOD=0x01; TH0=0x3c; TL0=0xb0; EA=1; ET0=1; // 定时器/计数器T0中断 允许 TR0=1; // 定时器运行状态 启动 P1=0xff; while(1) { shiW=second/10; geW=second%10; P0=tab[geW]; // 这里是定义时的个位的输出端 P21=1; delay(); P21=0; P0=tab[shiW]; // 这里是定义时的十位的输出端 P20=1; delay(); P20=0;
if(count==20) { count=0; second--; if(second==0) { Delay(2000); second=15; }
} } } 预计运行结果是:从15开始倒数,到0时停两秒,接着继续从15倒数。 但实际运行结果是:从15开始倒数,到0停两秒,然后显示15并且显示15这个数大概5~7秒,然后再开始倒数。 大虾们能给我解释解释吗?小弟刚玩51,很多不懂,希望能说详细点 谢谢~~ Ps:如果把红色代码里的数字改成1000,运行结果是:从15开始倒数,数完后不停,接着从14开始倒数
|