⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 周立功 《μCOS-II微小内核分析与程序设计-基于LPC2300》配套例程源码
💻 C
📖 第 1 页 / 共 3 页
字号:
            usTime[i]  = pusMsg[2*i+1];
        }
        if (usLevel[0]==0) {                                            /*  设置输出电平                */
            IO1CLR = LED0;
        }
        if (usLevel[1]==0) {
            IO1CLR = LED1;
        }
        if (usLevel[2]==0) {
            IO1CLR = LED2;
        }
        if (usLevel[3]==0) {
            IO1CLR = LED3;
        }
        while (1) {                                                     /*  输出时间循环                */
            OSTimeDly(OS_TICKS_PER_SEC);
            if (usTime[0] != 0) {                                       /*  0路时间                     */
                if (--usTime[0] == 0) {
                    IO1SET = LED0;
                }
            }
            if (usTime[1] != 0) {                                       /*  1路时间                     */
                if (--usTime[1] == 0) {
                    IO1SET = LED1;
                }
            }
            if (usTime[2] != 0) {                                       /*  2路时间                     */
                if (--usTime[2] == 0) {
                    IO1SET = LED2;
                }
            }
            if (usTime[3] != 0) {                                       /*  3路时间                     */
                if (--usTime[3] == 0) {
                    IO1SET = LED3;
                }
            }
            if ((usTime[0] == 0) && (usTime[1] == 0) && (usTime[2] == 0) && (usTime[3] == 0)) {
                break;
            }
            OSMboxQuery(GmboxRingCtrl, &mboxdataMsg);                   /*  查询是否有新的消息          */
            if (mboxdataMsg.OSMsg != (void *)0) {
                break;
            }
        }
    }
}

/*********************************************************************************************************
** Function name:           GetTime
**
** Descriptions:            获取当前时间
**
** input parameters:
** output parameters:
**
** Returned value           
**
**
** Created by:
** Created Date:
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void GetTime(void)
{
    GtimeCurrentTime.ucHour = (uint8)HOUR;
    GtimeCurrentTime.ucMin  = (uint8)MIN;
    GtimeCurrentTime.ucSec  = (uint8)SEC;
    GtimeCurrentTime.usYear = (uint16)YEAR;
    GtimeCurrentTime.ucMon  = (uint8)MONTH;
    GtimeCurrentTime.ucDay  = (uint8)DOM;
    GtimeCurrentTime.ucWeek = (uint8)DOW;
}

/*********************************************************************************************************
** Function name:           ToDispBuf
**
** Descriptions:            更新显示缓冲区
**
** input parameters:
** output parameters:
**
** Returned value           
**
**
** Created by:
** Created Date:
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void ToDispBuf(void)
{
    int i, j;
    
    GucTimeDispBuf[0][0] = (uint8)(GtimeCurrentTime.ucSec % 10);        /*  星期,时分秒                */
    GucTimeDispBuf[0][1] = (uint8)(GtimeCurrentTime.ucSec / 10);
    GucTimeDispBuf[0][2] = (uint8)(GtimeCurrentTime.ucMin % 10);
    GucTimeDispBuf[0][3] = (uint8)(GtimeCurrentTime.ucMin / 10);
    GucTimeDispBuf[0][4] = (uint8)(GtimeCurrentTime.ucHour % 10);
    GucTimeDispBuf[0][5] = (uint8)(GtimeCurrentTime.ucHour / 10);
    GucTimeDispBuf[0][6] = 0x1f;
    GucTimeDispBuf[0][7] = GtimeCurrentTime.ucWeek;
    
    GucTimeDispBuf[1][0] = (uint8)(GtimeCurrentTime.ucDay % 10);        /*  年月日                      */
    GucTimeDispBuf[1][1] = (uint8)(GtimeCurrentTime.ucDay / 10);
    GucTimeDispBuf[1][2] = (uint8)(GtimeCurrentTime.ucMon % 10);
    GucTimeDispBuf[1][3] = (uint8)(GtimeCurrentTime.ucMon / 10);
    GucTimeDispBuf[1][4] = (uint8)(GtimeCurrentTime.usYear % 10);
    GucTimeDispBuf[1][5] = (uint8)(GtimeCurrentTime.usYear % 100 / 10);
    GucTimeDispBuf[1][6] = (uint8)(GtimeCurrentTime.usYear % 1000 / 100);
    GucTimeDispBuf[1][7] = (uint8)(GtimeCurrentTime.usYear / 1000);
    
    for (i=0; i<MAX_ALARM; i++) {
        GucAlarmDispBuf[i][0][0] = (uint8)(GalarmRingTime[i].ucSec % 10);
        GucAlarmDispBuf[i][0][1] = (uint8)(GalarmRingTime[i].ucSec % 100 / 10);
        GucAlarmDispBuf[i][0][2] = (uint8)(GalarmRingTime[i].ucMin % 10);
        GucAlarmDispBuf[i][0][3] = (uint8)(GalarmRingTime[i].ucMin % 100 / 10);
        GucAlarmDispBuf[i][0][4] = (uint8)(GalarmRingTime[i].ucHour % 10);
        GucAlarmDispBuf[i][0][5] = (uint8)(GalarmRingTime[i].ucHour % 100 / 10);
        GucAlarmDispBuf[i][0][6] = (uint8)i;
        GucAlarmDispBuf[i][0][7] = 0x0a;
        
        for (j=0; j<8; j++) {
            GucAlarmDispBuf[i][1][j] = (uint8)((GalarmRingTime[i].ucEnable&(1<<j)) ? 0x0e : 0x0d);
        }
        
        for (j=0; j<4; j++) {
            GucAlarmDispBuf[i][j+2][0] = (uint8)(GalarmRingTime[i].c[j].usTime % 10);
            GucAlarmDispBuf[i][j+2][1] = (uint8)(GalarmRingTime[i].c[j].usTime % 100 / 10);
            GucAlarmDispBuf[i][j+2][2] = (uint8)(GalarmRingTime[i].c[j].usTime % 1000 / 100);
            GucAlarmDispBuf[i][j+2][3] = (uint8)(GalarmRingTime[i].c[j].usTime % 10000 / 1000);
            GucAlarmDispBuf[i][j+2][4] = (uint8)(GalarmRingTime[i].c[j].usLevel ? 0x11 : 0x14);
            GucAlarmDispBuf[i][j+2][5] = 0x1f;
            GucAlarmDispBuf[i][j+2][6] = (uint8)j;
            GucAlarmDispBuf[i][j+2][7] = 0x0c;
        }
    }
}

/*********************************************************************************************************
** Function name:           FromDispBuf
**
** Descriptions:            更新当前时间
**
** input parameters:
** output parameters:
**
** Returned value           
**
**
** Created by:
** Created Date:
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void FromDispBuf(void)
{
    int i, j;
    
    GtimeCurrentTime.ucSec  = (uint8)(GucTimeDispBuf[0][1]*10 + GucTimeDispBuf[0][0]);
    GtimeCurrentTime.ucMin  = (uint8)(GucTimeDispBuf[0][3]*10 + GucTimeDispBuf[0][2]);
    GtimeCurrentTime.ucHour = (uint8)(GucTimeDispBuf[0][5]*10 + GucTimeDispBuf[0][4]);
    GtimeCurrentTime.ucWeek = GucTimeDispBuf[0][7];
    
    GtimeCurrentTime.ucDay  = (uint8)(GucTimeDispBuf[1][1]*10 + GucTimeDispBuf[1][0]);
    GtimeCurrentTime.ucMon  = (uint8)(GucTimeDispBuf[1][3]*10 + GucTimeDispBuf[1][2]);
    GtimeCurrentTime.usYear = (uint16)(GucTimeDispBuf[1][7]*1000 + GucTimeDispBuf[1][6]*100
                            + GucTimeDispBuf[1][5]*10 + GucTimeDispBuf[1][4]);
    
    for (i=0; i<MAX_ALARM; i++) {
        GalarmRingTime[i].ucSec = (uint8)(GucAlarmDispBuf[i][0][1]*10 + GucAlarmDispBuf[i][0][0]);
        if (GalarmRingTime[i].ucSec > 59) {
            GalarmRingTime[i].ucSec = 59;
        }
        GalarmRingTime[i].ucMin = (uint8)(GucAlarmDispBuf[i][0][3]*10 + GucAlarmDispBuf[i][0][2]);
        if (GalarmRingTime[i].ucMin > 59) {
            GalarmRingTime[i].ucMin = 59;
        }
        GalarmRingTime[i].ucHour = (uint8)(GucAlarmDispBuf[i][0][5]*10 + GucAlarmDispBuf[i][0][4]);
        if (GalarmRingTime[i].ucHour > 23) {
            GalarmRingTime[i].ucHour = 23;
        }
        
        for (j=0; j<8; j++) {
            if (GucAlarmDispBuf[i][1][j] == 1) {
                GalarmRingTime[i].ucEnable = (uint8)(GalarmRingTime[i].ucEnable | (1<<j));
            }
            else if (GucAlarmDispBuf[i][1][j] == 0) {
               GalarmRingTime[i].ucEnable = (uint8)(GalarmRingTime[i].ucEnable & (~(1<<j)));
            }
        }
        
        for (j=0; j<4; j++) {
            GalarmRingTime[i].c[j].usTime = (uint16)(GucAlarmDispBuf[i][j+2][3]*1000 
                                          + GucAlarmDispBuf[i][j+2][2]*100
                                          + GucAlarmDispBuf[i][j+2][1]*10
                                          + GucAlarmDispBuf[i][j+2][0]);
            if (GucAlarmDispBuf[i][j+2][4] == 1) {
                GalarmRingTime[i].c[j].usLevel = 1;
            }
            else if (GucAlarmDispBuf[i][j+2][4] == 0) {
                GalarmRingTime[i].c[j].usLevel = 0;
            }
        }
    }
}

/*********************************************************************************************************
** Function name:           SetTime
**
** Descriptions:            设置当前时间
**
** input parameters:
** output parameters:
**
** Returned value           
**
**
** Created by:
** Created Date:
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void SetTime(void)
{
    unsigned char ucDay;
    
    HOUR = (GtimeCurrentTime.ucHour > 23) ? 23 : GtimeCurrentTime.ucHour;
    MIN  = (GtimeCurrentTime.ucMin > 59) ? 59 : GtimeCurrentTime.ucMin;
    SEC  = (GtimeCurrentTime.ucSec > 59) ? 59 : GtimeCurrentTime.ucSec;
    YEAR = GtimeCurrentTime.usYear;
    if (GtimeCurrentTime.ucMon == 0) {
        GtimeCurrentTime.ucMon++;
    }
    MONTH = (GtimeCurrentTime.ucMon > 12) ? 12 : GtimeCurrentTime.ucMon;
    if (GtimeCurrentTime.ucDay == 0) {
        GtimeCurrentTime.ucDay++;
    }
    if (GtimeCurrentTime.ucMon == 2) {
        if (GtimeCurrentTime.usYear % 4) {
            ucDay = 28;
        }
        else {
            ucDay = 29;
        }
    }
    else {
        if (GtimeCurrentTime.ucMon > 7) {
            if (GtimeCurrentTime.ucMon % 2) {
                ucDay = 30;
            }
            else {
                ucDay = 31;
            }
        }
        else {
            if (GtimeCurrentTime.ucMon % 2) {
                ucDay = 31;
            }
            else {
                ucDay = 30;
            }
        }
    }
    DOM = (GtimeCurrentTime.ucDay>ucDay) ? ucDay : GtimeCurrentTime.ucDay;
    DOW = GtimeCurrentTime.ucWeek;
}
/*********************************************************************************************************
** Function name:           RTC_Exception
**
** Descriptions:            RTC中断服务程序
**
** input parameters:
** output parameters:
**
** Returned value           
**
**
** Created by:
** Created Date:
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void RTC_Exception(void)
{
    static unsigned short usMsg[10];
    int i,j;
    
    GetTime();                                                          /*  更新当前时间                */
    for (i=0; i<MAX_ALARM; i++) {                                       /*  查询所有闹钟                */
        if (GtimeCurrentTime.ucHour == GalarmRingTime[i].ucHour)
        if (GtimeCurrentTime.ucMin == GalarmRingTime[i].ucMin)
        if (GtimeCurrentTime.ucSec == GalarmRingTime[i].ucSec) {
            if ((GalarmRingTime[i].ucEnable & 0x80) == 0x80) {
                if (GalarmRingTime[i].ucEnable & (1 << GtimeCurrentTime.ucWeek)) {
                    break;
                }
            }
        }
    }
    
    if (i < MAX_ALARM) {                                                /*  闹钟到                      */
        for (j=0; j<4; j++) {                                           /*  设置消息                    */
            usMsg[2*j] = GalarmRingTime[i].c[j].usLevel;
            usMsg[2*j+1] = GalarmRingTime[i].c[j].usTime;
        }
        OSMboxPost(GmboxRingCtrl, (void *)usMsg);                       /*  发送消息                    */
    }
    
    ILR = 0x03;
    VICVectAddr = 0;
}
/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -