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

📄 ds1302.h

📁 用proteus仿真的万年历.rar
💻 H
字号:
/***************************************************
* 标题:DS1302读写                                 *
* 作者:Wujieflash                                 *
* 日期:2008年1月14日                              *
* 说明:日历显示范围:2000年--2099年               *
***************************************************/
#define  RST  RC0
#define  SCLK RC1 
#define  IO   RC2
uch flag=0;
int Naoling_hour=6;
int Naoling_minute=30;
int Naoling_hour_1;
int Naoling_minute_1;
int Naoling_hour_2;
int Naoling_minute_2;
int Naoling_hour_3;
int Naoling_minute_3;
uch kk=0;
uch second=1,minute=1,hour=1,year=1,month=1,date=1,day=1,Naohour=1,Naominute=1,kaiguan=1;
uch clock[]={0};
uch DisCash[]={0x00,0x30,0x09,0x16,0x01,0x03,0x09};	
/////往1302写入1Byte数据////////////////////////
void RTInputByte(uch d) 
{ 
    uch i;
    TRISC=0x00;
    for(i=8; i>0; i--)
    {
      IO = d&0x01;      //取最低位
      SCLK = 1;         //上升沿发送
      SCLK = 0;         //恢复
      d = d >> 1;       
    } 
}
///////从1302读取1Byte数据////////////////////////
uch RTOutputByte(void) 
{ 
    uch i,val=0;
    TRISC2=1;            //设置为输入
    for(i=8; i>0; i--)
    {
      val = val >>1;         
      if(IO)val=val|0x80;// 从最低位开始接收
      SCLK = 1;          //下降沿接收
      SCLK = 0; 
    } 
     return(val); 
}
///////先写地址,后写命令/数据//////////////////////////
void W1302(uch ucAddr, uch ucDa)
{
    RST = 0;
    SCLK = 0;
    RST = 1;                  //打开DS1302
    RTInputByte(ucAddr);      // /* 地址,命令 */
    RTInputByte(ucDa);        // /* 写1Byte数据*/
    SCLK = 1;
    RST = 0;                  //关闭DS1302
}
///////先写地址,后读命令/数据////////////////////////
uch R1302(uch ucAddr)
{
    uch ucData;
    RST = 0;
    SCLK = 0;
    RST = 1;
    RTInputByte(ucAddr);            // /* 地址,命令 */
    ucData = RTOutputByte();        // /* 读1Byte数据 */
    SCLK = 1;
    RST = 0;
    return(ucData);
}
/////////向1302写入 秒 分 时 日 月 星期 年 */////////////
void Set1302(uch *pClock) 
{
    uch i;
    uch ucAddr = 0x80;          //起使地址
    W1302(0x8e,0x00);           ///* 控制命令,WP=0,允许写操作*/
    for(i =7; i>0; i--)
    { 
      W1302(ucAddr,*pClock);    ///* 秒 分 时 日 月 星期 年 */ 
      pClock++;
      ucAddr +=2;               //写地址加2
    }
     W1302(0x8e,0x80);          // /* 控制命令,WP=1,写保护*/
}
////////从1302读出 秒 分 时 日 月 星期 年 *//////////////////
void v_Get1302(unsigned char  ucCurtime[]) 
{
unsigned char i;
unsigned char ucAddr = 0x81;
for(i=0;i<7;i++)
   {
      ucCurtime[i] = R1302(ucAddr);///*格式为: 秒 分 时 日 月 星期 年 */
      ucAddr += 2;
   }
}

/////////与LCD的显示接口//////////////////////
void display()
{
	uch i;
	for(i=0;i<7;i++)
	{
		clock[i]=clock[i]/16*10+clock[i]%16;//转换为十六进制
	}
	if(second==1)ChangeToLCD(0,111,clock[0],1);//显示秒
    if(minute==1)ChangeToLCD(0,88,clock[1],1); //显示分
    if(hour==1)ChangeToLCD(0,64,clock[2],1);   //显示时
    if(year==1)ChangeToLCD(0,24,clock[6],1);   //显示年
	if(month==1)ChangeToLCD(2,2,clock[4],0);    //显示月
	if(date==1)ChangeToLCD3(2,24,clock[3]);	  //显示日
	if((Naohour==1)&&(kk==1))ChangeToLCD(4,64,Naoling_hour,1);
	if((Naominute==1)&&(kk==1))ChangeToLCD(4,88,Naoling_minute,1);
	if(kk==1)Show8X16(4,80,maohao,1);
	if(kaiguan==1)
	{
		if(kk==0)
		{
			Show16X16(4,111,guan,1);
			Show8X16(4,64,noshu,1);
			Show8X16(4,72,noshu,1);
			Show8X16(4,80,noshu,1);
			Show8X16(4,88,noshu,1);
			Show8X16(4,96,noshu,1);
		}
		if(kk==1)Show16X16(4,111,kai,1);
	}
}	

	

⌨️ 快捷键说明

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