基于DS1302的万年历毕业论文 数码管显现 附程序 硬件电路图(8)

2019-02-15 21:25

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


基于DS1302的万年历毕业论文 数码管显现 附程序 硬件电路图(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中原城市群旅游合作问题研究

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: