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

📄 main.c

📁 周立功 《μCOS-II微小内核分析与程序设计-基于LPC2300》配套例程源码
💻 C
📖 第 1 页 / 共 3 页
字号:
    PINSEL1 = (PINSEL1 & ~(0xff << 22))|(  0x05 << 22 );                /*  设置I2C管脚功能             */
    i2cInit(0, "Speed=30000", NULL);                                    /*  初始化I2C0                  */
    SetVICIRQ(9, 2, (int)i2c0IRQ);                                      /*  设置了IRQ中断               */
    
    GmboxRingCtrl = OSMboxCreate((void *)0);                            /*  创建消息邮箱                */
    rtcInit();
    SetVICIRQ(13, 3, (int)RTC_Exception);
    
    OSTaskCreateExt (TaskDisp,
                     (void *)0,
                     &TaskDispStk[TASKDISP_STACK_SIZE - 1],
                     TASKDISP_PRIO,
                     TASKDISP_ID,
                     &TaskDispStk[0],
                     TASKDISP_STACK_SIZE,
                     (void *)0,
                     OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

                                                                        /*  创建显示任务                */
                                                                        
    OSTaskCreateExt (TaskCtrl,
                     (void *)0,
                     &TaskCtrlStk[TASKCTRL_STACK_SIZE - 1],
                     TASKCTRL_PRIO,
                     TASKCTRL_ID,
                     &TaskCtrlStk[0],
                     TASKCTRL_STACK_SIZE,
                     (void *)0,
                     OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

                                                                        /*  创建输出控制任务            */
    
    while (1) {
        OSTimeDly(4);                                                   /*  延时                        */
        ucKey = (uint8)ZLG7290GetKey();                                 /*  获取键值                    */
        if ((ucKey == 0) || (ucKey > 16)) {                             /*  没有按键                    */
    	    continue;
        }
        if (ucKey<11) {                                                 /*  数字键                      */
    	    ucKey0 = 0;
        }
        else {                                                          /*  功能键                      */
    	    ucKey0 = (uint8)(ucKey % 10);
        }
    	
    	/*
    	 *  键值处理
    	 */
    	OS_ENTER_CRITICAL();                                            /*  进入临界区,原子操作        */
        switch (ucKey0) {
        
        case 0:                                                         /*  数字键                      */
            if (ucFlag) {                                               /*  数字键只有在修改状态下有效  */
                ucKey %= 10;
                switch (GuiMode) {
                
                case 0:                                                 /*  时钟模式                    */
                    if (ucKey <= GucTimeMaxTable[GuiItem][GuiCursor]) {
                        GucTimeDispBuf[GuiItem][GuiCursor] = ucKey;
                        GuiCursor = GucTimeNextCursor[GuiItem][GuiCursor];
                        FromDispBuf();
                        SetTime();
                    }
                    break;
                case 1:                                                 /*  闹钟模式                    */
                    if (ucKey <= GucAlarmMaxTable[GuiItem][GuiCursor]) {
                        GucAlarmDispBuf[GuiIndex][GuiItem][GuiCursor] = ucKey;
                        GuiCursor = GucAlarmNextCursor[GuiItem][GuiCursor];
                        FromDispBuf();
                    }
                    break;
                default:
                    break;
                }
                    
            }
            break;
        case 1:                                                         /*  左移动键                    */
            if (ucFlag) {
                switch (GuiMode) {
                
                case 0:
                    GuiCursor = GucTimePreCursor[GuiItem][GuiCursor];
                    break;
                case 1:
                    GuiCursor = GucAlarmPreCursor[GuiItem][GuiCursor];
                    break;
                default:
                    break;
                }
            }
            else {
                switch (GuiMode) {
                
                case 0:
                    if (GuiItem > 0) {
                        GuiItem--;
                    }
                    else {
                        GuiItem = 1;
                    }
                    break;
                case 1:
                    if (GuiItem > 0) {
                        GuiItem--;
                    }
                    else {
                        GuiItem = 5;
                    }
                    break;
                default:
                    break;
                }
            }
            break;
        case 2:                                                         /*  右移动键                    */
            if (ucFlag) {
                switch (GuiMode) {
                
                case 0:
                    GuiCursor = GucTimeNextCursor[GuiItem][GuiCursor];
                    break;
                case 1:
                    GuiCursor = GucAlarmNextCursor[GuiItem][GuiCursor];
                    break;
                default:
                    break;
                }
            }
            else {
                switch (GuiMode) {
                
                case 0:
                    GuiItem = (GuiItem+1)%2;
                    break;
                case 1:
                    GuiItem = (GuiItem+1)%6;
                    break;
                default:
                    break;
                }
            }
            break;
        case 3:                                                         /*  上移动键                    */
            if (ucFlag) {
                switch (GuiMode) {
                
                case 0:
                    break;
                case 1:
                    break;
                default:
                    break;
                }
            }
            else {
                switch (GuiMode) {
                
                case 0:
                    break;
                case 1:
                    if(GuiIndex > 0 ) {
                        GuiIndex--;
                    }
                    else {
                        GuiIndex = MAX_ALARM-1;
                    }
                    GuiItem = 0;
                    break;
                default:
                    break;
                }
            }
            break;
        case 4:                                                         /*  下移动键                    */
            if (ucFlag) {
                switch (GuiMode) {
                
                case 0:
                    break;
                case 1:
                    break;
                default:
                    break;
                }
            }
            else {
                switch (GuiMode) {
                case 0:
                    break;
                case 1:
                    GuiIndex = (GuiIndex+1)%MAX_ALARM;
                    GuiItem = 0;
                    break;
                }
            }
            break;
        case 5:                                                         /*  模式切换键                  */
            if (!ucFlag) {
                GuiMode = (GuiMode+1)%2;
                GuiIndex = 0;
                GuiItem = 0;
            }
            break;
        case 6:                                                         /*  确定键                      */
            ucFlag = (uint8)(!ucFlag);
            if (ucFlag) {
                switch (GuiMode) {
                
                case 0:
                    GuiCursor = GucTimeNextCursor[GuiItem][GuiCursor];
                    break;
                case 1:
                    GuiCursor = GucAlarmNextCursor[GuiItem][GuiCursor];
                    break;
                default:
                    break;
                }
            }
            else {
                GuiCursor = 8;
            }
            break;
        default:
            break;
        }
        OS_EXIT_CRITICAL();                                             /*  退出临界区                  */
        
        while (1) {                                                     /*  等待按键释放                */
            OSTimeDly(4);                                               /*  延时                        */
            ucKey = (uint8)ZLG7290GetKey();                             /*  获取键值                    */
            if ((ucKey == 0) || (ucKey > 16)) {                         /*  按键释放                    */
                break;
            }
        }
    }
}
   
/*********************************************************************************************************
** Function name:           TaskDisp
**
** Descriptions:            显示任务
**
** input parameters:
** output parameters:
**
** Returned value           
**
**
** Created by:
** Created Date:
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void TaskDisp(void *pdata)
{
    uint8 i;
    
    pdata = pdata;
    
    while (1) {
        OSTimeDly(20);                                                  /*  延时                        */
        
        OS_ENTER_CRITICAL();
        ToDispBuf();                                                    /*  刷新显示缓冲区              */
        OS_EXIT_CRITICAL();
        
        switch (GuiMode) {                                              /*  显示信息                    */
        
        case 0:                                                         /*  时钟模式                    */
            for (i=0; i<8; i++) {
                ZLG7290ShowChar(i, (uint8)(((i==GuiCursor) ?
                                0x40 : 0x00) | GucTimeDispBuf[GuiItem][i]));
                OSTimeDly(1);
            }
            break;
        case 1:                                                         /*  闹钟模式                    */
            for (i=0; i<8; i++) {
                ZLG7290ShowChar(i, (uint8)(((i==GuiCursor) ?
                                0x40 : 0x00) | GucAlarmDispBuf[GuiIndex][GuiItem][i]));
                OSTimeDly(1);
            }
            break;
        default:
            break;
        }
    }
}

/*********************************************************************************************************
** Function name:           TaskCtrl
**
** Descriptions:            输出控制任务
**
** input parameters:
** output parameters:
**
** Returned value           
**
**
** Created by:
** Created Date:
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void TaskCtrl(void *pdata)
{
    INT8U   ucErr;
    unsigned short  usLevel[4];                                         /*  4路输出电平控制             */
    unsigned short  usTime[4];                                          /*  4路输出时间控制             */
    unsigned short *pusMsg;
    OS_MBOX_DATA mboxdataMsg;                                           /*  查询消息的结构体            */
    int   i;
    
    pdata = pdata;
    IO1DIR |=  (LED0 | LED1 | LED2 | LED3);                             /*  设置IO方向                  */
    IO1SET = (LED0 | LED1 | LED2 |LED3);                                /*  设置IO初值                  */
    
    while (1) {
        pusMsg = (unsigned short *)OSMboxPend(GmboxRingCtrl, 0, &ucErr);/*  获取消息                    */
        for (i=0; i<4; i++) {                                           /*  解释消息                    */
            usLevel[i] = pusMsg[2*i];

⌨️ 快捷键说明

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