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

📄 ds1302.c

📁 万年历带温度示
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define _Nop(); _nop_()
#include <stdio.h>
#include <absacc.h>
//sfr WDT = 0xA6;
sbit xd=P2^7;
sbit pd=P1^3;
uchar xsd;
uchar pp;
uchar code xs[]={0x3f,0x3,0x6d,0x67,0x53,0x76,0x7e,0x23,0x7f,0x77,0x7b,0x5e,0x3c,0x27,0x7c,0x78};//显示百位表格
uchar ucCurtime[7];      //读时间
uchar writ1302[7];			//设置时间
uchar time[12];
uchar hc138;
uchar t138;
uchar Scrtp[2];				//读出温度高&低字节
///////////////////////////////////////////
uchar miaoh,miaol;
uchar fenh,fenl;
uchar hourh,hourl;
uchar hao,hao1;
uchar yue,yue1;
uchar xiqi,xiqi1;
uchar ni,ni1;

uchar Keytemp0;				//按键缓冲0
uchar Keytemp1;				//按键缓冲1
uchar Menu;
uchar music[4];
uchar clockh,clockl;
ulong temp;					//读出的温度
uchar  Xsb;					//显示百位缓冲
uchar  Xss;					//显示十位缓冲
uchar  Xsg;					//显示个位缓冲
//////////////////////////////////////////////
sbit     T_CLK      = P1^6;   /*实时时钟时钟线引脚 */
sbit     T_IO       = P1^5;   /*实时时钟数据线引脚 */
sbit     T_RST      = P1^4;   /*实时时钟复位线引脚 */
sbit  ACC0 = ACC^0;
sbit  ACC7 = ACC^7;
sbit scl=P3^6;					//24c02clok
sbit sda=P3^7;					//24c02dat
sbit bit1=P0^0;
sbit bit2=P0^1;
sbit bit3=P0^2;
sbit bit4=P0^3;
sbit bit5=P0^4;
sbit bit6=P0^5;
sbit bit7=P0^6;
sbit bit8=P0^7;
sbit bit9=P2^0;
sbit bit10=P2^1;
sbit bit11=P2^2;
sbit bit12=P2^3;
sbit bit13=P2^4;
sbit bit14=P2^5;
sbit bit15=P2^6;
sbit bit16=P2^7;
sbit bit17=P3^2;
sbit bit18=P3^3;
sbit bit19=P3^4;
//////////////////////////////////////////////////////////////////////////////////////////////////
sbit dat595=P3^0;
sbit clk595=P3^1;
sbit crk595=P1^7;
sbit DQ=P3^5;					//数据采样
sbit Mu=P2^4;					//功能键
sbit Up=P2^6;					//上
sbit Dn=P2^5;					//下
bit ds1820bit;					//初始化失败
bit T0bit0;						//T0750ms时间到了标志0
bit T0bit1;						//有否发转换命令标志
bit Keybit0;					//有否按标志	
bit Keybit1;					//有否按三下志
bit Keybit2;					//键有否放开过充许标志
bit negbit;							//显示负号位判断
bit negbit0;					//负温实测
bit xsbit;						//为1显示设置	
/////////////////////////////////////////////////////////////////
w595(uchar ddat)    ////////////////////送595子程序/////////////////////////
{ 
    uchar i;
    ACC = ddat;
    for(i=8; i>0; i--)
    {
        dat595 = ACC0;           
        clk595 = 0;
		_nop_();
        clk595 = 1;
        ACC = ACC >> 1; 
    } 
	crk595=0;
	crk595=1;
}

////////////////////////////////////////////////////////	
//////////////////////////////////////////////////////////////////////////////////////////////////
/*Delay*/
void delay1(uchar wt)			//Delay 6.5us
{while(wt--!=0);}

void delay(uint x)				//Delay 1ms
{uchar j;
	while(x--)
	{
	for(j=0;j<125;j++)
	{;}
	}
}

////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////24c02////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
void x24c02_init()
{
scl=1; _Nop(); sda=1; _Nop();
}
void start()
{
sda=1; _Nop(); scl=1; _Nop(); sda=0; _Nop(); scl=0; _Nop();
}
void stop()
{
sda=0; _Nop(); scl=1; _Nop(); sda=1; _Nop();
}
void writex(uchar j)
{
uchar i,temp;
temp=j;
for (i=0;i<8;i++)
{
temp=temp<<1; scl=0; _Nop(); sda=CY; _Nop(); scl=1; _Nop();
}
scl=0; _Nop(); sda=1; _Nop();
}
uchar readx()
{
uchar i,j,k=0;
scl=0; _Nop(); sda=1;
for (i=0;i<8;i++){
_Nop(); scl=1; _Nop();
if (sda==1) j=1;
else j=0;
k=(k<<1)|j; scl=0;
}
 _Nop(); return(k);
}
void clock()
{
uchar i=0;
scl=1; _Nop();
while ((sda==1)&&(i<255))i++;
scl=0; _Nop();
}
uchar x24c02_read(uchar address)
{
uchar i;
start(); writex(0xa0);
clock(); writex(address);
clock(); start();
writex(0xa1); clock();
i=readx(); stop();
delay1(255);
return(i);
}
void x24c02_write(uchar address,uchar info)
{
//EA=0;
start(); writex(0xa0);
clock(); writex(address);
clock(); writex(info);
clock(); stop();
//EA=1;
delay1(255);
}

//////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////显示程序/////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
show()
{	if(!Keybit1)
	{
	if(hourh)
	{
	w595(xs[hourh]);
	bit1=0;
	delay(1);
	bit1=1;
	}

	w595(xs[hourl]);
	bit2=0;
	delay(1);
	bit2=1;

	if(fenh)
	{
	w595(xs[fenh]);
	bit3=0;
	delay(1);
	bit3=1;
	}

	w595(xs[fenl]);
	bit4=0;
	delay(1);
	bit4=1;

		if(miaoh)
	{
	w595(xs[miaoh]);
	bit5=0;
	delay(1);
	bit5=1;
	}
	
	w595(xs[miaol]);
	bit6=0;
	delay(1);
	bit6=1;

	w595(xs[ni]);
	bit7=0;
	delay(1);
	bit7=1;
	
	w595(xs[ni1]);
	bit8=0;
	delay(1);
	bit8=1;	
	
////////////////////////////////////
if(yue)
	{
	w595(xs[yue]);
	bit9=0;
	delay(1);
	bit9=1;
	}

	w595(xs[yue1]);
	bit10=0;
	delay(1);
	bit10=1;

	if(hao)
	{
	w595(xs[hao]);
	bit11=0;
	delay(1);
	bit11=1;
	}

	w595(xs[hao1]);
	bit12=0;
	delay(1);
	bit12=1;
	
	if(xiqi==7)
	xiqi=8;
	w595(xs[xiqi]);
	bit19=0;
	delay(1);
	bit19=1;

	w595(xs[Xsg]);
	bit18=0;
	delay(1);
	bit18=1;

	w595(xs[Xss]);
	bit17=0;
	delay(1);
	bit17=1;


}

//\\\\\\\0000000000000000000000000000000000000000000000000000000000000
	else
	{
	if(Menu==0)
	{
	w595(xs[time[0]]);
	bit4=0;
	delay(1);
	bit4=1;
	}

	if(Menu==1)
	{
	w595(xs[time[1]]);
	bit3=0;
	delay(1);
	bit3=1;
	}

	if(Menu==2)
	{
	w595(xs[time[2]]);
	bit2=0;
	delay(1);
	bit2=1;
	}

	if(Menu==3)
	{
	w595(xs[time[3]]);
	bit1=0;
	delay(1);
	bit1=1;
	}
	////////////////
	if(Menu==4)
	{
	w595(xs[time[4]]);
	bit12=0;
	delay(1);
	bit12=1;
	}

	if(Menu==5)
	{
	w595(xs[time[5]]);
	bit11=0;
	delay(1);
	bit11=1;
	}

	if(Menu==6)
	{
	w595(xs[time[6]]);
	bit10=0;
	delay(1);
	bit10=1;
	}

	if(Menu==7)
	{
	w595(xs[time[7]]);
	bit9=0;
	delay(1);
	bit9=1;
	}

	if(Menu==8)     //周
	{
	w595(xs[time[8]]);
	bit19=0;
	delay(1);
	bit19=1;
	}
//
	if(Menu==9)			//年	
	{
	w595(xs[time[9]]);
	bit8=0;
	delay(1);
	bit8=1;
	}

	if(Menu==10)		//年
	{
	w595(xs[time[10]]);
	bit7=0;
	delay(1);
	bit7=1;
	}
/////////////////////////////

if(Menu==11)
	{
	w595(xs[music[0]]);
	bit4=0;
	delay(1);
	bit4=1;
	}

	if(Menu==12)
	{
	w595(xs[music[1]]);
	bit3=0;
	delay(1);
	bit3=1;
	}

	if(Menu==13)
	{
	w595(xs[music[2]]);
	bit2=0;
	delay(1);
	bit2=1;
	}

	if(Menu==14)
	{
	w595(xs[music[3]]);
	bit1=0;
	delay(1);
	bit1=1;
	}
//////////////////////////////////
  }
}
///////////////////////////////////////////////////////////////////////
//void   RTInputByte(uchar);       /* 输入 1Byte */
//uchar  RTOutputByte(void);       /* 输出?1Byte */
//void   W1302(uchar, uchar);
//uchar  R1302(uchar);
void   Set1302(uchar *);         /* 设置时间 */
void   Get1302(); /* 读取1302当前时间 */
/////////////////////////////////////////////////////////////////////
///////////////////////////////////////////按键//////////////////////////////////////////////
Key(uchar ky)
{	
	if(!(Mu&&Up&&Dn))				//是否有键按下&&Up&&Dn
	{	
	  if(Keybit2)
 	  { 
		switch(ky)
		{		
		case 0:	{	if(!Mu)												//分
					{//writ1302[0]=ucCurtime[0];
					 writ1302[1]=(time[0]&0x0f)|(time[1]<<4);//分
					 writ1302[2]=(time[2]&0x0f)|(time[3]<<4);//时

					 writ1302[3]=(time[4]&0x0f)|(time[5]<<4);//日
					 writ1302[4]=(time[6]&0x0f)|(time[7]<<4);//月

					 writ1302[5]=time[8]&0x0f;//周

					 writ1302[6]=(time[9]&0x0f)|(time[10]<<4);//年
						  
					 Set1302(1);
					 Keybit1=0;	
					 Keybit2=0;
					 Menu=14;
					}
					if(!Up)
					{	if(time[0]<9)						
						time[0]=time[0]+1;							
					Keybit2=0;
					}
					if(!Dn)
					{	if(time[0]>0)
						time[0]=time[0]-1;
					Keybit2=0;
					}
				}break;

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

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

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

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

		case 4:  {	if(!Mu)										//日
					{Menu=8;
					 Keybit2=0;
					 }
					 if(!Up)
					{	if(time[4]<9)						
						time[4]=time[4]+1;							
					Keybit2=0;
					}
					if(!Dn)
					{	if(time[4]>0)
						time[4]=time[4]-1;
					Keybit2=0;
					}
				 }break;

		case 5:  {if(!Mu)										//日
					{Menu=4;
					 Keybit2=0;
					 }
					 if(!Up)
					{	if(time[5]<3)						
						time[5]=time[5]+1;							
					Keybit2=0;
					}
					if(!Dn)
					{	if(time[5]>0)
						time[5]=time[5]-1;
					Keybit2=0;
					}
				 }break;

		case 6:  {if(!Mu)										//月
					{Menu=5;
					 Keybit2=0;
					 }
					 if(!Up)
					{	if(time[7]==1)
						{if(time[6]<2)
						 time[6]=time[6]+1;					
						}

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

		 case 7:  {if(!Mu)										//月
					{Menu=6;
					 Keybit2=0;
					 }
					 if(!Up)
					{	if(time[7]<1)						
						time[7]=time[7]+1;							
					Keybit2=0;
					}
					if(!Dn)
					{	if(time[7]>0)
						time[7]=time[7]-1;
					Keybit2=0;
					}
				 }break;


		  case 8: { if(!Mu)												//周
					{Menu=3;
					Keybit2=0;
					}
					if(!Up)
					{	if(time[8]<7)						
						time[8]=time[8]+1;							
					Keybit2=0;
					}
					if(!Dn)
					{	if(time[8]>1)
						time[8]=time[8]-1;
					Keybit2=0;
					}
				  }break;


		  case 9: { if(!Mu)												//年
					{Menu=7;
					Keybit2=0;
					}
					if(!Up)
					{	if(time[9]<9)						
						time[9]=time[9]+1;							
					Keybit2=0;
					}
					if(!Dn)

⌨️ 快捷键说明

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