|
_@SZL%NA$I`36F]$}SRXZYX.png (66.54 KB, 下載次數(shù): 34)
下載附件
仿真
2019-5-13 16:03 上傳
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS1302_CLK=P3^2;
sbit DS1302_IO=P3^3;
sbit DS1302_RST=P3^4;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
sbit Tiaoshi=P3^7;
sbit Inck=P3^6;
uint count;
uchar temp,clsclk;
an=0x90;
Inck_flag=0x20;
typedef struct
{
uchar Second;
uchar Minute;
uchar Hour;
uchar TimeStr[6];
}
SYSTEMTIME;
SYSTEMTIME CurrentTime;
#define DS1302_SECONE 0x80
#define DS1302_MINUTE 0x82
#define DS1302_HOUR 0x84
void mdelay(uint count)
{
uchar i,j;
for(i=0;i<count;i++)
{
for(j=0;j<106;j++);
}
}
void DS1302InputByte(uchar d)
{
uchar i;
ACC=d;
for(i=8;i>0;i--)
{
DS1302_IO=ACC0;
DS1302_CLK=1;
DS1302_CLK=0;
ACC=ACC>>1;
}
}
uchar DS1302OutputByte(void)
{
uchar i;
for(i=8;i>0;i--)
{
ACC=ACC>>1;
ACC7=DS1302_IO;
DS1302_CLK=1;
DS1302_CLK=0;
}
return(ACC);
}
void Write1302(uchar ucAddr,uchar ucDa)
{
DS1302_RST=0;
DS1302_CLK=0;
DS1302_RST=1;
DS1302InputByte(ucAddr);
DS1302InputByte(ucDa);
}
uchar Read1302(ucAddr)
{
uchar ucData;
DS1302_RST=0;
DS1302_CLK=0;
DS1302_RST=1;
DS1302InputByte(ucAddr|0x01);
ucData=DS1302OutputByte();
DS1302_CLK=1;
DS1302_RST=0;
return(ucData);
}
void DS1302_SetTime(uchar Address,uchar Value)
{
Write1302(0x8E,0x00);
Write1302(Address,((Value/10)<<4|(Value%10)));
}
void DS1302_GetTime(SYSTEMTIME*Time)
{
uchar ReadValue;
ReadValue=Read1302(DS1302_SECONE);
Time->Second=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);
ReadValue=Read1302(DS1302_MINUTE);
Time->Minute=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);
ReadValue=Read1302(DS1302_HOUR);
Time->Hour=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);
}
void TimeToStr(SYSTEMTIME*Time)
{
Time->TimeStr[0]=Time->Hour/10;
Time->TimeStr[1]=Time->Hour%10;
Time->TimeStr[2]=Time->Minute/10;
Time->TimeStr[3]=Time->Minute%10;
Time->TimeStr[4]=Time->Second/10;
Time->TimeStr[5]=Time->Second%10;
}
void Dis(SYSTEMTIME*Time)
{
uchar disbit,shifb;
DS1302_GetTime(Time);
TimeToStr(Time);
disbit=1;
switch(count)
{
case 0:for(shifb=0;shifb<6;shifb++)
{
_nop_();_nop_();
P1=Time->TimeStr[shifb];
P2=_crol_(disbit,shifb);
mdelay(6);
P2=0;
}
break;
case 1:for(shifb=0;shifb<2;shifb++)
{
_nop_();_nop_();
P1=Time->TimeStr[shifb];
P2=_crol_(disbit,shifb);
mdelay(6);
P2=0;
}
break;
case 2:for(shifb=2;shifb<4;shifb++)
{
_nop_();_nop_();
P1=Time->TimeStr[shifb];
P2=_crol_(disbit,shifb);
mdelay(6);
P2=0;
}
break;
case 3:for(shifb=4;shifb<6;shifb++)
{
_nop_();_nop_();
P1=Time->TimeStr[shifb];
P2=_crol_(disbit,shifb);
mdelay(6);
P2=0;
}
break;
case 4:count=0;break;
default:count=0;
break;
}
}
void Setkey()
{
if(Tiaoshi==0)
{
mdelay(8);
count=count+1;
if(count==4)
count=0;
while(Tiaoshi==0);
}
}
void Inckey()
{
if(Inck==0)
{
mdelay(8);
switch(count)
{
case 1:temp=Read1302(DS1302_HOUR);
temp=((temp&0x70)>>4)*10+(temp&0x0F);
temp=temp+1;
if(temp>=24)
temp=0;
Inck_flag=1;
break;
case 2: temp=Read1302(DS1302_MINUTE);
temp=((temp&0x70)>>4)*10+(temp&0x0F);
temp=temp+1;
Inck_flag=1;
if(temp>=60)
temp=0;
break;
case 3: temp=Read1302(DS1302_SECONE);
temp=((temp&0x70)>>4)*10+(temp&0x0F);
temp=temp+1;
Inck_flag=1;
if(temp>=60)
temp=0;
break;
default :Inck_flag=0;break;
}
while(Inck==0);
}
}
void Keydone()
{
uchar clsclk;
if(count!=0)
{
Write1302(0x8e,0x00);
clsclk=Read1302(0x80);
Write1302(0x80,clsclk|0x80);
Write1302(0x8e,0x80);
}
Setkey();
switch(count)
{
case 1:do
{
Inckey();
if(Inck_flag==1)
{
temp=(temp/10)<<4|temp%10;
Write1302(0x8e,0x00);
Write1302(0x84,temp);
Write1302(0x8e,0x80);
Inck_flag=0;
}
Dis(&CurrentTime);
}
while(count==2);break;
case 2:do
{
Inckey();
if(Inck_flag==1)
{
temp=(temp/10)<<4|temp%10;
Write1302(0x8e,0x00);
Write1302(0x82,temp);
Write1302(0x8e,0x80);
Inck_flag=0;
}
Dis(&CurrentTime);
}
while(count==3);break;
case 3:do
{
Inckey();
if(Inck_flag==1)
{
temp=(temp/10)<<4|temp%10;
Write1302(0x8e,0x00);
Write1302(0x80,temp|0x80);
Write1302(0x8e,0x80);
Inck_flag=0;
}
Dis(&CurrentTime);
}
while(count==4);break;
case 4:count=0;
break;
default:break;
}
}
void main()
{
Inck_flag=0;
while(1)
{
Dis(&CurrentTime);
Setkey();
if(count!=0)
Keydone();
if(count==0)
{
clsclk=Read1302(0x80);
Write1302(0x80,clsclk&0x7f);
}
}
}
|
-
-
36.zip
2019-5-13 16:05 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
123.67 KB, 下載次數(shù): 9, 下載積分: 黑幣 -5
|