51单片机的60秒数码管倒计时错误

问题遇到的现象和发生背景

51单片机的60秒数码管倒计时无法运行

遇到的现象和发生背景,请写出第一个错误信息

一直显示0

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
#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;
    }
}

运行结果及详细报错内容

img

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 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函数中修正了两个语法错误。