wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区
標題:
MiniARM2300電腦自動打鈴器設計與實現ucos操作系統
[打印本頁]
作者:
matmat
時間:
2018-3-12 19:06
標題:
MiniARM2300電腦自動打鈴器設計與實現ucos操作系統
采用ucos,有詳細的說明,經典的ucos操作系統實例詳解
0.png
(10.46 KB, 下載次數: 95)
下載附件
2018-3-13 02:15 上傳
單片機源程序如下:
/****************************************Copyright (c)****************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
**
**--------------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復位 */
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) {
/*顯示任務周期性的輸出全局變量的信息(時鐘和鬧鐘),100ms是一個經驗值,
用戶會覺得比較舒服,不會產生“系統死機”的感覺。 */
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];
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:
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
第四章 電腦自動打鈴器設計與實現.rar
(305.84 KB, 下載次數: 20)
2018-3-12 19:05 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.izizhuan.cn/bbs/)
Powered by Discuz! X3.1
欧美成人黑人
|
亚洲va欧美va国产综合剧情
|
欧美xxxx18国产
|
国产精品女人久久久久久
|
国产手机精品在线
|
日韩综合视频在线观看
|
精品国产欧美一区二区五十路
|
97精品视频在线播放
|
aaa级精品久久久国产片
|
最新中文字幕久久
|
天天色综合天天色
|
成人小视频免费看
|
在线观看毛片视频
|
国产精品自拍亚洲
|
免费观看一二区视频网站
|
av播放在线
|
亚洲日韩中文字幕一区
|
久久精品99久久无色码中文字幕
|
亚洲女人av
|
久久久精品日韩欧美
|
欧美性猛交xxxx黑人交
|
婷婷开心激情综合
|
亚洲欧洲日韩国产
|
国产精品香蕉在线观看
|
黄瓜视频免费观看在线观看www
|
日一区二区三区
|
久久久久久久久久久99999
|
日韩欧美中文在线
|
日韩亚洲成人av在线
|
3d动漫精品啪啪一区二区三区免费
|
91久久精品无嫩草影院
|
国产一区二区在线影院
|
亚洲午夜电影在线
|
中文字幕国产日韩
|
99在线看视频
|
少妇黄色一级片
|
久久精品波多野结衣
|
亚洲视频手机在线观看
|
免费在线看污
|
57pao成人永久免费
|
aa国产精品
|
综合久久久久久久
|
亚洲精品成人av
|
成人黄色免费片
|
欧美亚洲一二三区
|
全网免费在线播放视频入口
|
国产亚洲精品午夜高清影院
|
天天影院图片亚洲
|
免费一级欧美片在线观看网站
|
亚洲麻豆视频
|
悠悠色在线精品
|
国产午夜精品视频免费不卡69堂
|
超碰97在线资源
|
国产精品一区二区小说
|
久久久精品视频网站
|
青青操视频在线观看
|
91吃瓜在线观看
|
中文字幕一区二区三区欧美日韩
|
亚洲综合免费观看高清完整版
|
国产精久久久久久
|
国产精品免费麻豆入口
|
日本片在线观看
|
欧美有码视频
|
亚洲天堂2016
|
久久的精品视频
|
色乱码一区二区三区熟女
|
国产又大又粗又爽的毛片
|
√天堂资源中文www
|
国产中文字幕在线观看
|
精品国产一区二区三区
|
国产午夜精品理论片a级大结局
|
亚洲成人aaa
|
国产一级精品aaaaa看
|
国产一级黄色录像
|
亚洲人成绝费网站色ww
|
午夜激情视频在线观看
|
97久久视频
|
亚洲色图一区二区
|
国产二区视频在线观看
|
国产亚洲精品精品国产亚洲综合
|
99精品视频免费
|
精品久久久久久久久中文字幕
|
欧美精品videofree1080p
|
男人的天堂视频在线
|
紧身裙女教师波多野结衣
|
国产精品yjizz视频网一二区
|
caoporn视频在线观看
|
久久不射网站
|
欧美久久久久久蜜桃
|
亚洲字幕一区二区
|
92看片淫黄大片欧美看国产片
|
在线观看免费av网址
|
精品人妻一区二区三区三区四区
|
国产中文字幕在线视频
|
91日韩在线
|
午夜国产精品一区
|
国产精品亚洲欧美导航
|
精人妻一区二区三区
|
极品销魂一区二区三区
|
不卡视频观看
|
精品一区二区三区在线观看
|
亚洲国产精品视频在线观看
|
亚洲欧洲精品一区
|
日本少妇久久久
|
日本调教视频在线观看
|
九九综合久久
|
夜夜揉揉日日人人青青一国产精品
|
999久久久精品一区二区
|
2021国产精品久久精品
|
久久夜色精品国产
|
美女喷白浆视频
|
国产高清免费av
|
主播国产精品
|
蜜桃av一区二区三区电影
|
精品国产乱码久久久久久图片
|
四虎影院一区二区三区
|
日本少妇做爰全过程毛片
|
a天堂中文在线官网
|
欧美国产小视频
|
色网站国产精品
|
国产一级精品aaaaa看
|
懂色av懂色av粉嫩av
|
黄色一级影院
|
影音先锋成人在线电影
|
日韩电影在线观看中文字幕
|
久久国内精品一国内精品
|
992tv快乐视频
|
中文字幕+乱码+中文
|
在线观看a视频
|
久久精品亚洲
|
亚洲欧洲在线播放
|
国产免费黄色小视频
|
亚洲av无码乱码国产麻豆
|
av漫画网站在线观看
|
国产成人鲁色资源国产91色综
|
xxx欧美精品
|
五月激情婷婷在线
|
国产狂喷白浆在线观看视频
|
亚洲2区在线
|
洋洋av久久久久久久一区
|
亚洲伊人久久综合
|
性欧美videos
|
免费大秀视频在线播放
|
国产成人无码av
|
日本人妖在线
|
国产精品日韩精品欧美精品
|
日韩午夜中文字幕
|
欧美在线观看黄
|
粉嫩小泬无遮挡久久久久久
|
成人自拍av
|
中文字幕av资源一区
|
国产日韩精品一区二区
|
久久成人小视频
|
四虎在线观看
|
免费在线观看精品
|
日韩视频第一页
|
深夜视频在线观看
|
色综合小说天天综合网
|
欧美激情自拍
|
亚洲精品影视在线观看
|
免费黄色一级网站
|
一个人看的www免费观看视频
|
三级无遮挡在线观看
|
日韩激情视频在线观看
|
久久影院资源网
|
亚洲制服丝袜在线播放
|
日本在线免费观看视频
|
性高湖久久久久久久久
|
日韩视频欧美视频
|
真人bbbbbbbbb毛片
|
免费av网页
|
免费看黄裸体一级大秀欧美
|
色偷偷88888欧美精品久久久
|
久久久无码人妻精品无码
|
黄网视频在线观看
|
无码人妻精品一区二区三区9厂
|
欧美123区
|
亚洲一区免费在线观看
|
日本一区视频在线
|
污视频网站免费观看
|
蜜桃精品一区二区三区
|
91久久线看在观草草青青
|
久久手机在线视频
|
国产伊人网av.
|
亚洲精品午夜av福利久久蜜桃
|
亚洲精品在线不卡
|
成人免费看片载
|
一级aaaa毛片
|
美女露胸视频在线观看
|
亚洲美女屁股眼交3
|
日本中文不卡
|
丰满肥臀噗嗤啊x99av
|
毛片免费看不卡网站
|
亚洲免费在线看
|
午夜免费电影一区在线观看
|
亚洲在线天堂
|
成人精品久久
|
亚洲人高潮女人毛茸茸
|
亚洲中文字幕一区
|
黄色大片在线看
|
99re成人精品视频
|
狠狠色狠狠色综合人人
|
日本免费一区视频
|
精品免费av
|
中文字幕亚洲天堂
|
欧洲美熟女乱又伦
|
午夜羞羞小视频在线观看
|
亚洲人被黑人高潮完整版
|
美女黄色片网站
|
在线观看91
|
亚洲永久网站
|
国产精品久久av
|
一区二区三区午夜
|
日韩欧美中文在线观看
|
91精品国产手机
|
91精品国产高清91久久久久久
|
男女视频在线观看免费
|
中文字幕精品一区二区精品绿巨人
|
国产剧情久久久久久
|
一级做a爱片久久毛片
|
成人涩涩网站
|
亚洲欧美在线一区二区
|
中国特黄一级片
|
僵尸再翻生在线观看免费国语
|
欧美特级www
|
天天操,天天操
|
青青操视频在线
|
亚洲欧美一区二区视频
|
日韩国产一级片
|
国产九色porn网址
|
91丝袜高跟美女视频
|
日韩欧美精品一区二区
|
国产狂喷白浆在线观看视频
|
日韩电影一二三区
|
痴汉一区二区三区
|
日本久久网站
|
男女精品视频
|
成人欧美一区二区三区视频
|
最近中文字幕大全中文字幕免费
|
蜜桃传媒一区二区亚洲
|
美女福利视频导航
|
蜜臂av日日欢夜夜爽一区
|
92看片淫黄大片看国产片
|
亚洲伊人网在线观看
|
亚洲毛片视频
|
国产日本欧美在线观看
|
五月天福利视频
|
久久99伊人
|
超碰97网站
|
9797在线看片亚洲精品
|
国产一区二区成人久久免费影院
|
久久精品第九区免费观看
|
色综合色综合色综合
|
五月天国产视频
|
成人在线播放免费观看
|
欧美午夜电影网
|
亚洲av无码一区二区三区观看
|
sm久久捆绑调教精品一区
|
在线不卡免费欧美
|
香蕉久久久久久久
|
国产精品日韩精品在线播放
|
特级做a爱片免费69
|
奇米777国产一区国产二区
|
九九九久久久久久
|
国产偷拍一区二区
|
亚洲精品看片
|
国产成人精品免费视频大全最热
|
黄色片视频在线观看
|
午夜精品福利一区二区蜜股av
|
成人免费播放视频
|
午夜影院一区
|
亚洲欧美日韩精品久久亚洲区
|
欧美一级视频免费观看
|
成人在线免费小视频
|
国产精品美女免费
|
国产95在线|亚洲
|
99久久精品99国产精品
|
131美女爱做视频
|
色影院视频在线
|
欧美一卡二卡在线观看
|
欧美黑人一级片
|
国产一区二区三区探花
|
国产精品欧美日韩
|
国产福利微拍精品一区二区
|
国产乱妇乱子在线播视频播放网站
|
91精品国产91久久综合桃花
|
国语对白在线播放
|
欧美日韩精品在线一区
|
91精品久久久久久久久久另类
|
一个人看免费www视频有多爽
|
国产亚洲综合在线
|
爱豆国产剧免费观看大全剧苏畅
|
亚洲av网址在线
|
影音先锋中文字幕一区
|
777色狠狠一区二区三区
|
极品尤物一区二区
|
日韩一区二区三区色
|
久久频这里精品99香蕉
|
91精品国自产在线偷拍蜜桃
|
国产精品夜夜嗨
|
水蜜桃色314在线观看
|
超碰在线caoporen
|
日韩大陆欧美高清视频区
|
懂色av蜜臀av粉嫩av喷吹
|
性xx色xx综合久久久xx
|
欧美a级黄色大片
|
婷婷五月在线视频
|
国产视频久久久久
|
国产绿帽刺激高潮对白
|
美女网站一区二区
|
成人免费观看cn
|
√天堂8资源中文在线
|
精品久久久91
|
日本亚洲欧美美色
|
久久久精品中文字幕麻豆发布
|
中文字幕乱码在线人视频
|
久久国产精品免费一区二区三区
|
日韩av电影手机在线观看
|
九九视频九九热
|
亚洲成va人在线观看
|
少妇被躁爽到高潮无码文
|
中文字幕日韩一区二区不卡
|
亚洲视频电影
|
秋霞a级毛片在线看
|
亚洲人成电影网站
|
无码国产伦一区二区三区视频
|
中文字幕亚洲在线
|
亚洲不卡1卡2卡三卡2021麻豆
|
aaa欧美色吧激情视频
|
18深夜在线观看免费视频
|
av综合网页
|
999在线观看免费大全电视剧
|
日本调教视频在线观看
|
日韩一区二区三区观看
|
91片黄在线观看喷潮
|
国产馆精品极品
|
黄色片免费网址
|
欧美精品密入口播放
|
国产伦精品一区二区三区照片
|
日本国产在线
|
亚洲奶大毛多的老太婆
|
亚洲综合天堂网
|
亚洲色图欧美在线
|
青青草激情视频
|
老司机久久99久久精品播放免费
|
av天堂永久资源网
|
国产一区影院
|
91精品视频播放
|
日本午夜在线
|
少妇久久久久久
|
国产xxxx做受性欧美88
|
欧美日韩中文字幕在线视频
|
欧美日韩一级黄色片
|
国产美女在线精品
|
日本一区二区在线观看视频
|
成人亚洲一区
|
青春草在线视频免费观看
|
天天免费亚洲黑人免费
|
国产精品中文字幕在线观看
|
性感av在线播放
|
xxxx性欧美
|
av高清在线观看
|
日韩一区二区精品葵司在线
|
视频在线你懂的
|
91福利国产精品
|
国产美女自慰在线观看
|
亚洲国产精品精华液2区45
|
亚洲成人生活片
|
七七婷婷婷婷精品国产
|
丰满少妇中文字幕
|
婷婷综合激情
|
凹凸国产熟女精品视频
|
97一区二区国产好的精华液
|
精品毛片乱码1区2区3区
|
天天插天天干天天操
|
亚洲综合久久av
|
中文字幕激情视频
|
国产三级欧美三级日产三级99
|
国产精品99久久久久久成人
|
奇米777欧美一区二区
|
菠萝菠萝蜜网站
|
国产日韩综合
|
台湾佬美性中文
|
午夜视频一区
|
一级淫片在线观看
|
午夜欧美在线
|
在线免费观看av的网站
|
久久中文视频
|
久久午夜夜伦鲁鲁一区二区
|
久操国产精品
|
青青青免费在线
|
女人av一区
|
免费在线看污
|
国内久久视频
|
www.爱色av.com
|
精品一区二区男人吃奶
|
亚洲区一区二区三区
|
视频精品导航
|
欧美成人一区二区在线
|
丝袜美腿一区
|