#include "reg52.h"
#include "ds1302.h"
sbit YMQ_A=P2^5;
sbit YMQ_B=P2^6;
sbit YMQ_C=P2^7;
int SMG[18]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xc0,0x86,0x8e,0xbf,0x7f};
unsigned char Write_DS1302_addr[7]= {0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
unsigned char Read_DS1302_addr[7]= {0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
//22年4月6日20时2分3秒
unsigned char Timer[7]= {0x03,0x02,0x20,0x06,0x04,0x03,0x22};
void HC138(unsigned char n)
{
switch(n)
{
case 4:
YMQ_C=1;
YMQ_B=0;
YMQ_A=0;
break;
case 5:
YMQ_C=1;
YMQ_B=0;
YMQ_A=1;
break;
case 6:
YMQ_C=1;
YMQ_B=1;
YMQ_A=0;
break;
case 7:
YMQ_C=1;
YMQ_B=1;
YMQ_A=1;
break;
}
}
void DelaySMG(unsigned char t)
{
while(t--);
}
void SetSMG(unsigned char pos,unsigned char dat)
{
HC138(6);
P0=0x01<<pos;
HC138(7);
P0=dat;
}
void DisplayAll(unsigned char dat)
{
HC138(6);
P0=0xff;
HC138(7);
P0=dat;
}
void DisplaySMG()
{
unsigned char i;
SetSMG(7,SMG[Timer[0]%16]);
DelaySMG(500);
SetSMG(6,SMG[Timer[0]/16]);
DelaySMG(500);
SetSMG(5,0xbf);
DelaySMG(500);
SetSMG(4,SMG[Timer[1]%16]);
DelaySMG(500);
SetSMG(3,SMG[Timer[1]/16]);
DelaySMG(500);
SetSMG(2,0xbf);
DelaySMG(500);
SetSMG(1,SMG[Timer[2]%16]);
DelaySMG(500);
SetSMG(0,SMG[Timer[2]/16]);
DelaySMG(500);
DisplayAll(0xff);
DelaySMG(100);
}
void DS1302_Config()
{
char i;
Write_Ds1302_Byte(0x8e,0x00);
for(i=0; i<7; i++)
{
Write_Ds1302_Byte(Write_DS1302_addr[i],Timer[i]);
}
Write_Ds1302_Byte(0x8e,0x80);
}
void Read_Ds1302_Timer()
{
char i;
for(i=0;i<7;i++)
{
Timer[i]=Read_Ds1302_Byte(Read_DS1302_addr[i]);
}
}
void main()
{
DS1302_Config();
while(1)
{
Read_Ds1302_Timer();
DisplaySMG();
}
}