while(1)
{
delay(1000);
temp=_crol_(temp,1);
P1=temp;
}
上面while(1)里的是P1端口上接的LED流水灯循环左移,这里的delay(1000);当P1口上的LED左移一位时,延时一段时间。
而定时器0中的是数码管显示变换,也就是当TH0 和THL中的数值从(65536-50000)/256的值开始记数当记到65535时,定时器0中断溢出,aa加1,当aa加到40时,num加1,这要把num的值通过table查表 在给P0显示(显示值在0-F间);
我看你这里定时器0中断时间大概在50MS间中断一次吧,那应该就是2S时间数码管显示值变化一次。
结论就是上delay(1000);是经流水灯延时用,定时器0是为数码管延时用,这样流水灯与数码管可以同时显示而不相互干涉,其实用一个定时器也可以实现流水灯和数码管的同时显示,不过相对麻烦一点,那天你了解了多任务时就知道了。
打字不易,如满意,望采纳。
把松手检测放到判断函数内部改成如下程序试一下:
void
main(void){
count=0;
led0();
while(1){
if(key==0){
delay();
if(key==0){
while(key==0);
count=count+1;
if(count==3)
count=0;
}
}
switch(count){
case
0:
led0();break;
case
1:
led1();break;
case
2:
led2();break;
default:;
}
}
}