单片机自学中遇到的问题


#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit RS=P3^5;
sbit EN=P3^4;
sbit RW=P3^6;
uchar count,shi,fen,miao;
uchar code table[]="  2021-8-26 THU";
uchar code table1[]="    23:59:30";
void delay(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
    for(y=110;y>0;y--);
}

void write_com(uchar com)
{
    RS=0;
    RW=0;
    EN=1;
    P0=com;
    delay(5);
    EN=1;
    delay(5);
    EN=0;
}

void write_date(uchar date)
{
    RS=1;
    RW=0;
    EN=0;
    P0=date;
    delay(5);
    EN=1;
    delay(5);
    EN=0;
}

void init()
{
    uchar num;
    dula=0;
    wela=0;
    EN=0;
    write_com(0x38);
    write_com(0x0c);
    write_com(0x06);
    write_com(0x01);
    write_com(0x80);
    for(num=0;num<15;num++)
        {
            write_date(table[num]);
            delay(20);
        }    
        write_com(0x80+0X40);
    for(num=0;num<12;num++)
        {
            write_date(table1[num]);
            delay(20);
        }    
        TMOD=0X01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;
}

void write_sfm(uchar add,uchar date)//дʮ·ÖÃë
{
    uchar shi,ge;
    shi=date/10;
    ge=date%10;
    write_com(0x80+0x40+add);
    write_date(0x30+shi);
    write_date(0x30+ge);
}

void main()
{
    init();
    while(1)
    {
    if(count==20)
        {
            count=0;
            miao++;
            if(miao==60)
            {
                miao=0;
                fen++;
                if(fen==60)
                {
                    fen=0;
                    shi++;
                    if(shi==24)
                        {
                            shi=0;
                        }
                    write_sfm(4,shi);
                }
                write_sfm(7,fen);
            }
            write_sfm(10,miao);
        }
    }
}

void timer0() interrupt 1
{
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    count++;
}




为什么59分59秒不进位,分钟位变成了01?

把数据送去显示的语句全部提出来放在判断进位外的主循环内试看.


 
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit RS=P3^5;
sbit EN=P3^4;
sbit RW=P3^6;
uchar count,shi,fen,miao;
uchar code table[]="  2021-8-26 THU";
uchar code table1[]="    23:59:30";
void delay(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
    for(y=110;y>0;y--);
}
void write_com(uchar com)
{
    RS=0;
    RW=0;
    EN=1;
    P0=com;
    delay(5);
    EN=1;
    delay(5);
    EN=0;
}
void write_date(uchar date)
{
    RS=1;
    RW=0;
    EN=0;
    P0=date;
    delay(5);
    EN=1;
    delay(5);
    EN=0;
}
void init()
{
    uchar num;
    dula=0;
    wela=0;
    EN=0;
    write_com(0x38);
    write_com(0x0c);
    write_com(0x06);
    write_com(0x01);
    write_com(0x80);
    for(num=0;num<15;num++)
        {
            write_date(table[num]);
            delay(20);
        }    
        write_com(0x80+0X40);
    for(num=0;num<12;num++)
        {
            write_date(table1[num]);
            delay(20);
        }    
        TMOD=0X01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;
}
void write_sfm(uchar add,uchar date)//дʮ·ÖÃë
{
    uchar shi,ge;
    shi=date/10;
    ge=date%10;
    write_com(0x80+0x40+add);
    write_date(0x30+shi);
    write_date(0x30+ge);
}
void main()
{
    init();
    while(1)
    {
    if(count==20)
        {
            count=0;
            miao++;
            if(miao==60)
            {
                miao=0;
                fen++;
                if(fen==60)
                {
                    fen=0;
                    shi++;
                    if(shi==24)
                        {
                            shi=0;
                        }
                    
                }

            }

        }
write_sfm(4,shi);
                write_sfm(7,fen);
            write_sfm(10,miao);
    }
}
void timer0() interrupt 1
{
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    count++;
}
 
 

晓得了,没有把初值23时59分59秒写在初始化函数中,或者在主函数while(1)循环前将初值放进去。谢谢啦