📄 main.c
字号:
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:
** Created Date:
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void SetTime(void)
{
unsigned char ucDay;
HOUR = (GtimeCurrentTime.ucHour > 23) ? 23 : GtimeCurrentTime.ucHour;
MIN = (GtimeCurrentTime.ucMin > 59) ? 59 : GtimeCurrentTime.ucMin;
SEC = (GtimeCurrentTime.ucSec > 59) ? 59 : GtimeCurrentTime.ucSec;
YEAR = GtimeCurrentTime.usYear;
if (GtimeCurrentTime.ucMon == 0) {
GtimeCurrentTime.ucMon++;
}
MONTH = (GtimeCurrentTime.ucMon > 12) ? 12 : GtimeCurrentTime.ucMon;
if (GtimeCurrentTime.ucDay == 0) {
GtimeCurrentTime.ucDay++;
}
if (GtimeCurrentTime.ucMon == 2) {
if (GtimeCurrentTime.usYear % 4) {
ucDay = 28;
}
else {
ucDay = 29;
}
}
else {
if (GtimeCurrentTime.ucMon > 7) {
if (GtimeCurrentTime.ucMon % 2) {
ucDay = 30;
}
else {
ucDay = 31;
}
}
else {
if (GtimeCurrentTime.ucMon % 2) {
ucDay = 31;
}
else {
ucDay = 30;
}
}
}
DOM = (GtimeCurrentTime.ucDay>ucDay) ? ucDay : GtimeCurrentTime.ucDay;
DOW = GtimeCurrentTime.ucWeek;
}
/*********************************************************************************************************
** Function name: RTC_Exception
**
** Descriptions: RTC中断服务程序
**
** input parameters:
** output parameters:
**
** Returned value
**
**
** Created by:
** Created Date:
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void RTC_Exception(void)
{
static unsigned short usMsg[10];
int i,j;
GetTime(); /* 更新当前时间 */
for (i=0; i<MAX_ALARM; i++) { /* 查询所有闹钟 */
if (GtimeCurrentTime.ucHour == GalarmRingTime[i].ucHour)
if (GtimeCurrentTime.ucMin == GalarmRingTime[i].ucMin)
if (GtimeCurrentTime.ucSec == GalarmRingTime[i].ucSec) {
if ((GalarmRingTime[i].ucEnable & 0x80) == 0x80) {
if (GalarmRingTime[i].ucEnable & (1 << GtimeCurrentTime.ucWeek)) {
break;
}
}
}
}
if (i < MAX_ALARM) { /* 闹钟到 */
for (j=0; j<4; j++) { /* 设置消息 */
usMsg[2*j] = GalarmRingTime[i].c[j].usLevel;
usMsg[2*j+1] = GalarmRingTime[i].c[j].usTime;
}
OSMboxPost(GmboxRingCtrl, (void *)usMsg); /* 发送消息 */
}
ILR = 0x03;
VICVectAddr = 0;
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -