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