/******************************************************************** 
                            汇诚科技 
                                          http://www.ourhc.cn 
*********************************************************************/ 
#include <reg52.h> 
#include <stdio.h> 
#include<intrins.h> 
#define uchar unsigned char//宏定义无符号字符型 
#define uint unsigned int  //宏定义无符号整型 
//写的时候,是低电平改变数据,上升沿送入数据 
//读的时候,是低电平读入数据,下降沿使得从设备把数据放到总线上  
//读的时候,是低电平读,但没有读出,提供下降沿使得从设备把数据放到总线上 
 
sbit P11=P1^1;        //定时和时钟切换 
sbit P12=P1^2;        //时调整 
sbit P13=P1^3;        //分调整 
sbit P14=P1^4;        //秒调整 
 
sbit CLK =P3^5; 
sbit IO  =P3^6; 
sbit RST =P3^7; 
 
uchar m,m10,f,f10,s,s10; 
 
/******************************************************************** 
                            初始定义 
*********************************************************************/ 
code uchar seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示段码 数码管字跟 
uchar wei[6]={0Xfb,0Xf7,0XEf,0XDf,0XBf,0X7f};                                 //位的控制端 
/******************************************************************** 
                            延时函数 
*********************************************************************/ 
void delay(uchar t) 
{ 
  uchar i,j; 
   for(i=0;i<t;i++) 
   { 
            for(j=13;j>0;j--); 
         { ; 
         } 
   } 
} 
 
/******************************************************************** 
                            显示函数 
*********************************************************************/         
void Led() //显示函数 
{ 
/*****************数据转换*****************************/  
      P2=0XFF; 
          P0=seg7code[s10]; 
          P2=wei[0]; 
          delay(80); 
          P2=0XFF;   
      P0=seg7code; 
          P2=wei[1]; 
          delay(80); 
          P2=0XFF;   
             P0=seg7code[f10]; 
          P2=wei[2]; 
          delay(80); 
          P2=0XFF;   
      P0=seg7code[f]; 
          P2=wei[3]; 
          delay(80);  
          P2=0XFF; 
          P0=seg7code[m10]; 
          P2=wei[4]; 
          delay(80); 
          P2=0XFF;   
      P0=seg7code[m]; 
          P2=wei[5]; 
          delay(80);  
          P2=0XFF; 
} 
 
 
/**************************************************************** 
                                            DS1302函数 
****************************************************************/ 
/////////////////////DS1302//////////////////////// 
//--------------WriteOneByteData-----------------/ 
void WriteByte(uchar ucda) 
        { 
        uchar i;            
        for(i=8;i>0;i--) 
                { 
                IO=(bit)(ucda&0x01); 
                CLK=1;                    
                CLK=0; 
                ucda>>=1; 
                } 
        } 
 
//--------------ReadOneByteData-----------------/ 
uchar ReadByte(void) 
    { 
        uchar i,a; 
        for(i=8;i>0;i--) 
                {                                        
                a>>=1; 
                if(IO)a|=0x80; 
                CLK=1;            
                CLK=0; 
                }         
        return(a); 
        } 
//--------------WriteAddrFist,ThenWriteData-----------------/ 
 
void write1302(uchar Addr,uchar Data) 
        { 
        RST=0; 
        CLK=0; 
        RST=1; 
        WriteByte(Addr); 
        WriteByte(Data); 
        CLK=1; 
        RST=0; 
        } 
 
//--------------WriteAddrFirst,ThenReadData-----------------/ 
 
uchar read1302(uchar Addr) 
        { 
        uchar Data; 
        RST=0; 
        CLK=0;         
        RST=1; 
        WriteByte(Addr); 
        Data=ReadByte(); 
        CLK=1; 
        RST=0; 
        return(Data); 
        } 
 
 
/************************************************************************/ 
////////////////ds1302初始化//////////////////调整时间时用 
void csh1302(void) 
        {           
        CLK=0; 
        RST=0;  
        write1302(0x8e,0x00);//打开写保护 
        write1302(0x90,0x06);//禁止充电 
///////////////////////////////////////////////// 
        write1302(0x80,0x00);//预置秒 
        write1302(0x82,0x12);//预置分 
        write1302(0x84,0x09);//预置时 
        write1302(0x86,0x22);//预置日期 
        write1302(0x88,0x07);//预置月 
        //write1302(0x8a,0x02);//预置星期 
        write1302(0x8c,0x08);//预置年           
//////////////////////////////////////////////// 
        write1302(0x80,0x00);//启动时钟 
        write1302(0x8e,0x80);//关闭写保护 
        } 
/************************************************************************/ 
//////////////////显示函数//////////////////////////// 
void xianshi(void) 
{ 
        s10=read1302(0x85); 
        s=read1302(0x85)&0x0f;                //时 
        s10=s10>>4; 
        s10=s10&0x07; 
  //////////////////////////////////// 
    f10=read1302(0x83);                        //分 
        f=read1302(0x83)&0x0f; 
        f10=f10>>4; 
        f10=f10&0x07; 
  //////////////////////////////////// 
    m10=read1302(0x81);                         //秒 
        m=read1302(0x81)&0x0f; 
        m10=m10>>4; 
        m10=m10&0x07; 
 } 
 
/******************************************************************** 
                            主函数 
*********************************************************************/ 
void main() 
{ 
csh1302(); //初始化 
while(1) 
{ 
xianshi(); 
Led();//调用显示函数显示数据display_date 
} 
} 
 
         
/******************************************************************** 
                              结束 
*********************************************************************/ 
 
 
 
 |