新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于24C08带掉电记忆功能的两路电子跑表

基于24C08带掉电记忆功能的两路电子跑表

作者: 时间:2016-12-02 来源:网络 收藏

void display_sec(uchar add,uchar dat)
{
uchar a,b;
a=dat/10;
b=dat%10;
write_com(0x80+add);
write_dat(0x30+a);
write_dat(0x30+b);
write_dat(.);
}

本文引用地址:https://www.eepw.com.cn/article/201612/324662.htm

void display_sec1(uchar add,uchar dat)
{
uchar a,b;
a=dat/10;
b=dat%10;
write_com(0x80+0x40+add);
write_dat(0x30+a);
write_dat(0x30+b);
write_dat(.);
}

void display_min(uchar add,uchar dat)
{
uchar a,b;
a=dat/10;
b=dat%10;
write_com(0x80+add);
write_dat(0x30+a);
write_dat(0x30+b);
write_dat(:);
}

void display_min1(uchar add,uchar dat)
{
uchar a,b;
a=dat/10;
b=dat%10;
write_com(0x80+0x40+add);
write_dat(0x30+a);
write_dat(0x30+b);
write_dat(:);
}

void keyscan()
{
if (start==0)
{
TR0=~TR0;
TR1=~TR1;
}
if(puss==0)
{
delay(30);
while(!puss);
TR0=~TR0;
}

if(puss1==0)
{
delay(30);
while(!puss1);
TR1=~TR1;
}


if(clear==0)
{

delay(30);
while(!clear);
secbf=0;
write_add(0,0);
write_add(0,0);
sec=0;
write_add(1,0);
write_add(1,0);
min=0;
write_add(2,0);
write_add(2,0);
display_secbf(secbf);
display_sec(10,sec);
display_min(7,min);
TR0=0;

secbf1=0;
write_add(10,0);
write_add(10,0);
sec1=0;
write_add(11,0);
write_add(11,0);
min1=0;
write_add(12,0);
write_add(12,0);

display_secbf1(secbf);
display_sec1(10,sec);
display_min1(7,min);
TR1=0;
}
}


void N01()
{
display_secbf(secbf);
display_sec(10,sec);
display_min(7,min);
if(secbf==10)
{
secbf=0; //定时10秒,如果满了,从0重新开始
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
min=0;
write_add(2,min);
}
write_add(1,sec);
}
if(write_secbf==1)
{
write_secbf=0;
write_add(0,secbf);

}

}

void N02()
{
display_secbf1(secbf1);
display_sec1(10,sec1);
display_min1(7,min1);
if(secbf1==10)
{
secbf1=0; //定时10秒,如果满了,从0重新开始
sec1++;
if(sec1==60)
{
sec1=0;
min1++;
if(min1==60)
min1=0;
write_add(12,min1);
}

write_add(11,sec1);
}
if(write_secbf1==1)
{
write_secbf1=0;
write_add(10,secbf1);
}

}


void main()
{
gnd=0;
init_1602();
init_24();
secbf=read_add(0);//从地址2中读出以前保存的数据
if(secbf==10) secbf=0;//防止首次读出错误数据
sec=read_add(1);
min=read_add(2);

secbf1=read_add(10);//从地址2中读出以前保存的数据
if(secbf1==10) secbf1=0;//防止首次读出错误数据
sec1=read_add(11);
min1=read_add(12);


TMOD=0x11;//定时器工作方式1
ET0=1;//开启 定时器中断使能
EA=1;//总中断打开
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=0;//计时开始

ET1=1;//开启 定时器中断使能

TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
TR1=0;//计时开始
while(1)
{
keyscan();
N01();
N02();
}

}


void t0()interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
tent++;//每中断一次自加1,每次中断约50MS
if(tent==20)
{
tent=0;
secbf++;
write_secbf=1;//数据更新标志位,1/10秒写一次24C08
}
}

void t1()interrupt 3
{
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
tent1++;//每中断一次自加1,每次中断约50MS
if(tent1==20)
{
tent1=0;
secbf1++;
write_secbf1=1;//数据更新标志位,1/10秒写一次24C08
}
}


上一页 1 2 下一页

评论


技术专区

关闭