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

📄 main.c

📁 《μCOS-II微小内核分析与程序设计-基于LPC2300》配套例程 第四章 电脑自动打铃器设计与实现
💻 C
📖 第 1 页 / 共 3 页
字号:
/****************************************Copyright (c)****************************************************
**                            Guangzhou ZHIYUAN electronics Co.,LTD.
**                                      
**                                 http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:           main.c
** Last modified Date:  2007-09-01
** Last Version:        1.0
** Descriptions:        The main() function example template
**
**--------------------------------------------------------------------------------------------------------
** Created by:          Zhenghongtao
** Created date:        2007-09-01
** Version:             1.0
** Descriptions:        The original version
**
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
*********************************************************************************************************/
#include "config.h"                                                     /*  系统头文件                  */
#include "i2c.h"

#define TASKKEY_ID              12                                      /*  定义键盘任务的ID            */
#define TASKKEY_PRIO            TASKKEY_ID                              /*  定义键盘任务的优先级        */
#define TASKKEY_STACK_SIZE      512                                     /*  定义键盘任务堆栈大小        */

#define TASKDISP_ID             13                                      /*  定义显示任务的ID            */
#define TASKDISP_PRIO           TASKDISP_ID                             /*  定义显示任务的优先级        */
#define TASKDISP_STACK_SIZE     512                                     /*  定义显示任务堆栈大小        */

#define TASKCTRL_ID             6                                       /*  定义控制任务的ID            */
#define TASKCTRL_PRIO           TASKCTRL_ID                             /*  定义控制任务的优先级        */
#define TASKCTRL_STACK_SIZE     512                                     /*  定义控制任务堆栈大小        */

OS_STK	TaskKeyStk[TASKKEY_STACK_SIZE];                                 /*  定义键盘任务的堆栈          */
OS_STK	TaskDispStk[TASKDISP_STACK_SIZE];                               /*  定义显示任务的堆栈          */
OS_STK	TaskCtrlStk[TASKCTRL_STACK_SIZE];                               /*  定义控制任务的堆栈          */


void TaskKey(void *pdata);                                              /*  TaskKey  键盘任务           */
void TaskDisp(void *pdata);                                             /*  TaskDisp 显示任务           */
void TaskCtrl(void *pdata);                                             /*  TaskCtrl 控制任务           */

void ToDispBuf(void);
void FromDispBuf(void);
void GetTime(void);
void SetTime(void);
void RTC_Exception(void);

OS_EVENT       *GmboxRingCtrl;

unsigned int    GuiMode   = 0;                                          /*  模式                        */
unsigned int    GuiCursor = 8;                                          /*  光标                        */
unsigned int    GuiIndex  = 0;                                          /*  索引                        */
unsigned int    GuiItem   = 0;                                          /*  条目                        */

/*********************************************************************************************************
  时钟结构定义
*********************************************************************************************************/
struct time {
    unsigned char       ucHour;                                         /*  时                          */
    unsigned char       ucMin;                                          /*  分                          */
    unsigned char       ucSec;                                          /*  秒                          */
    unsigned char       ucWeek;                                         /*  星期                        */
    unsigned short      usYear;                                         /*  年                          */
    unsigned char       ucMon;                                          /*  月                          */
    unsigned char       ucDay;                                          /*  日                          */
};
typedef struct time     TIME;
typedef TIME           *PTIME;
/*********************************************************************************************************
  闹钟结构定义
*********************************************************************************************************/
struct alarm {
    unsigned char       ucHour;                                         /*  时                          */
    unsigned char       ucMin;                                          /*  分                          */
    unsigned char       ucSec;                                          /*  秒                          */
    unsigned char       ucEnable;                                       /*  闹钟使能控制                */
    struct {
        unsigned short  usLevel;                                        /*  输出电平控制                */
        unsigned short  usTime;                                         /*  输出时间控制                */
    } c[4];                                                             /*  4路输出控制                 */
};
typedef struct alarm    ALARM;
typedef ALARM          *PALARM;

#define MAX_ALARM 4                                                     /*  最大闹钟个数                */

unsigned char       GucTimeDispBuf[2][8];                               /*  时钟显示缓冲区              */
unsigned char       GucAlarmDispBuf[MAX_ALARM][6][8];                   /*  闹钟显示缓冲区              */

TIME                GtimeCurrentTime;                                   /*  当前时间                    */
ALARM               GalarmRingTime[MAX_ALARM];                          /*  闹钟时间                    */

#define LED0    (1u<<18)
#define LED1    (1u<<19)
#define LED2    (1u<<20)
#define LED3    (1u<<21)

/*********************************************************************************************************
  时钟模式下,下一个光标索引表
*********************************************************************************************************/
const unsigned char GucTimeNextCursor[2][9] = {
    {7,0,1,2,3,4,7,5,7},
    {5,0,1,2,3,4,5,5,5}
};
/*********************************************************************************************************
  时钟模式下,上一个光标索引表
*********************************************************************************************************/
const unsigned char GucTimePreCursor[2][9] = {
    {1,2,3,4,5,7,7,0,7},
    {1,2,3,4,5,0,5,5,5}
};
/*********************************************************************************************************
  时钟模式下,最大值限定表
*********************************************************************************************************/
const unsigned char GucTimeMaxTable[2][8] = {
    {0x09,0x05,0x09,0x05,0x09,0x02,0x1f,0x06},
    {0x09,0x03,0x09,0x01,0x09,0x09,0x1f,0x1f}
};
/*********************************************************************************************************
  闹钟模式下,下一个光标索引表
*********************************************************************************************************/
const unsigned char GucAlarmNextCursor[6][9] = {
    {5,0,1,2,3,4,5,5,5},
    {7,0,1,2,3,4,5,6,7},
    {4,0,1,2,3,4,4,4,4},
    {4,0,1,2,3,4,4,4,4},
    {4,0,1,2,3,4,4,4,4},
    {4,0,1,2,3,4,4,4,4}
};
/*********************************************************************************************************
  闹钟模式下,上一个光标索引表
*********************************************************************************************************/
const unsigned char GucAlarmPreCursor[6][9] = {
    {1,2,3,4,5,0,5,5,5},
    {1,2,3,4,5,6,7,0,7},
    {1,2,3,4,0,4,4,4,4},
    {1,2,3,4,0,4,4,4,4},
    {1,2,3,4,0,4,4,4,4},
    {1,2,3,4,0,4,4,4,4}
};
/*********************************************************************************************************
  闹钟模式下,最大值限定表
*********************************************************************************************************/
const unsigned char GucAlarmMaxTable[6][8] = {
    {0x09,0x05,0x09,0x05,0x09,0x02,0x1f,0x1f},
    {0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01},
    {0x09,0x09,0x09,0x09,0x01,0x1f,0x1f,0x1f},
    {0x09,0x09,0x09,0x09,0x01,0x1f,0x1f,0x1f},
    {0x09,0x09,0x09,0x09,0x01,0x1f,0x1f,0x1f},
    {0x09,0x09,0x09,0x09,0x01,0x1f,0x1f,0x1f}
};

/*********************************************************************************************************
** Function name:           main
**
** Descriptions:            主函数
**
** input parameters:
** output parameters:
**
** Returned value           
**
**
** Created by:
** Created Date:
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
int main(void)
{
    OSInit();                                                           /*  初始化uC/OS-II              */
    OSTaskCreateExt(TaskKey,
                    (void *)0,
                    &TaskKeyStk[TASKKEY_STACK_SIZE - 1],
                    TASKKEY_PRIO,
                    TASKKEY_ID,
                    &TaskKeyStk[0],
                    TASKKEY_STACK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
                                                                        /*  创建键盘任务                */
    OSStart();                                                          /*  启动多任务操作系统          */
    return  (0);
}
/*********************************************************************************************************
** Function name:           ZLG7290GetKey
**
** Descriptions:            zlg7290读取键值
**
** input parameters:
** output parameters:
**
** Returned value           
**
**
** Created by:
** Created Date:
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
uint16 ZLG7290GetKey(void)
{
    uint8 temp[2];
    
    i2cRead( 0,                                                         /*  I2C0                        */
             0x70,                                                      /*  器件地址                    */
             temp,                                                      /*  接收数据的缓冲区            */
             1,                                                         /*  器件子地址                  */
             1,                                                         /*  器件子地址类型为单字节型    */
             2);                                                        /*  读取数据的长度              */
    while (i2cGetFlag(0) == I2C_BUSY);                                  /*  等待I2C操作完毕             */
    return (uint16)(temp[0] + (temp[1] * 256));
}
/*********************************************************************************************************
** Function name:           ZLG7290ShowChar
**
** Descriptions:            zlg7290显示数值
**
** input parameters:
** output parameters:
**
** Returned value           
**
**
** Created by:
** Created Date:
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void ZLG7290ShowChar(uint8 index, uint8 data)
{
    uint8 buf[2];
    
    buf[0] = (uint8)(0x60 | (index & 0x0f));
    buf[1] = data;
    i2cWrite(0,                                                         /*  I2C0                        */
             0x70,                                                      /*  器件地址                    */
             buf,                                                       /*  要写入数据的缓冲区          */
             0x07,                                                      /*  器件子地址                  */
             1,                                                         /*  器件子地址类型为单字节型    */
             2);                                                        /*  写入的数量                  */
    while (i2cGetFlag(0) == I2C_BUSY);                                  /*  等待I2C操作完毕             */
}
/*********************************************************************************************************
** Function name:           rtcInit
**
** Descriptions:            RTC初始化
**
** input parameters:
** output parameters:
**
** Returned value           
**
**
** Created by:
** Created Date:
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void rtcInit(void)
{
    if(ALYEAR != 2007) {                                                /*  初始化一次                  */
        CCR     = 0x00;                                                 /*  禁止时间计数器              */
        PREINT  = Fpclk/32768-1;                                        /*  设置基准时钟分频器          */
        PREFRAC = Fpclk%32768;
        CISS    = 0;                                                    /*  禁止次秒级中断              */
        AMR     = 0xFF;                                                 /*  禁止报警中断                */
        CIIR    = 0x01;                                                 /*  使能秒增量中断              */
        ILR     = 0x07;                                                 /*  清除RTC中断标志             */
        ALYEAR  = 2007;                                                 /*  初始化标志                  */
        
        YEAR    = 2007;                                                 /*  初始化时间寄存器            */
        MONTH   = 11;
        DOM     = 5;
        DOW     = 0;
        HOUR    = 12;
        MIN     = 0;
        SEC     = 0;
        CCR     = 0x11;
    }
    GetTime();                                                          /*  更新当前时间                */
}
/*********************************************************************************************************
** Function name:           TaskKey
**
** Descriptions:            键盘任务
**
** input parameters:
** output parameters:
**
** Returned value           
**
**
** Created by:
** Created Date:
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void TaskKey(void *pdata)
{
    unsigned char   ucKey;
    unsigned char   ucKey0;
    unsigned char   ucFlag = 0;                                         /*  修改状态标志                */
    
    pdata = pdata;                                                      /*  防止编译器警告              */
    
    TargetInit();
    OSTimeDly(OS_TICKS_PER_SEC/10);                                     /*  上电延时,等待zlg7290复位   */
    

⌨️ 快捷键说明

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