m0_74062664 2022-11-26 13:14 采纳率: 80%
浏览 2
已结题

设计的这个表不动是怎么回事(关键词-#include)

设计的这个表不动是怎么回事,请告知


#include <REGX52.H>
#include "LCD1602.h"
#include "DS1302.h"
#include "Key.h"
#include "Timer0.h"
#include "Delay.h"
#include "MatrixKey.h"

unsigned char Min,Sec,Ms; 
unsigned char SaveMin[6],SaveSec[6],SaveMs[6],SaveCount,CheckCount;
unsigned int CYear=2022,CMonth=11,CDay=27,CHour=23,CMin=58,CSec=30,CFlag;
unsigned char CSettmp,CSettmp2,CSetFlag;
unsigned char DMin,DSec,DMs,DownFlag,Dtmp;
unsigned char KeyNum,Keys,CountFlag;

void StartMemu();
void TimeMode();
void CheckMode();
void CalendarMode();
void CountdownMode();
void CSettingMode();
void DownSetting();

void main()
{
    LCD_Init();
    Timer0_Init();
    while(1) StartMemu();

}

void StartMemu()
{
    LCD_ShowString(1,1,"Start Work     ");
    while(1)
    {
        KeyNum=MatrixKey();
        if(KeyNum==1) CalendarMode();
        if(KeyNum==2) TimeMode();
        if(KeyNum==3) CountdownMode();
    
    }
}
void CalendarMode()
{
    CFlag=1;
    CSetFlag=0;
    LCD_ShowString(1,1,"    -  -        ");
    LCD_ShowString(2,1,"  :  :          ");
    while(1){
        LCD_ShowNum(1,1,CYear,4);
        LCD_ShowNum(1,6,CMonth,2);
        LCD_ShowNum(1,9,CDay,2);
        LCD_ShowNum(2,1,CHour,2);
        LCD_ShowNum(2,4,CMin,2);
        LCD_ShowNum(2,7,CSec,2);
        KeyNum=MatrixKey();
        if(KeyNum==1)  TimeMode();
        if(KeyNum==5)  CountdownMode();
        if(KeyNum==6)  CheckMode();
        if(KeyNum==7) CSettingMode();
    }
}

void CSettingMode()
{
    CFlag=0;
    CSetFlag=1;
    CSettmp=1;
    LCD_ShowString(2,10,"Setting");
    while(1){
        LCD_ShowNum(1,16,CSettmp,1);
        LCD_ShowNum(1,1,CYear,4);
        LCD_ShowNum(1,6,CMonth,2);
        LCD_ShowNum(1,9,CDay,2);
        LCD_ShowNum(2,1,CHour,2);
        LCD_ShowNum(2,4,CMin,2);
        LCD_ShowNum(2,7,CSec,2);
        KeyNum=MatrixKey();
        if(KeyNum==1)  CalendarMode();
        if(KeyNum==5){
            if(CSettmp==1) CYear++;
            if(CSettmp==2){ CMonth++; if(CMonth==13) CMonth=1; }
            if(CSettmp==3){
                CDay++;
                if((CMonth==1|CMonth==3|CMonth==5|CMonth==7|CMonth==8|CMonth==10|CMonth==12)&&CDay==32) CDay=1;
                if((CMonth==4|CMonth==6|CMonth==9|CMonth==11)&&CDay==31) CDay=1;
                if(((CYear%4==0&&CYear%100!=0)||CYear%400==0)&&CMonth==2&&CDay==30) CDay=1;
                if(!((CYear%4==0&&CYear%100!=0)||CYear%400==0)&&CMonth==2&&CDay==29) CDay=1;
            }
            if(CSettmp==4) CHour=(CHour+1)%24;
            if(CSettmp==5) CMin=(CMin+1)%60;
            if(CSettmp==6) CSec=(CSec+1)%60;
        }
        if(KeyNum==6){
            if(CSettmp==1&&CYear) CYear--;
            if(CSettmp==2){ CMonth--; if(CMonth==0) CMonth=12; }
            if(CSettmp==3){
                CDay--;
                if((CMonth==1|CMonth==3|CMonth==5|CMonth==7|CMonth==8|CMonth==10|CMonth==12)&&CDay==0) CDay=31;
                if((CMonth==4|CMonth==6|CMonth==9|CMonth==11)&&CDay==0) CDay=30;
                if(((CYear%4==0&&CYear%100!=0)||CYear%400==0)&&CMonth==2&&CDay==0) CDay=29;
                if(!((CYear%4==0&&CYear%100!=0)||CYear%400==0)&&CMonth==2&&CDay==0) CDay=28;
            }
            if(CSettmp==4){ CHour--; if(CHour==-1) CHour=23; }
            if(CSettmp==5){ CMin--; if(CMin==-1) CMin=59; }
            if(CSettmp==6){ CSec--; if(CSec==-1) CSec=59; }
        }
        if(KeyNum==7){ CSettmp++; CSettmp2=0; if(CSettmp==7) CSettmp=1; }
    }
}

void TimeMode()
{
    //CountFlag=1;
    LCD_ShowString(1,1,"  :  :     S: /5");
    LCD_ShowString(2,1,"Now Timing      ");
    while(1){
        LCD_ShowNum(1,1,Min,2);
        LCD_ShowNum(1,4,Sec,2);
        LCD_ShowNum(1,7,Ms,2);
        LCD_ShowNum(1,14,SaveCount,1);
        KeyNum=MatrixKey();
        if(KeyNum==1) CheckMode();
        if(KeyNum==5){ Min=Sec=Ms=0; CountFlag=0; }
        if(KeyNum==6) CountFlag^=1;
        if(KeyNum==7&&SaveCount<5){
            ++SaveCount;
            SaveMin[SaveCount]=Min;
            SaveSec[SaveCount]=Sec;
            SaveMs[SaveCount]=Ms;
        }
    }
}
void CountdownMode(){
    LCD_ShowString(1,1,"  :  :     S: /5");
    LCD_ShowString(2,1,"Now Downing     ");
    while(1){
        LCD_ShowNum(1,1,DMin,2);
        LCD_ShowNum(1,4,DSec,2);
        LCD_ShowNum(1,7,DMs,2);
        LCD_ShowNum(1,14,SaveCount,1);
        if(DownFlag==1&&DMin==0&&DSec==0&&DMs==0){ DownFlag=0; beep=0; }
        KeyNum=MatrixKey();
        if(KeyNum==1) CheckMode();
        if(KeyNum==5){ 
            DMin=DSec=DMs=0; DownFlag=0; beep=1; 
        }
        if(KeyNum==6) DownSetting();
        if(KeyNum==7&&SaveCount<5){
            ++SaveCount;
            SaveMin[SaveCount]=DMin;
            SaveSec[SaveCount]=DSec;
            SaveMs[SaveCount]=DMs;
        }
    }
}

void DownSetting()
{
    beep=1;
    DownFlag=0;
    Dtmp=1;
    LCD_ShowString(1,1,"  :  :          ");
    LCD_ShowString(2,1,"Now DownSetting ");
    while(1){
        LCD_ShowNum(1,1,DMin,2);
        LCD_ShowNum(1,4,DSec,2);
        LCD_ShowNum(1,7,DMs,2);
        LCD_ShowNum(1,16,Dtmp,1);
        KeyNum=MatrixKey();
        if(KeyNum==1){ DownFlag=1; CountdownMode(); }
        if(KeyNum==5){ 
            if(Dtmp==1){ DMin++; if(DMin>99) DMin=0; }
            if(Dtmp==2){ DSec++; if(DSec>59) DSec=0; }
            if(Dtmp==3){ DMs++; if(DMs>99) DMs=0; }
        }
        if(KeyNum==6){ 
            if(Dtmp==1){ DMin--; if(DMin==-1) DMin=99; }
            if(Dtmp==2){ DSec--; if(DSec==-1) DSec=59; }
            if(Dtmp==3){ DMs--; if(DMs==-1) DMs=99; }
        }
        if(KeyNum==7){ Dtmp++; if(Dtmp>3) Dtmp=1; }
    }
}


void CheckMode(){
    LCD_ShowString(1,1,"  :  :     C: / ");
    LCD_ShowString(2,1,"Now Checking    ");
    if(SaveCount) CheckCount=1; else CheckCount=0;
    while(1){
        LCD_ShowNum(1,1,SaveMin[CheckCount],2);
        LCD_ShowNum(1,4,SaveSec[CheckCount],2);
        LCD_ShowNum(1,7,SaveMs[CheckCount],2);
        LCD_ShowNum(1,14,CheckCount,1);
        LCD_ShowNum(1,16,SaveCount,1);
        KeyNum=MatrixKey();
        if(KeyNum==1) CalendarMode();
        if(KeyNum==5&&CheckCount>1&&SaveCount!=0) --CheckCount;
        if(KeyNum==6&&CheckCount<SaveCount) ++CheckCount;
        if(KeyNum==7){
            SaveCount=0;
            CheckCount=0;
        }
    }
}
void Timer0_Routine() interrupt 1{
    static unsigned int T0Count;
    static unsigned int CCount;
    static unsigned int DownCount;
    TL0=0x66;        
    TH0=0xFC;
    if(DownFlag==1)
    {
        DownCount++;
        if(DownCount>=10)
        {
            DownCount=0;
            if(DMs) DMs--;
            if(DMs==0&&(DSec||DMin))
            {
                DMs=99;
                if(DSec>0) --DSec;
                else if(DSec==0&&DMin)
                {
                    DSec=59;
                    DMin--;
                }
            }
        }
    }
    if(CountFlag==1){
        T0Count++;
        if(T0Count>=10){
            T0Count=0;
            Ms++;
            if(Ms>99){
                Ms=0;
                Sec++;
                if(Sec>59){
                    Sec=0;
                    Min++;
                    if(Min>99)
                        Min=0;
                }
            }
        }
    }

    if(CFlag==1){
        CCount++;
        if(CCount>=1000){
            CCount=0;
            CSec++;
            if(CSec>59){
                CSec=0;
                CMin++;
                if(CMin>59){
                    CMin=0;
                    CHour++;
                    if(CHour>23){
                        CHour=0;
                        CDay++;
                        if(CMonth==12&&CDay==32){
                            CMonth=1; CDay=1;
                            CYear++;
                        }
                        if((CMonth==1|CMonth==3|CMonth==5|CMonth==7|CMonth==8|CMonth==10)&&CDay==32){
                            CDay=1;
                            CMonth++;
                        }
                        if((CMonth==4|CMonth==6|CMonth==9|CMonth==11)&&CDay==31){
                            CDay=1;
                            CMonth++;
                        }
                        if(((CYear%4==0&&CYear%100!=0)||CYear%400==0)&&CMonth==2&&CDay==30){
                            CDay=1;
                            CMonth++;
                        }
                        if(!((CYear%4==0&&CYear%100!=0)||CYear%400==0)&&CMonth==2&&CDay==29){
                            CDay=1;
                            CMonth++;
                        }
                    }
                }
            }
        }
    }
}
  • 写回答

1条回答 默认 最新

  • qllaoda 2022-11-26 13:40
    关注

    检查一下MatrixKey函数返回值,包括什么都不按的返回值(是否可能卡在那里不返回),按下指定键的返回值(检查是否符合预期)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月10日
  • 已采纳回答 12月2日
  • 创建了问题 11月26日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度