51单片机的60秒数码管倒计时无法运行
一直显示0
#include
#define uchar unsigned char
#define uint unsigned int
uchar code table_du[]={
0x3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
void delay(){
uint m;
for(m=0;m>100;m++);
}
uchar j;
uint sum=60;
void main(){
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
TR0=1;
EA=1;
ET0=1;
while(1){
P1=0x02;
P0=table_du[sum/10];
delay();
P1=0x01;
P0=table_du[sum%10];
}
}
void time0() interrupt 1{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
j++
if(j==20){
j=0
sum--;
if(sum==0)
sum=60;
}
}
用的中断
有两个语法错误:
在delay函数中,for循环的条件是m>100。这个条件不成立,因此for循环体内的代码永远不会执行。如果想使循环体内的代码执行一定次数,应该将循环条件改为m<100。
在time0函数中,j++语句和if语句后面需要加上分号;同时,在if语句中,应该将等号修改为赋值符号。
修正后的代码如下:
#include <REGX52.H>
#define uchar unsigned char
#define uint unsigned int
uchar code table_du[] = {
0x3F, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7D, 0X07, 0X7F, 0X6F
};
void delay() {
uint m;
for (m = 0; m < 100; m++);
}
uchar j;
uint sum = 60;
void main() {
TMOD = 0x01;
TH0 = (65535 - 50000) / 256;
TL0 = (65535 - 50000) % 256;
TR0 = 1;
EA = 1;
ET0 = 1;
while (1) {
P1 = 0x02;
P0 = table_du[sum / 10];
delay();
P1 = 0x01;
P0 = table_du[sum % 10];
}
}
void time0() interrupt 1 {
TH0 = (65535 - 50000) / 256;
TL0 = (65535 - 50000) % 256;
j++;
if (j == 20) {
j = 0;
sum--;
if (sum == 0)
sum = 60;
}
}
在这里,我们将for循环的条件修改为m<100,在time0函数中修正了两个语法错误。