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

📄 ds1302.c

📁 万年历带温度示
💻 C
📖 第 1 页 / 共 2 页
字号:
					{	if(time[9]>0)
						time[9]=time[9]-1;
					Keybit2=0;
					}
				   }break;

		 case 10: { if(!Mu)												//年
					{Menu=9;
					Keybit2=0;
					}
					if(!Up)
					{	if(time[10]<9)						
						time[10]=time[10]+1;							
					Keybit2=0;
					}
					if(!Dn)
					{	if(time[10]>0)
						time[10]=time[10]-1;
					Keybit2=0;
					}
				  }break;
////////////////////////////////////////////////////////////////////////////////////////////////////////
		case 11:	{	if(!Mu)												//分
						{	delay(5);
					       while(!Mu)
						   {delay(5);}
						   delay(5);
					 	x24c02_write(0x10,music[0]);
					 	_nop_();
					 	_nop_();
					 	x24c02_write(0x11,music[1]);
					 	_nop_();
					 	_nop_();
					 	x24c02_write(0x12,music[2]);
					 	_nop_();
					 	_nop_();
					 	x24c02_write(0x13,music[3]);
					 	_nop_();
						_nop_();
					 	Keybit2=0;
					 	Menu=10;
							

						}
					if(!Up)
					{	if(music[0]<9)						
						music[0]=music[0]+1;							
					Keybit2=0;
					}
					if(!Dn)
					{	if(music[0]>0)
						music[0]=music[0]-1;
					Keybit2=0;
					}
				}break;

		case 12:	{	if(!Mu)													//分
					{Menu=11;
					Keybit2=0;
					}
					if(!Up)
					{	if(music[1]<5)
						music[1]=music[1]+1;
					Keybit2=0;
					}
					if(!Dn)
					{	if(music[1]>0)
						music[1]=music[1]-1;
					Keybit2=0;
					}
				}break;

		case 13:	{	if(!Mu)								//时
					{Menu=12;
					Keybit2=0;
					}
					if(!Up)
					{
						if(music[3]==2)
						{if(music[2]<3)
						 music[2]=music[2]+1;					
						}

						if(music[3]<=1)
						{if(music[2]<9)
						 music[2]=music[2]+1;					
						}					
					Keybit2=0;
					}
					if(!Dn)
					{
						if(music[2]>0)
						music[2]=music[2]-1;
						Keybit2=0;
					}
				 }break;

		case 14:	{	if(!Mu)													//时
					{Menu=13;
				  	 Keybit2=0;
					}
					if(!Up)
					{	if(music[3]<2)
						music[3]=music[3]+1;
					Keybit2=0;
					}
					if(!Dn)
					{	if(music[3]>0)
						music[3]=music[3]-1;
					Keybit2=0;
					}	
				 }break;	
//////////////////////////////////////////////////////////////////////

					default:  break;			
		}
	  }
	}	 
         if(Mu&&Up&&Dn) 
         {delay(10);
	         if(Mu&&Up&&Dn)
        	  Keybit2=1;
		  }
}
////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////子程序包括对DS18b20的操作等///////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////

void ini(void)
{		DQ=0;
      delay1(100);
      DQ=1;
      delay1(10);
      if(DQ==0)
	  {DQ=1;
	  ds1820bit=0;
	  }
      else ds1820bit=1;			
      delay1(90);
}


void wrcom(uchar com)
{
      uchar a;
      DQ=0;
      _Nop();;
      _Nop();;
      DQ=1;
      _Nop();;
      _Nop();;
      a=com&(0x01<<0);
      if(a==0)DQ=0;
      else DQ=1;
      delay1(5);
      DQ=1;
      _Nop();;
      _Nop();;
      DQ=0;
      _Nop();;
      _Nop();;
      DQ=1;
      _Nop();;
      _Nop();;
      a=com&(0x01<<1);
      if(a==0)DQ=0;
      else DQ=1;
      delay1(5);
      DQ=1;
      _Nop();;
      _Nop();;
      DQ=0;
      _Nop();;
      _Nop();;
      DQ=1;
      _Nop();;
      _Nop();;
      a=com&(0x01<<2);
      if(a==0)DQ=0;
      else DQ=1;
      delay1(5);
      DQ=1;
      _Nop();;
      _Nop();;
      DQ=0;
      _Nop();;
      _Nop();;
      DQ=1;
      _Nop();;
      _Nop();;
      a=com&(0x01<<3);
      if(a==0)DQ=0;
      else DQ=1;
      delay1(5);
      DQ=1;
      _Nop();;
      _Nop();;
      DQ=0;
      _Nop();;
      _Nop();;
      DQ=1;
      _Nop();;
      _Nop();;
      a=com&(0x01<<4);
      if(a==0)DQ=0;
      else DQ=1;
      delay1(5);
      DQ=1;
      _Nop();;
      _Nop();;
      DQ=0;
      _Nop();;
      _Nop();;
      DQ=1;
      _Nop();;
      _Nop();;
      a=com&(0x01<<5);
      if(a==0)DQ=0;
      else DQ=1;
      delay1(5);
      DQ=1;
      _Nop();;
      _Nop();;
      DQ=0;
      _Nop();;
      _Nop();;
      DQ=1;
      _Nop();;
      _Nop();;
      a=com&(0x01<<6);
      if(a==0)DQ=0;
      else DQ=1;
      delay1(5);
      DQ=1;
      _Nop();;
      _Nop();;
      DQ=0;
      _Nop();;
      _Nop();;
      DQ=1;
      _Nop();;
      _Nop();;
      a=com&(0x01<<7);
      if(a==0)DQ=0;
      else DQ=1;
      delay1(5);
      DQ=1;
      _Nop();;
      _Nop();;  	   
}      

uchar rbyte(void)
{      uchar i; 
      uchar a;
      a=0;
      for(i=0;i<8;i++)
      {
        DQ=1;
        _Nop();;
        _Nop();;
        DQ=0;
        _Nop();;
        _Nop();;
        _Nop();;
        DQ=1;
        delay1(1);
        if(DQ==0) a=a;
        else a=(0x01<<i)|a;
        delay1(10);
       }
       return(a);
}

void ds1(void)
{  	
        ini();
		_Nop();;
        _Nop();;
        wrcom(0xcc); 				
        _Nop();;
        _Nop();;
        wrcom(0x44);					
		EA=1;
        _Nop();;
        _Nop();;
	 
}
void ds2(void)
{	uchar i;
        ini();
		_Nop();;
        _Nop();;
        wrcom(0xcc); 				
        _Nop();;
        _Nop();;
        wrcom(0xbe);					
        _Nop();;
        _Nop();;
        	for(i=0;i<2;i++)
        	{
         	Scrtp[i]=rbyte();
			_Nop();;
	    	_Nop();;			
        	}

}

void ds3(void)
{uchar d,c;
uint h;

d=Scrtp[0];
c=Scrtp[1];
h=Scrtp[1];
h=h*0x100+d;
   	if(!(0==c>>3))
    {h=~h+1; negbit=1;}		
	else {negbit=0;}		
temp=h;
temp=(temp*0x271)/0x2710;			
	if(!temp)
	{negbit=0;}



		
		Xsb=temp/100;
		 	if(Xsb==0)
			{Xsb=0xc;}							
			if(negbit)						
			{Xsb=0xd;}						
		Xss=temp/10;
		Xsg=temp%10;				

}

//////////////////////////////////////////////////////////
//`````````````````````````````````````````````````````````````````````````````````````````````
///////////////////////////主程序////////////////////////////////////
/////////////////////////////////////////////////////////////////////
main()
{
_nop_();
_nop_();
x24c02_init();
music[0]=x24c02_read(0x10);
_nop_();
_nop_();
music[1]=x24c02_read(0x11);
_nop_();
_nop_();
music[2]=x24c02_read(0x12);
_nop_();
_nop_();
music[3]=x24c02_read(0x13);
_nop_();
_nop_();


/////////////////////////////////////////////////////////
while(1)
{_nop_();_nop_();
Get1302();
_nop_();_nop_();
show();
ds1();
show();
ds2();
show();
ds3();
show();
////////////////////////////////////////////////////////////////////

    if((pp&0x0f)==0)
 	{pp=pp|0X0f;pp++;}
    P1=--pp; 
 
	xd=pd;
    xsd=ucCurtime[0];

///////////////////////////===按键=====================================================

	if(!Keybit1)			//有否按了三下	
	{  
		if(!Mu)
		{delay(10);
			if(!Mu)
			{Keybit0=1;}
		}
	
		if(Keybit0)
		{ 
			if(Mu)
			{Keytemp0=Keytemp0+1;
		 	Keybit0=0;
			}
		}

		if(Keytemp0>=3)
		{Keytemp0=0;
	 	Keybit1=1;
	    Menu=14;
		/////////////////////////
		time[1]=(ucCurtime[1]&0xf0)>>4;
		time[0]=ucCurtime[1]&0x0f;
	
		time[3]=(ucCurtime[2]&0xf0)>>4;
		time[2]=ucCurtime[2]&0x0f;

		time[5]=(ucCurtime[3]&0xf0)>>4;
		time[4]=ucCurtime[3]&0x0f;

		time[7]=(ucCurtime[4]&0xf0)>>4;
		time[6]=ucCurtime[4]&0x0f;

		time[8]=ucCurtime[5]&0x0f;

		time[10]=(ucCurtime[6]&0xf0)>>4;
		time[9]=ucCurtime[6]&0x0f;		
		}



	}
 
	else					//进入设置菜单
	{	
				Key(Menu);
				show();
	
	}
////////////========================================

}
}

//////////////////////////////////////////////////////////////////////////
///////////////////////////DS1302////////////////////////////////////////
/*********************************************************************/
void RTInputByte(uchar d) 
{ 
    uchar i;
    ACC = d;
    for(i=8; i>0; i--)
    {
        T_IO = ACC0;           /*相当于汇编中的 RRC */
        T_CLK = 1;
        T_CLK = 0;
        ACC = ACC >> 1; 
    } 
}

uchar RTOutputByte(void) 
{ 
    uchar i;
    for(i=8; i>0; i--)
    {
        ACC = ACC >>1;         /*相当于汇编中的 RRC */
        ACC7 = T_IO;
        T_CLK = 1;
        T_CLK = 0;
    } 
    return(ACC); 
}

void W1302(uchar ucAddr, uchar ucDa)
{
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(ucAddr);       /* 地址,命令 */
    RTInputByte(ucDa);       /* 写1Byte数据*/
    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();         /* 读1Byte数据 */
    T_CLK = 1;
    T_RST = 0;
    return(ucData);
}
/*
void BurstW1302T(uchar *pWClock)
{
    uchar i;
    W1302(0x8e,0x00);         
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(0xbe);        
    for (i = 8; i>0; i--)     
    {
        RTInputByte(*pWClock); 
        pWClock++;
    }
    T_CLK = 1;
    T_RST = 0;
} 

void BurstR1302T(uchar *pRClock)
{
    uchar i;
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(0xbf);            
    for (i=8; i>0; i--) 
    {
       *pRClock = RTOutputByte();   
       pRClock++;
    }
    T_CLK = 1;
    T_RST = 0;
}
/*
void BurstW1302R(uchar *pWReg)
{
    uchar i;
    W1302(0x8e,0x00);         
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(0xfe);         
    for (i=31; i>0; i--)      
    {
        RTInputByte(*pWReg);    
        pWReg++;
    }
    T_CLK = 1;
    T_RST = 0;
} 
/*
void BurstR1302R(uchar *pRReg)
{
    uchar i;
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(0xff);            
    for (i=31; i>0; i--)          
    {
        *pRReg = RTOutputByte();  
        pRReg++;
    }
    T_CLK = 1;
    T_RST = 0;
}
*/

void Set1302(uchar *pClock) 
{
    uchar i;
    uchar ucAddr = 0x80; 
	pClock=writ1302;
    W1302(0x8e,0x00);           /* 控制命令,WP=0,写操作?*/
    for(i =7; i>0; i--)
    { 
        W1302(ucAddr,*pClock);  /* 秒 分 时 日 月 星期 年 */ 
        pClock++;
        ucAddr +=2;
    }
    W1302(0x8e,0x80);           /* 控制命令,WP=1,写保护?*/
}

void Get1302() 
{
    uchar i;
    uchar ucAddr = 0x81;
    for (i=0; i<7; i++)
    {
        ucCurtime[i] = R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
        ucAddr += 2;
    }
	////////////////////////////
	miaoh=(ucCurtime[0]&0xf0)>>4;
	miaol=ucCurtime[0]&0x0f;

	fenh=(ucCurtime[1]&0xf0)>>4;//1
	fenl=ucCurtime[1]&0x0f;//0
	
	hourh=(ucCurtime[2]&0xf0)>>4;//3
	hourl=ucCurtime[2]&0x0f;//2

	hao=(ucCurtime[3]&0xf0)>>4;//
	hao1=ucCurtime[3]&0x0f;

	yue=(ucCurtime[4]&0xf0)>>4;
	yue1=ucCurtime[4]&0x0f;

	xiqi=ucCurtime[5]&0x0f;

	ni=(ucCurtime[6]&0xf0)>>4;
	ni1=ucCurtime[6]&0x0f;

    if((fenl==music[0])&&(fenh==music[1])&&(hourl==music[2])&&(hourh==music[3]))
	_nop_();
	else
	_nop_();

}

////////////////////////////////////////////////////////////////////
///////////////////////程序结束////END////////////////////////////////
////////////////////////////////////////////////////////////////////     

⌨️ 快捷键说明

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