MCU

51学习7~~DS1302

0
阅读(2760)

#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int

uchar Tab_Num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

sbit T_CLK=P3^7;
sbit T_IO =P3^6;
sbit T_RST=P3^5;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;

void delay(uint k)
{
 uchar m,n;
 for(m=0;m<k;m++)
  for(n=0;n<121;n++);
}

void RTInputByte(uchar d)
{
    uchar i;
    ACC = d;
    for(i=8; i>0; i--)
    {
        T_IO = ACC0;                 //每次都是把第一位给IO  然后再右移
        T_CLK = 1;
        T_CLK = 0;      //只跟CLK有关
        ACC = ACC >> 1;
    }
}

uchar RTOutputByte(void)
{
    uchar i;
    for(i=8; i>0; i--)
    {
        ACC = ACC >>1;        
        ACC7 = T_IO;       //每次都是把IO给ACC第七位  然后ACC右移
        T_CLK = 1;   //只跟CLK有关
        T_CLK = 0;
    }
    return(ACC);
}

void W1302(uchar ucAddr, uchar ucDa)
{
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;       //写入的时候RST一定是高电平   CLK 是上升沿
    RTInputByte(ucAddr);      
    RTInputByte(ucDa);      
    T_CLK = 1;
    T_RST = 0;
}

uchar R1302(uchar ucAddr)
{
    uchar ucData;
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(ucAddr);            
    ucData = RTOutputByte();        
    T_CLK = 1;
    T_RST = 0;
    return(ucData);
}

void Initial(void)   

{

       W1302 (0x8e,0X00);         //禁止写保护

       W1302 (0x80,0x55);          //秒位初始化

    delay(50);

       W1302 (0x82,0x58);        //分钟初始化
 
    delay(50);

       W1302 (0x84,0x15);                 //小时初始化
   
    delay(50);

 
 
    W1302(0x90,0xa5);       

       W1302 (0x8e,0x80);                 //允许写保护

}


void show(void)//显示和闪烁函数
{
unsigned char d, e;
unsigned int i;
for(i=0;i<1000;i++)
{
d=R1302(0x81);//读秒
e=d;
d=d>>4;
e=e&0x0f;

P0 = Tab_Num[ d ];//秒十位
P1=0xfd;
delay(5);
P0 = Tab_Num[ e ];//秒各位
P1=0xfc;
delay(5);

d=R1302(0x83);//读分钟
e=d;
d=d>>4;
e=e&0x0f;

P0=Tab_Num[ d ];//分十位
P1=0xff;
delay(5);
P0 = Tab_Num[ e ];//分各位
P1=0xfe;
delay(5);

d=R1302(0x85);//读小时
e=d;
d=d>>4;
e=e&0x0f;

P0 = Tab_Num[ d ];//小时十位
P1=0xf9;
delay(5);
P0 = Tab_Num[ e ];//小时各位
P1=0xf8;
delay(5);

}  

}



 

void main()
{
  Initial();

          
  while(1)
  {
    show();
  }
}