找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 225|回复: 1
打印 上一主题 下一主题
收起左侧

对单片机万年历按键程序的疑问

[复制链接]
跳转到指定楼层
楼主
ID:1011444 发表于 2024-2-29 15:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
某单片机+ds1302+MAX7219组成的16位数码管万年历,其按键程序如下:
uc code dxy[]={0,1,2,1,0,1,0,1,1,0,1,0,1};//定义大小月的数组
/*****按键函数*****/
void key()
{
        ui out_set=0,clear_0=0;
        out_clear=0;
        if(s1==0)     //设置键
        {
                delay(5);
                if(s1==0)
                {
                        while((s1==0)&&(set!=0))
                        {
                                display();
                                out_set++;
                                if(out_set==300)
                                {
                                        set=0;
                                        out_set=0;
                                        tt=0;
                                        fmq=0;
                                        delay(20);
                                        fmq=1;
                                        delay(100);
                                        fmq=0;
                                        delay(20);
                                        fmq=1;
                                        goto x;
                                }
                        }
                       
                        set++;
                        if(set<8)
                        {
                                out_set=0;
                                fmq=0;
                                delay(10);
                                fmq=1;
                        }
                        else
                        {
                                set=0;
                                tt=1;
                                fmq=0;
                                delay(200);
                                fmq=1;
                        }

x:                        while(!s1)
                        {
                                display();
                                sec_led();
                        }
                }
        }
       
        if(set!=0)
        {
                if(s2==0)
                {
                        delay(5);
                        if(s2==0)
                        {
                                fmq=0;
                                delay(10);
                                fmq=1;
                                if(set==1)
                                {
                                        year++;
                                        if(year==100)
                                        year=0;
                                        if((dxy[mon]==2)&&(year%4!=0)&&(day>28)==1)//当平年二月day大于28时    此句何用?
                                        day=28;//此句何用?
                                }
                                if(set==2)
                                {
                                        mon++;
                                        if(mon==13)
                                        mon=1;
                                        if((dxy[mon]==0)&&(day>30)==1)        //当小月day大于30时//此句何用?
                                        day=30;//此句何用?
                                        if((dxy[mon]==2)&&(year%4==0)&&(day>28)==1)//当平年二月day大于28时//此句何用?
                                        day=28;//此句何用?
                                        if((dxy[mon]==2)&&(year%4!=0)&&(day>29)==1)//当闰年二月day大于29时//此句何用?
                                        day=29;//此句何用?
                                }
                                if(set==3)
                                {
                                        day++;
                                        if((dxy[mon]==0)&&(day==31)==1)        //当小月day被加到了31时
                                        day=1;
                                        if((dxy[mon]==1)&&(day==32)==1)        //当大月day被加到32时
                                        day=1;
                                        if((dxy[mon]==2)&&(year%4==0)&&(day==29)==1) //当平年二月day被加到29时//year%4==0不是平年 一错
                                        day=1;//二错
                                        if((dxy[mon]==2)&&(year%4!=0)&&(day==30)==1) //当闰年二月day被加到30时//year%4!=0不是闰年 三错
                                        day=1;//四错
                                }
                                if(set==4)
                                {
                                        hour++;
                                        if(hour==24)
                                        hour=0;
                                }
                                if(set==5)
                                {
                                        min++;
                                        if(min==60)
                                        min=0;
                                }
                                if(set==6)
                                {
                                        xq++;
                                        if(xq==8)
                                        xq=1;
                                }
                                if(set==7)
                                {
                                        bs=~bs;
                                }
                                while(!s2)
                                {display();}
                        }
                }
                if(s3==0)
                {
                        delay(5);
                        if(s3==0)
                        {
                                fmq=0;
                                delay(10);
                                fmq=1;
                                if(set==1)
                                {
                                        year--;
                                        if(year==(-1))
                                        year=99;
                                        if((dxy[mon]==2)&&(year%4==0)&&(day>28)==1)//无用
                                        day=28;//无用
                                }
                                if(set==2)
                                {
                                        mon--;
                                        if(mon==0)
                                        mon=12;
                                        if((dxy[mon]==0)&&(day>30)==1)//何用?
                                        day=30;//
                                        if((dxy[mon]==2)&&(year%4==0)&&(day>28)==1)//判断错误且无用
                                        day=28;//
                                        if((dxy[mon]==2)&&(year%4!=0)&&(day>29)==1)//判断错误且无用
                                        day=29;//
                                }
                                if(set==3)
                                {
                                        day--;
                                        if((dxy[mon]==0)&&(day==0)==1)
                                        day=30;
                                        if((dxy[mon]==1)&&(day==0)==1)
                                        day=31;
                                        if((dxy[mon]==2)&&(year%4==0)&&(day==0)==1)//判断错误
                                        day=28;
                                        if((dxy[mon]==2)&&(year%4!=0)&&(day==0)==1)//判断错误
                                        day=29;
                                }
                                if(set==4)
                                {
                                        hour--;
                                        if(hour==(-1))
                                        hour=23;
                                }
                                if(set==5)
                                {
                                        min--;
                                        if(min==(-1))
                                        min=59;
                                }
                                if(set==6)
                                {
                                        xq--;
                                        if(xq==0)
                                        xq=7;
                                }
                                if(set==7)
                                {
                                        write_1302(0x8e,0x00);
                                        write_1302(0x80,0x00);
                                        write_1302(0x8e,0x80);
                                }
                                while(s3==0)
                                {display();}
                        }
                }
        }
}

*******************************************************************************************
请大家预判,此程序能否正确运行?加入讨论
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:275826 发表于 2024-2-29 18:23 | 只看该作者
C51中不要用goto 语句
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表