原创 51学习7~~DS1302

2010-4-18 13:18 2172 8 8 分类: MCU/ 嵌入式

#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();
  }
}

文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /2 下一条