ZW521521_ 2021-08-26 15:41 采纳率: 100%
浏览 40
已结题

单片机自学中遇到的问题


#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?

  • 写回答

2条回答 默认 最新

  • 智者知已应修善业 2021-08-26 17:13
    关注

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

    
     
    #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++;
    }
     
     
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月20日
  • 已采纳回答 9月12日
  • 创建了问题 8月26日

悬赏问题

  • ¥15 用matlab写代码
  • ¥30 motoradmin系统的多对多配置
  • ¥15 求组态王串口自定义通信配置方法或代码?
  • ¥15 实验 :UML2.0 结构建模
  • ¥20 用vivado写数字逻辑实验报告撰写,FPGA实验
  • ¥15 为什么shp文件会有这种小方块?
  • ¥15 ecplise在连接数据库时显示加载驱动成功但是数据库连接失败
  • ¥15 visionmaster启动失败,提示为“机器不满足授权而被禁用”
  • ¥15 IDEA中圈复杂度如何具体设置
  • ¥50 labview采集不了数据