⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1302.h

📁 16_32的led多功能点阵具有温度采集_18b20实时时钟_ds1302
💻 H
字号:
#include <REG52.H> 
#include "type.h" 
                
#define uint unsigned int
#define uchar unsigned char

uchar ACT[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};  

uchar aa[6],Sec,Cent,Hour,Year,Month,Day,Week,nian,yue,ri;        
sbit ACC_7 = ACC^7; 
sbit DS1302_CLK= P2^2; /*实时时钟时钟线引脚 */ 
sbit DS1302_IO=P2^1;   /*实时时钟数据线引脚 */ 
sbit DS1302_RST= P2^0; /*实时时钟复位线引脚 */ 

void DS1302InputByte (uchar d) ; 
void Write1302(uchar ucAddr, uchar ucDa); 
unsigned char RTOutputByte ( void ); 
unsigned char Read1302 ( unsigned char addr ); 
void Init_1302(void); 
void send_time(void); 
void disptime(void); 
void delay(uint k); 

void disp_1302()
{
register unsigned char i,j,k,l;
	for(i=0;i<11;i++)
  {
	if(i==3) 
	   {
        showtime(Year);
		}
	 if(i==4) 
	   { 		 
	    showtime(Month); 
    	}
	 if(i==5) 
	   { 		 
	    showtime(Day); 
    	}
	 if(i==6) 
	   { 		 
	    showtime(Hour); 
    	}
	 if(i==7) 
	   { 		 
	    showtime(Cent); 
    	}
	 if(i==8) 
	   { 		 
	    showtime(Sec); 
    	}
	 if(i==10) 
	   {
            for(j=0;j<2;j++)
         for(k=1;k<9;k++)
            {
             for(l=0;l<16;l++)
                {
                 dispram[l*BLKN]=dispram[l*BLKN]
<<1|dispram[l*BLKN+1]>>7;
	             dispram[l*BLKN+1]=dispram[l*BLKN+1]
<<1|dispram0[l*BLKN]>>7;
                 dispram0[l*BLKN]=dispram0[l*BLKN]
<<1|dispram0[l*BLKN+1]>>7;
                 dispram0[l*BLKN+1]=dispram0[l*BLKN+1]
<<1|xinqi[Week%16][l*BLKN+j]>>(8-k);
                 }
      delay(50);
      }
	     	}
     for(j=0;j<2;j++)
         for(k=1;k<9;k++)
            {
             for(l=0;l<16;l++)
                {
                 dispram[l*BLKN]=dispram[l*BLKN]
<<1|dispram[l*BLKN+1]>>7;
	             dispram[l*BLKN+1]=dispram[l*BLKN+1]
<<1|dispram0[l*BLKN]>>7;
                 dispram0[l*BLKN]=dispram0[l*BLKN]
<<1|dispram0[l*BLKN+1]>>7;
                 dispram0[l*BLKN+1]=dispram0[l*BLKN+1]
<<1|Timename[i][l*BLKN+j]>>(8-k);
                 }
      delay(50);
      }
  }

}

void showtime(uchar shijian)
{
 uchar l,k;
         for(k=1;k<9;k++)
            {
             for(l=0;l<16;l++)
                {
                 dispram[l*BLKN]=dispram[l*BLKN]
<<1|dispram[l*BLKN+1]>>7;
	             dispram[l*BLKN+1]=dispram[l*BLKN+1]
<<1|dispram0[l*BLKN]>>7;
                 dispram0[l*BLKN]=dispram0[l*BLKN]
<<1|dispram0[l*BLKN+1]>>7;
                 dispram0[l*BLKN+1]=dispram0[l*BLKN+1]
<<1|time[shijian/16][l]>>(8-k);
                 }
             delay(50);
			 }
			 for(k=1;k<9;k++)
            {
             for(l=0;l<16;l++)
                {
                 dispram[l*BLKN]=dispram[l*BLKN]
<<1|dispram[l*BLKN+1]>>7;
	             dispram[l*BLKN+1]=dispram[l*BLKN+1]
<<1|dispram0[l*BLKN]>>7;
                 dispram0[l*BLKN]=dispram0[l*BLKN]
<<1|dispram0[l*BLKN+1]>>7;
                 dispram0[l*BLKN+1]=dispram0[l*BLKN+1]
<<1|time[shijian%16][l]>>(8-k);
                 }
             delay(50);
			 }
			 }




/**********************1302**********************/ 
void DS1302InputByte (uchar d)         //实时时钟写入一字节(内部函数)                 
{  
   uchar i; 
for (i=0;i<8;i++)       //循环8次 写入数据 
   {  
     
      DS1302_IO=d&0x01;       //每次传输低字节 
 DS1302_CLK=1; 
      DS1302_CLK=0; 
                d>>=1;     //右移一位 
    } 
} 

void Write1302(uchar ucAddr, uchar ucDa)        //ucAddr: DS1302地址, ucData: 要写的数据(内部函数) 
{   
    DS1302_RST=0;                                //DS1302_RST引脚为低,数据传送中止 
    DS1302_CLK=0;                        //清零时钟总线 
    DS1302_RST = 1;                                //DS1302_RST引脚为高,逻辑控制有效 
    DS1302InputByte(ucAddr);               // 地址,命令  
    DS1302InputByte(ucDa);               // 写1Byte数据 
    DS1302_CLK =1; 
    DS1302_RST = 0; 
}  
unsigned char RTOutputByte ( void ) 
{ 
        unsigned char i; 
        for ( i=8; i>0; i-- )  
        { 
        ACC>>=1;         
        ACC_7=DS1302_IO; 
                DS1302_CLK = 1; 
                  
                DS1302_CLK = 0; 
} 
return (ACC);         
} 

unsigned char Read1302 ( unsigned char addr ) 
{ 
        unsigned char ucData; 
        DS1302_RST=0;                 
        DS1302_CLK=0;                 
        DS1302_RST = 1;         
 DS1302InputByte(addr);          
ucData=RTOutputByte(); 
        DS1302_CLK = 1; 
DS1302_RST=0; 
        return (ucData); 
        } 


void Init_1302(void) 
{ 
 Write1302(0x8e,0x00);//允许写操作 
Write1302(0x80,0x80); 
Write1302(0x90,0xa5);//充电 
Write1302(0x86,0x31);//日 
 Write1302(0x88,0x12);//月 
 Write1302(0x8c,0x04);//年 
 Write1302(0x8a,0x01);//星期 
 Write1302(0x84,0x22);//小时 
 Write1302(0x82,0x14);//分钟 
 Write1302(0x80,0x10);//秒 
 Write1302(0x8e,0x80);//禁止写操作 
 } 

/************************************************************************* 
 函 数 名:Get1302() 
 功    能:读取DS1302当前时间 
 说    明: 
 调    用:Read1302()  
 入口参数:ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月  周 年  
                                        7Byte (BCD码)   1B 1B 1B 1B 1B  1B 1B 
 返 回 值:无 
******************************************************************/ 

void send_time(void)//发送当前时间 
{ 

 Day=Read1302(0x8b); 
 Month=Read1302(0x89); 
 Year=Read1302(0x8d); 
 Week=Read1302(0x87); 
 Hour=Read1302(0x85); 
 Cent=Read1302(0x83); 
 Sec=Read1302(0x81); 

}

 /**********************1302end**********************/ 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -