?? rtc_ds12887.lib
字號:
DS12887_REG_B = temp;
/* 檢查內置電池能量狀態?如果電池耗盡,系統將進行告警 */
temp = DS12887_REG_D;
if ((temp&BIT7)==0)
{
Buzzer();
}
/* 寫入年前兩位數據為 20 */
DS12887_Year_H = 0x20;
/* 讀取 DS12887 寄存器C(中斷標志寄存器)的內容,使該寄存器清零所有標志位 */
temp = DS12887_REG_C;
#endif /* "MCU_No_ExtendedParallelBus" 條件編譯結束 */
DS12887_CS_PORT |= DS12887_CS_PINNum;/* 置 DS12887 片選控制引腳為H */
}
/*----------------------------------------------------------------------------
函數功能: 本函數用于修改設置 DS12887 各個時標寄存器的時間數值(BCD 碼)操作。
函數入口參數:SET_BCD_Year_H ------ 設置的年前兩位時間數值(BCD碼)。
SET_BCD_Year -------- 設置的年時間數值(BCD碼)。
SET_BCD_Month ------- 設置的月份時間數值(BCD碼)。
SET_BCD_Date -------- 設置的日期時間數值(BCD碼)。
SET_BCD_Hour -------- 設置的小時時間數值(BCD碼)。
SET_BCD_Minute ------ 設置的分鐘時間數值(BCD碼)。
SET_BCD_Second ------ 設置的秒時間數值(BCD碼)。
SET_BCD_Week -------- 設置的星期時間數值(BCD碼)。
備注:
----------------------------------------------------------------------------*/
void SET_DS12887_TimeRegister(volatile Uchar8 SET_BCD_Year_H, /* 年前兩位 */
volatile Uchar8 SET_BCD_Year, /* 年 */
volatile Uchar8 SET_BCD_Month, /* 月份 */
volatile Uchar8 SET_BCD_Date, /* 日期 */
volatile Uchar8 SET_BCD_Hour, /* 小時 */
volatile Uchar8 SET_BCD_Minute, /* 分鐘 */
volatile Uchar8 SET_BCD_Second, /* 秒 */
volatile Uchar8 SET_BCD_Week) /* 星期 */
{
register Uchar8 temp; /* 臨時寄存器變量 */
register Uchar8 temp2; /* 臨時寄存器變量2 */
SREG &= ~BIT7; /* 關閉全局中斷 */
DS12887_CS_PORT &= ~DS12887_CS_PINNum;/* 置 DS12887 片選控制引腳為L */
#ifdef MCU_No_ExtendedParallelBus /* 無擴展并行總線結構單片機的條件編譯 */
/* 使芯片處于禁止更新狀態、其他設置保持原來狀態 */
temp2 = VEPB_ReadData(DS12887_REG_B);
temp = VEPB_ReadData(DS12887_REG_B);
temp |= BIT7;
VEPB_WriteData(DS12887_REG_B, temp);
VEPB_WriteData(DS12887_Year_H, SET_BCD_Year_H); /* 寫入年前兩位數據 */
VEPB_WriteData(DS12887_Year, SET_BCD_Year); /* 寫入年數據 */
VEPB_WriteData(DS12887_Month, SET_BCD_Month); /* 寫入月份數據 */
VEPB_WriteData(DS12887_Date, SET_BCD_Date); /* 寫入日期數據 */
VEPB_WriteData(DS12887_Hour, SET_BCD_Hour); /* 寫入小時數據 */
VEPB_WriteData(DS12887_Minute, SET_BCD_Minute); /* 寫入分鐘數據 */
VEPB_WriteData(DS12887_Second, SET_BCD_Second); /* 寫入秒數據 */
VEPB_WriteData(DS12887_Week, SET_BCD_Week); /* 寫入星期數據 */
/* 讀取 DS12887 寄存器C(中斷標志寄存器)的內容,使該寄存器清零所有標志位 */
temp = VEPB_ReadData(DS12887_REG_C);
/* 使芯片處于正常工作狀態、其他設置保持原來狀態 */
temp2 &= ~BIT7;
VEPB_WriteData(DS12887_REG_B, temp2);
#else
/* 使芯片處于禁止更新狀態、其他設置保持原來狀態 */
temp2 = DS12887_REG_B;
temp = DS12887_REG_B;
temp |= BIT7;
DS12887_REG_B = temp;
DS12887_Year_H = SET_BCD_Year_H; /* 寫入年前兩位數據 */
DS12887_Year = SET_BCD_Year; /* 寫入年數據 */
DS12887_Month = SET_BCD_Month; /* 寫入月份數據 */
DS12887_Date = SET_BCD_Date; /* 寫入日期數據 */
DS12887_Hour = SET_BCD_Hour; /* 寫入小時數據 */
DS12887_Minute = SET_BCD_Minute; /* 寫入分鐘數據 */
DS12887_Second = SET_BCD_Second; /* 寫入秒數據 */
DS12887_Week = SET_BCD_Week; /* 寫入星期數據 */
/* 讀取 DS12887 寄存器C(中斷標志寄存器)的內容,使該寄存器清零所有標志位 */
temp = DS12887_REG_C;
/* 使芯片處于正常工作狀態、其他設置保持原來狀態 */
temp2 &= ~BIT7;
DS12887_REG_B = temp2;
#endif /* "MCU_No_ExtendedParallelBus" 條件編譯結束 */
DS12887_CS_PORT |= DS12887_CS_PINNum;/* 置 DS12887 片選控制引腳為H */
SREG |= BIT7; /* 使能全局中斷 */
}
/*----------------------------------------------------------------------------
函數功能: 本函數用于控制 DS12887 鬧鐘打開/關閉的操作。
函數入口參數:AC_status ------ 僅可取二個值 ON 或 OFF 中的一個。
----------------------------------------------------------------------------*/
void DS12887_AlarmClock(Uchar8 AC_status)
{
register Uchar8 temp; /* 臨時寄存器變量 */
if (AC_status == ON)
{
SREG &= ~BIT7; /* 關閉全局中斷 */
DS12887_CS_PORT &= ~DS12887_CS_PINNum;/* 置 DS12887 片選控制引腳為L */
#ifdef MCU_No_ExtendedParallelBus /* 無擴展并行總線結構單片機的條件編譯 */
/* 設置允許鬧鐘中斷、其他設置保持原來狀態 */
temp = VEPB_ReadData(DS12887_REG_B);
temp |= BIT5;
VEPB_WriteData(DS12887_REG_B, temp);
#else
/* 設置允許鬧鐘中斷、其他設置保持原來狀態 */
temp = DS12887_REG_B;
temp |= BIT5;
DS12887_REG_B = temp;
#endif /* "MCU_No_ExtendedParallelBus" 條件編譯結束 */
DS12887_CS_PORT |= DS12887_CS_PINNum;/* 置 DS12887 片選控制引腳為H */
SREG |= BIT7; /* 使能全局中斷 */
}
if (AC_status == OFF)
{
SREG &= ~BIT7; /* 關閉全局中斷 */
DS12887_CS_PORT &= ~DS12887_CS_PINNum;/* 置 DS12887 片選控制引腳為L */
#ifdef MCU_No_ExtendedParallelBus /* 無擴展并行總線結構單片機的條件編譯 */
/* 設置禁止鬧鐘中斷、其他設置保持原來狀態 */
temp = VEPB_ReadData(DS12887_REG_B);
temp &= ~BIT5;
VEPB_WriteData(DS12887_REG_B, temp);
#else
/* 設置禁止鬧鐘中斷、其他設置保持原來狀態 */
temp = DS12887_REG_B;
temp &= ~BIT5;
DS12887_REG_B = temp;
#endif /* "MCU_No_ExtendedParallelBus" 條件編譯結束 */
DS12887_CS_PORT |= DS12887_CS_PINNum;/* 置 DS12887 片選控制引腳為H */
SREG |= BIT7; /* 使能全局中斷 */
}
}
/*----------------------------------------------------------------------------
函數功能: 本函數用于設置 DS12887 鬧鐘各個時標寄存器的時間數值(BCD 碼)操作。
函數入口參數:SET_BCD_HouAlm ------ 設置的分鐘鬧鐘時間數值(BCD碼)。
SET_BCD_MinAlm ------ 設置的小時鬧鐘時間數值(BCD碼)。
備注: ①.設置 DS12887 鬧鐘各個時標寄存器的時間數值后,將打開鬧鐘告警中斷。
②.本函數將秒鬧鐘時間數值自動設置為0秒。
----------------------------------------------------------------------------*/
void SET_DS12887_AlarmClock(Uchar8 SET_BCD_HouAlm, Uchar8 SET_BCD_MinAlm)
{
SREG &= ~BIT7; /* 關閉全局中斷 */
DS12887_CS_PORT &= ~DS12887_CS_PINNum;/* 置 DS12887 片選控制引腳為L */
#ifdef MCU_No_ExtendedParallelBus /* 無擴展并行總線結構單片機的條件編譯 */
VEPB_WriteData(DS12887_HouAlm, SET_BCD_HouAlm); /* 寫入小時鬧鐘數據 */
VEPB_WriteData(DS12887_MinAlm, SET_BCD_MinAlm); /* 寫入分鐘鬧鐘數據 */
VEPB_WriteData(DS12887_SecAlm, 0x00); /* 寫入秒鬧鐘數據 */
#else
DS12887_HouAlm = SET_BCD_HouAlm; /* 寫入小時鬧鐘數據 */
DS12887_MinAlm = SET_BCD_MinAlm; /* 寫入分鐘鬧鐘數據 */
DS12887_SecAlm = 0x00; /* 寫入秒鬧鐘數據 */
#endif /* "MCU_No_ExtendedParallelBus" 條件編譯結束 */
DS12887_CS_PORT |= DS12887_CS_PINNum;/* 置 DS12887 片選控制引腳為H */
DS12887_AlarmClock(ON); /* 打開鬧鐘告警中斷 */
SREG |= BIT7; /* 使能全局中斷 */
}
/*----------------------------------------------------------------------------
函數功能: 本函數用于鬧鐘告警中斷的任務時間消息處理操作。
函數入口參數:BAC_number ------ 蜂鳴器發出聲響次數值。
本函數還將在函數體中檢查隱含的全局靜態變量參數變量 tasks_time
(時間消息的任務)位1的布爾值而執行發出聲響告警操作。
備注: ①.本函數需要放在主函數的不間斷循環體中運行。
②.本函數在執行過程中將修改 tasks_time(時間消息的任務)變量的位1
和位2,與 buzzer_alarm_counte(蜂鳴器發出聲響次數)變量的數值。
----------------------------------------------------------------------------*/
void Tasks_AlarmClock(Uint16 BAC_number)
{
register Uchar8 temp; /* 臨時寄存器變量 */
register Uint16 temp_2; /* 臨時雙寄存器變量 */
temp = tasks_time;
/* 如果鬧鐘告警消息任務位置位,將執行發出聲響告警操作 */
if ((temp&BIT1)==BIT1)
{
temp = tasks_time;
if ((temp&BIT2)==BIT2)
{
temp_2 = buzzer_alarm_counter;
if (temp_2!=0x0000)
{
Buzzer(); /* 蜂鳴器發出一聲聲響 */
buzzer_alarm_counter--; /* 蜂鳴器發出聲響次數-1 */
LCDM_BackgroundLight(ON);
delay_ms(300);
LCDM_BackgroundLight(OFF);
Buzzer(); /* 蜂鳴器發出一聲聲響 */
delay_ms(200);
}
else
{
tasks_time &= ~BIT2; /* 蜂鳴聲響消息任務位清零 */
tasks_time &= ~BIT1; /* 鬧鐘告警消息任務位清零 */
}
}
else
{
buzzer_alarm_counter = BAC_number;/* 置蜂鳴器發出聲響次數值 */
tasks_time |= BIT2; /* 蜂鳴聲響消息任務位置位 */
}
}
}
/*----------------------------------------------------------------------------
函數功能: 本函數用于時間更新中斷的任務時間消息處理操作。
函數入口參數:LCDM_ShowMode --- 在液晶上顯示日期和時間的點陣字符樣式選擇值。
共有下列兩種選擇值和點陣字符樣式供選擇:
入口參數= 8 :8×16點陣字符樣式。
入口參數= 16 :16×16點陣字符樣式。
本函數還將在函數體中檢查隱含的全局靜態變量參數變量 tasks_time
(時間消息的任務)位0的布爾值而執行時間更新操作。
備注: ①.本函數需要放在主函數的不間斷循環體中運行。
②.本函數在執行過程中將修改 tasks_time(時間消息的任務)變量的位0。
----------------------------------------------------------------------------*/
void Tasks_TimeUpdate(Uchar8 LCDM_ShowMode)
{
register Uchar8 temp; /* 臨時寄存器變量 */
temp = tasks_time;
/* 如果更新中斷消息任務位置位,將執行相應的更新處理操作 */
if ((temp&BIT0)==BIT0)
{
switch (LCDM_ShowMode)
{
case 8:
LCDM_DayTime_Show_8_16(&time); /* 在液晶上顯示8×16字符的日期和時間 */
break;
case 16:
LCDM_DayTime_Show_16_16(&time);/* 在液晶上顯示16×16字符的日期和時間 */
break;
default:
LCDM_DayTime_Show_8_16(&time); /* 在液晶上顯示8×16字符的日期和時間 */
}
tasks_time &= ~BIT0; /* 時間更新消息任務位清零 */
}
}
/*
****************************************************************************************
本C語言源程序文件到此結束
****************************************************************************************
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -