当前位置:首页 > 单片机 > 单片机
[导读]**************************************************************************************** 源程序文件名:RTC_DS12887.C 源程序名称:实时时钟芯片DS12887接口驱动的源程序文件 程序版本:  1.0 程序功能:

****************************************************************************************
源程序文件名:RTC_DS12887.C
源程序名称:实时时钟芯片DS12887接口驱动的源程序文件
程序版本:  1.0
程序功能:
    本程序是用ATmega16控制实时时钟芯片DS12887接口驱动的源程序文件。
程序说明:
    
函数入口参数:
函数出口参数:

编译工具软件:CodeVisionAVRC版本:1.24.6以上
链接子程序文件:

编作者:磊元
编作者E-Mail:PTZSW@163.COM
编制日期:2005年5月22日
------------------------------------------------------------------------------
适用器件芯片类型:Atmel公司生产的8位RISC单片机
器件芯片时钟频率:
存储器模式:小存储器模式
外部扩展存储器大小:0【字节】
数据堆栈大小:256【字节】
------------------------------------------------------------------------------
源程序版本历史:
2005年5月22日--------版本1.0:发行版本
****************************************************************************************
*/


/*======================================================================================
              本源程序包括的头部文件
======================================================================================*/
#include"LCDM_Day_Time.h"/*包含在液晶上显示日期和时间信息的头部文件*/
#include"RTC_DS12887.h"/*本程序的头部文件*/


/*======================================================================================
 程序指令代码清单
======================================================================================*/
/*----------------------------------------------------------------------------
全局静态变量定义:
----------------------------------------------------------------------------*/
staticvolatileUchar8tasks_time=0;/*时间消息的任务变量*/
/*时间消息的任务变量的各位定义如下:
┏━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━┓
┃BIT7┃BIT6┃BIT5┃BIT4┃BIT3┃BIT2┃BIT1┃BIT0┃
┣━━━━╋━━━━╋━━━━╋━━━━╋━━━━╋━━━━╋━━━━╋━━━━┫
┃保留┃保留┃保留┃保留┃保留┃蜂鸣声响┃闹钟告警┃时间更新┃
┗━━━━┻━━━━┻━━━━┻━━━━┻━━━━┻━━━━┻━━━━┻━━━━┛
*/
staticvolatileUint16buzzer_alarm_counter=0;/*蜂鸣器发出声响次数*/
staticvolatileBCD_TIMEtime=BCD_TIME_defaults;/*系统时间结构变量*/


/*----------------------------------------------------------------------------
函数功能:本函数用于控制蜂鸣器发出声响告警的操作,设定蜂鸣器频率为2000Hz。
备注:蜂鸣器设置为相应的控制引脚高电平时,蜂鸣器发出声响。
----------------------------------------------------------------------------*/
voidBuzzer(void)
{
Buzzer_DDR|=Buzzer_PINNum;/*设置蜂鸣器控制端口为输出引脚*/
Buzzer_PORT|=Buzzer_PINNum;/*打开蜂鸣器*/
delay_us(500);/*延时500us*/
Buzzer_PORT&=~Buzzer_PINNum;/*关闭蜂鸣器*/
}

#ifdefMCU_No_ExtendedParallelBus/*无扩展并行总线结构单片机的条件编译*/
/*----------------------------------------------------------------------------
函数功能:本函数用于虚拟扩展并行总线结构的向外围器件写入数据操作。
函数入口参数:AccessAddress------访问的外围器件地址。
WriteData----------写入的数据。
备注:本函数仅可访问外围器件的地址数不超过256个。
----------------------------------------------------------------------------*/
voidVEPB_WriteData(volatileUchar8AccessAddress,volatileUchar8WriteData)
{
VEPB_AD_DDR=0xFF;/*设置虚拟总线地址/数据总线的数据方向为输出*/
VEPB_AD_PORT=AccessAddress;/*写入访问的外围器件地址到总线上*/
VEPB_ALE_PORT|=VEPB_ALE_PINNum;/*地址锁存到外围器件*/
VEPB_ALE_PORT&=~VEPB_ALE_PINNum;
VEPB_AD_PORT=WriteData;/*写入数据*/
VEPB_WR_PORT&=~VEPB_WR_PINNum;/*使能写入数据*/
VEPB_WR_PORT|=VEPB_WR_PINNum;
}
/*----------------------------------------------------------------------------
函数功能:本函数用于虚拟扩展并行总线结构的从外围器件读取数据操作。
函数入口参数:AccessAddress------访问的外围器件地址。
函数出口参数:读取的数据。
备注:本函数仅可访问外围器件的地址数不超过256个。
----------------------------------------------------------------------------*/
Uchar8VEPB_ReadData(volatileUchar8AccessAddress)
{
volatileUchar8temp;/*出口参数寄存器变量*/
VEPB_AD_DDR=0xFF;/*设置虚拟总线地址/数据总线的数据方向为输出*/
VEPB_AD_PORT=AccessAddress;/*写入访问的外围器件地址到总线上*/
VEPB_ALE_PORT|=VEPB_ALE_PINNum;/*地址锁存到外围器件*/
VEPB_ALE_PORT&=~VEPB_ALE_PINNum;
VEPB_AD_DDR=0x00;/*设置虚拟总线地址/数据总线的数据方向为输入*/
VEPB_AD_PORT=0xFF;/*使能虚拟总线地址/数据总线的上拉电阻*/
VEPB_RD_PORT&=~VEPB_RD_PINNum;/*使能读取数据*/
temp=VEPB_AD_PIN;/*读取数据*/
temp=VEPB_AD_PIN;/*加大读取数据脉冲信号的宽度*/
VEPB_RD_PORT|=VEPB_RD_PINNum;
return(temp);
}
#endif/*"MCU_No_ExtendedParallelBus"条件编译结束*/

/*----------------------------------------------------------------------------
函数功能:本函数用于外部中断请求0中断向量的初始化操作。
备注:①.本函数仅在主函数中调用一次即可。
②.要使能中断还必须在主程序中打开全局中断使能功能,推荐其指令如下:
SREG|=BIT7;/*使能全局中断*/
----------------------------------------------------------------------------*/
voidexternal_INT0_initialization(void)
{
#ifdef_MEGA16_INCLUDED_/*目标器件芯片为ATMega16的条件编译*/
MCUCR&=~BIT0;/*设置外部中断请求0的触发方式为:下降沿触发*/
MCUCR|=BIT1;
GICR|=BIT6;/*使能外部中断请求0*/
GIFR|=BIT6;/*外部中断请求0标志位清零*/
#endif/*"_MEGA16_INCLUDED_"条件编译结束*/

#ifdef_MEGA128_INCLUDED_/*目标器件芯片为ATMega128的条件编译*/
EICRA&=~BIT0;/*设置外部中断请求0的触发方式为:下降沿触发*/
EICRA|=BIT1;
EIMSK|=BIT0;/*使能外部中断请求0*/
EIFR|=BIT6;/*外部中断请求0标志位清零*/
#endif/*"_MEGA128_INCLUDED_"条件编译结束*/
}

/*----------------------------------------------------------------------------
函数功能:本函数用于DS12887闹钟中断请求和更新周期结束中断请求处理的中断服务程序。
备注:①.注意:由于本函数为中断函数,故在调用和返回时无法进行明式数值传递,
因此将在函数体中隐式修改下面这几个全局静态变量数值。
⑴.时间消息的任务变量(tasks_time),用以通知系统执行相应的处理操作。
⑵.系统时间结构变量(time),从DS12887中读取更新的系统时间数值。
②.本函数需在设置的DS12887中断请求的中断向量函数中调用。在调用之前
需对该中断向量进行初始化,以使能该中断。例:如使用外部中断请求0,
可使用上面提供的external_INT0_initialization()函数进行初始化,
而将本本函数放在外部中断请求0服务程序中。
----------------------------------------------------------------------------*/
voidDS12887_INT_ISR(void)
{
registerUchar8temp;/*临时寄存器变量*/
registerUchar8temp2;/*临时寄存器变量2*/
DS12887_CS_PORT&=~DS12887_CS_PINNum;/*置DS12887片选控制引脚为L*/
#ifdefMCU_No_ExtendedParallelBus/*无扩展并行总线结构单片机的条件编译*/
/*读取DS12887寄存器C(中断标志寄存器)的内容,访问该寄存器后将自动清零所有
标志位,否则芯片将无法产生下一次中断请求。其次可对读取的中断标志位进行判断。*/
temp=VEPB_ReadData(DS12887_REG_C);
#else
temp=DS12887_REG_C;
#endif/*"MCU_No_ExtendedParallelBus"条件编译结束*/
temp2=temp;
/*检查是否为闹钟中断?是,则通知系统对闹钟请求执行相应的处理*/
if((temp&BIT5)==BIT5)
{
tasks_time|=BIT1;/*闹钟告警消息任务位置位*/
}
/*检查是否为更新周期结束中断?是,则通知系统对更新周期结束请求执行相应的处理*/
if((temp2&BIT4)==BIT4)
{
/*读取DS12887中更新的系统时间数值*/
#ifdefMCU_No_ExtendedParallelBus/*无扩展并行总线结构单片机的条件编译*/
time.BCD_Second=VEPB_ReadData(DS12887_Second);
time.BCD_Minute=VEPB_ReadData(DS12887_Minute);
time.BCD_Hour=VEPB_ReadData(DS12887_Hour);
time.BCD_Date=VEPB_ReadData(DS12887_Date);
time.BCD_Month=VEPB_ReadData(DS12887_Month);
time.BCD_Year=VEPB_ReadData(DS12887_Year);
time.BCD_Year_H=VEPB_ReadData(DS12887_Year_H);
time.BCD_Week=VEPB_ReadData(DS12887_Week);
#else
time.BCD_Second=DS12887_Second;
time.BCD_Minute=DS12887_Minute;
time.BCD_Hour=DS12887_Hour;
time.BCD_Date=DS12887_Date;
time.BCD_Month=DS12887_Month;
time.BCD_Year=DS12887_Year;
time.BCD_Year_H=DS12887_Year_H;
time.BCD_Week=DS12887_Week;
#endif/*"MCU_No_ExtendedParallelBus"条件编译结束*/
tasks_time|=BIT0;/*时间更新消息任务位置位*/
}
DS12887_CS_PORT|=DS12887_CS_PINNum;/*置DS12887片选控制引脚为H*/
}

/*----------------------------------------------------------------------------
函数功能:本函数用于DS12887的各控制输入/输出引脚定义和初始状态设置的初始化操作。
备注:本函数仅在主函数中调用一次即可。
----------------------------------------------------------------------------*/
voidRTC_DS12887_initialization(void)
{
registerUchar8temp;/*临时寄存器变量*/
/*下面这些语句用于设置DS12887的各控制引脚与MCU的连接定义和初始状态*/
DS12887_CS_DDR|=DS12887_CS_PINNum;/*设置DS12887片选控制为输出引脚*/
DS12887_CS_PORT|=DS12887_CS_PINNum;/*置DS12887片选控制引脚为H*/
DS12887_IRQ_DDR&=~DS12887_IRQ_PINNum;/*设置DS12887中断请求为输入引脚*/
DS12887_IRQ_PORT|=DS12887_IRQ_PINNum;/*使能DS12887中断请求引脚的上拉电阻*/
#ifdefMCU_No_ExtendedParallelBus/*无扩展并行总线结构单片机的条件编译*/
VEPB_ALE_DDR|=VEPB_ALE_PINNum;/*设置虚拟总线控制线地址锁存使能为输出引脚*/
VEPB_ALE_PORT&=~VEPB_ALE_PINNum;
VEPB_WR_DDR|=VEPB_WR_PINNum;/*设置虚拟总线控制线写使能信号为输出引脚*/
VEPB_WR_PORT|=VEPB_WR_PINNum;
VEPB_RD_DDR|=VEPB_RD_PINNum;/*设置虚拟总线控制线读锁存信号为输出引脚*/
VEPB_RD_PORT|=VEPB_RD_PINNum;
VEPB_AD_DDR=0x00;/*设置虚拟总线地址/数据总线的数据方向为输入*/
VEPB_AD_PORT=0xFF;/*使能虚拟总线地址/数据总线的上拉电阻*/
#else
MCUCR|=BIT7;/*使能外部存储器接口*/
#endif/*"MCU_No_ExtendedParallelBus"条件编译结束*/

/*下面这些语句用于DS12887初始化操作*/
DS12887_CS_PORT&=~DS12887_CS_PINNum;/*置DS12887片选控制引脚为L*/
#ifdefMCU_No_ExtendedParallelBus/*无扩展并行总线结构单片机的条件编译*/
/*启动晶体振荡器,关闭周期中断方波输出*/
VEPB_WriteData(DS12887_REG_A,0x20);
/*芯片处于正常工作状态、允许更新周期结束中断、闹钟中断保持原设置状态、
关闭周期中断、关闭方波输出、采用BCD码数据格式和24小时制模式*/
temp=VEPB_ReadData(DS12887_REG_B);
temp&=0x32;
temp|=0x12;
VEPB_WriteData(DS12887_REG_B,temp);
/*检查内置电池能量状态?如果电池耗尽,系统将进行告警*/
temp=VEPB_ReadData(DS12887_REG_D);
if((temp&BIT7)==0)
{
Buzzer();
}
/*写入年前两位数据为20*/
VEPB_WriteData(DS12887_Year_H,0x20);
/*读取DS12887寄存器C(中断标志寄存器)的内容,使该寄存器清零所有标志位*/
temp=VEPB_ReadData(DS12887_REG_C);
#else
/*启动晶体振荡器,关闭周期中断方波输出*/
DS12887_REG_A=0x20;
/*芯片处于正常工作状态、允许更新周期结束中断、关闭周期中断和闹钟中断、
关闭方波输出、采用BCD码数据格式和24小时制模式*/
temp=DS12887_REG_B;
temp&=0x32;
temp|=0x12;
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码)。
备注:
----------------------------------------------------------------------------*/
voidSET_DS12887_TimeRegister(volatileUchar8SET_BCD_Year_H,/*年前两位*/
volatileUchar8SET_BCD_Year,/*年*/
volatileUchar8SET_BCD_Month,/*月份*/
volatileUchar8SET_BCD_Date,/*日期*/
volatileUchar8SET_BCD_Hour,/*小时*/
volatileUchar8SET_BCD_Minute,/*分钟*/
volatileUchar8SET_BCD_Second,/*秒*/
volatileUchar8SET_BCD_Week)/*星期*/
{
registerUchar8temp;/*临时寄存器变量*/
registerUchar8temp2;/*临时寄存器变量2*/
SREG&=~BIT7;/*关闭全局中断*/
DS12887_CS_PORT&=~DS12887_CS_PINNum;/*置DS12887片选控制引脚为L*/
#ifdefMCU_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中的一个。
----------------------------------------------------------------------------*/
voidDS12887_AlarmClock(Uchar8AC_status)
{
registerUchar8temp;/*临时寄存器变量*/
if(AC_status==ON)
{
SREG&=~BIT7;/*关闭全局中断*/
DS12887_CS_PORT&=~DS12887_CS_PINNum;/*置DS12887片选控制引脚为L*/
#ifdefMCU_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*/
#ifdefMCU_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秒。
----------------------------------------------------------------------------*/
voidSET_DS12887_AlarmClock(Uchar8SET_BCD_HouAlm,Uchar8SET_BCD_MinAlm)
{
SREG&=~BIT7;/*关闭全局中断*/
DS12887_CS_PORT&=~DS12887_CS_PINNum;/*置DS12887片选控制引脚为L*/
#ifdefMCU_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(蜂鸣器发出声响次数)变量的数值。
----------------------------------------------------------------------------*/
voidTasks_AlarmClock(Uint16BAC_number)
{
registerUchar8temp;/*临时寄存器变量*/
registerUint16temp_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。
----------------------------------------------------------------------------*/
voidTasks_TimeUpdate(Uchar8LCDM_ShowMode)
{
registerUchar8temp;/*临时寄存器变量*/
temp=tasks_time;
/*如果更新中断消息任务位置位,将执行相应的更新处理操作*/
if((temp&BIT0)==BIT0)
{
switch(LCDM_ShowMode)
{
case8:
LCDM_DayTime_Show_8_16(&time);/*在液晶上显示8×16字符的日期和时间*/
break;
case16:
LCDM_DayTime_Show_16_16(&time);/*在液晶上显示16×16字符的日期和时间*/
break;
default:
LCDM_DayTime_Show_8_16(&time);/*在液晶上显示8×16字符的日期和时间*/
}
tasks_time&=~BIT0;/*时间更新消息任务位清零*/
}
}



/*
****************************************************************************************
 本C语言源程序文件到此结束
****************************************************************************************
*/


interrupt[EXT_INT0]voidext_int0_isr(void)
{
DS12887_INT_ISR();
}


voidmain(void)
{
LCDM_initialization();
external_INT0_initialization();
RTC_DS12887_initialization();
SREG|=BIT7;/*使能全局中断*/
//SET_DS12887_TimeRegister(0x20,0x05,0x05,0x31,0x22,0x51,0x00,0x03);
SET_DS12887_AlarmClock(0x11,0x12);
while(1)
{
Tasks_TimeUpdate(16);
Tasks_AlarmClock(0x0088);
};
}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

USB摄像头是一种采用USB接口的视频采集设备,其优点在于即插即用、操作简便,无需额外驱动程序,支持笔记本电脑,并且成本较低,可以支持远程网络观看。

关键字: usb摄像头 驱动程序

与两相双极步进电机的驱动电路相比,两相单极步进电机的驱动电路在输入段配置、内部逻辑及控制电路和驱动电路使用双通道方面基本相同,但是输出段的配置不同。

关键字: 四相步进电机 驱动程序 程序电路

本文介绍了如何实现嵌入式MICREL网卡的驱动程序开发和设计。首先,我们介绍了MICREL网卡的概述和工作原理。然后,详细探讨了驱动程序的开发流程,包括硬件和软件的配置以及驱动程序的编写和测试。最后,总结了几点注意事项和...

关键字: 嵌入式 MICREL网卡 驱动程序

在这篇文章中,小编将对OLED的相关内容和情况加以介绍以帮助大家增进对它的了解程度,和小编一起来阅读以下内容吧。

关键字: OLED 驱动程序 无源驱动

近日,英特尔发布了锐炫显卡的新版驱动更新。本次驱动更新涵盖了锐炫A770、A750、A380以及移动端的锐炫GPU,这使得英特尔锐炫整个家族的DX9性能都实现了显著提升。

关键字: 英特尔 显卡 驱动程序

摘 要:从硬件与软件方面介绍了基于PXI技术的1553B总线通讯模块的设计,并对PXI总线接口设计、驱动程序的开发、 SDRAM存储器的控制和1553B总线通信协议实现等关键技术进行了详细的阐述,为航空领域测控系统开发P...

关键字: PXI技术 驱动程序 SDRAM存储器 1553B总线

PnP全称Plug-and-Play,译文为即插即用。PnP的作用是自动配置低层计算机中的板卡和其他设备,然后告诉对应设备都做了什么。PnP的任务是把物理设备和软件设备驱动程序相配合,并操作设备,在每个设备和它的驱动程序...

关键字: PnP 驱动程序 操作设备

作 者:道哥,10年嵌入式开发老兵,专注于:C/C、嵌入式、Linux。关注下方公众号,回复【书籍】,获取Linux、嵌入式领域经典书籍;回复【PDF】,获取所有原创文章(PDF格式)。目录kill命令和信号使用kill...

关键字: 信号 应用程序 驱动程序

实时时钟(Real-TimeClock,RTC)常用于制作时钟日历。RTC电路分属于两个电源域:备份域和VDD电源域。RTC的核心计数部分在备份域中,可在VDD断电VBAT供电时保持RTC的计数,当系统复位或者从待机模式...

关键字: ST 实时时钟 RTC

驱动程序本质上是软件代码,主要作用是计算机系统与硬件设备之间完成数据传送的功能,只有借助驱动程序,两者才能通信并完成特定的功能。

关键字: 驱动程序 硬件设备 UNIX
关闭
关闭