📄 main.c
字号:
/****************************************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 + -