P2=0xfe;
P0=Tab_Num[j];
delaynms(2); P2=0xfd;
P0=Tab_Num[i]; delaynms(2); }
/************************************************************ 函数功能:显示分钟 入口参数:x
************************************************************/ void DisplayMinute(unsigned char x) {
unsigned char i,j; //i,j分别储存拆开的十位和个位
i=x/10; //取十位
j=x; //取个位 P2=0xfb;
P0=Tab_Num[j]; delaynms(2); P2=0xf7;
P0= Tab_Num[i]; delaynms(2); }
/********************************************************** 函数功能:显示小时 入口参数:x
***********************************************************/ void DisplayHour(unsigned char x) {
unsigned char i,j; //i,j分别储存拆开的十位和个位
i=x/10; //取十位
j=x; //取个位 P2=0xef;
P0=Tab_Num[j]; delaynms(2); P2=0xdf;
P0=Tab_Num[i]; delaynms(2); }
/********************************************************* 函数功能:显示日 入口参数:x
**********************************************************/
30
void DisplayDay(unsigned char x) {
unsigned char i,j; //i,j分别储存拆开的十位和个位
i=x/10; //取十位
j=x; //取个位 P2=0xfe;
P0= Tab_Num[j]; delaynms(2); P2=0xfd;
P0= Tab_Num[i]; delaynms(2); }
/************************************************************* 函数功能:显示月 入口参数:x
**************************************************************/ void DisplayMonth(unsigned char x) {
unsigned char i,j; //i,j分别储存拆开的十位和个位 i=x/10; //取十位
j=x; //取个位 P2=0xfb;
P0=Tab_Num[j]; delaynms(2); P2=0xf7;
P0=Tab_Num[i]; delaynms(2); }
/************************************************************ 函数功能:显示年 入口参数:x
************************************************************/ void DisplayYear(unsigned char x) {
unsigned char i,j; //i,j分别储存拆开的十位和个位
i=x/10; //取十位
j=x; //取个位 P2=0xef;
P0=Tab_Num[j]; delaynms(2); P2=0xdf;
P0=Tab_Num[i]; delaynms(2); }
31
/************************************************************* 日期显示子函数
*************************************************************/ void xianshi_rq() {
ReadValue = ReadSet1302(0x87); //从分寄存器读 Time_ri=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
//将读出数据转化
DisplayDay(Time_ri); //显示日
ReadValue = ReadSet1302(0x89); //从分寄存器读 Time_yue=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
//将读出数据转化
DisplayMonth(Time_yue); //显示月
ReadValue = ReadSet1302(0x8d); //从分寄存器读 Time_nian=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
//将读出数据转化
DisplayYear(Time_nian); //显示年 }
/************************************************************** //函数ftion1功能:时钟修改,根据按键次数,修改日,月,年标志全局
变量
**************************************************************/ void ftion1() {
secbit=0; //禁止时间时钟参数修改,清零日期修改标志位 minbit=0; hourbit=0; xianshi_rq();
timdata=0; // 清时间位置标志记录 rtimdata++; // 将日期修改记录加1 switch(rtimdata) {
Case0x01:daybit=1;monbit=0;yearbit=0;break;
//记录值为1,将时钟秒修改标志置1
case 0x02:daybit=0;monbit=1;yearbit=0; break;
//记录值为2,将时钟分修改标志置1
case 0x03:daybit=0;monbit=0;yearbit=1; break;
//记录值为3,将时钟时修改标志置1
case 0x04:rtimdata=0;daybit=0;monbit=0;yearbit=0;break;
//记录值为4,则清时钟单元修改位置1
default: break; } }
32
/*************************************************************** 根据标志位对相应的日,月,年单元加1
***************************************************************/ void cum1() {
if(daybit==1) //若时钟日修改标志位1;则日单元内容加1 {
if(Time_ri>=31) Time_ri=1; else
Time_ri++; } else if(monbit==1) //若时钟月修改标志位1;则月单元内容加1 {
if(Time_yue>=12) Time_yue=1; else
Time_yue++; } else if(yearbit==1) //若时钟年修改标志位1;则年单元内容加1 {
if(Time_nian>=99) Time_nian=0; else
Time_nian++; } }
/*************************************************************** 函数名: int_0
函数功能:外部中断0函数,切换到显示日期
***************************************************************/ void int_0() interrupt 0 //切换显示 {
uchar i,j; uint t=500;
i=P0; // 现场保护 j=P2;
while(t--) {
xianshi_rq(); // 调显示子函数 if(xiugai_rq==0||jia==0) {
xianshi_rq(); // 调显示子函数,作为延时去抖 delaynms(50);
33
if(xiugai_rq==0) {
t=500;
ftion1(); // 是日期时钟参数修改功能键,调
时钟设置函数ftion1
}
if(jia==0) {
t=500;
cum1(); // 是加1功能键,则调加1修改
设置函数cum1
Init_DS1302(); } } }
P2=j; // 恢复现场 P0=i; }
/*************************************************************** 时间显示函数
***************************************************************/ void xianshi_sj() {
ReadValue = ReadSet1302(0x81); //从秒寄存器读数据 Time_miao=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
//将读出数据转化
DisplaySecond(Time_miao); //显示秒
ReadValue = ReadSet1302(0x83); //从分寄存器读 Time_fen=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
//将读出数据转化
DisplayMinute(Time_fen); //显示分
ReadValue = ReadSet1302(0x85); //从分寄存器读 Time_shi=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
//将读出数据转化
DisplayHour(Time_shi); //显示小时 }
/*************************************************************** //函数ftion0功能:时钟修改,根据按键次数,修改秒,分,时标志全局
变量
***************************************************************/ void ftion0() {
34
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于DS1302的万年历毕业论文 数码管显现 附程序 硬件电路图(8)在线全文阅读。
相关推荐: