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

📄 1302.c

📁 ds1302时钟芯片和sst89c51单片机
💻 C
字号:
#include<reg51.h>
#include"3310.h"
#define uchar unsigned char
#define uint unsinged int
/*
#define k1 0xe0
#define k2 0xd0
#define k3 0xb0
#define k4 0x70
*/
sbit clk=P3^1;
sbit io=P3^3;
sbit rst=P3^4;

sbit k1=P1^4;
sbit k2=P1^5;
sbit k3=P1^6;
sbit k4=P1^7;

#define sec 0x80
#define min 0x82
#define hou 0x84
#define dat 0x86
#define mon 0x88
#define day 0x8a
#define year 0x8c
#define _Brush 0xbe

char x[8]={0,0,0,1,1,1,0,0};
char y[8]=0;

uchar bdata temp;
sbit d0=temp^0;
sbit d7=temp^7;

bit point,flat;
uchar cont,cont1,cont2;
unsigned int ax,bx,cx;

void delay(unsigned int j)
{
	while(j--);
}

void write8byt(uchar date)
{
	uchar i;
	temp=date;
	for(i=8;i>0;i--)
	{
		io=d0;
		clk=1;
		clk=0;
		temp>>=1;
	}
}

uchar read8byt()
{
	uchar i;
	for(i=8;i>0;i--)
	{	
		temp>>=1;
		d7=io;
		clk=1;
		clk=0;	
	}
	return temp;
}

uchar chose(uchar date)
{
    uchar shi,ge,i;
    shi=date/16;
	ge=date%16;
	i=shi*10+ge;
	return i;
}

void W1302(uchar address,uchar ucda)
{
	rst=0;
	clk=0;
	rst=1;
	write8byt(address&0xfe);
	write8byt(ucda);
	clk=1;
	rst=1;
}

void DS1302_SetProtect(bit flag)        
{
	if(flag)
		W1302(0x8E,0x80);
	else
		W1302(0x8E,0x00);
}

void Wbrush1302(uchar address,uchar n,uchar *p)
{
	uchar i;
	rst=0;
	clk=0;
	rst=1;
	write8byt(address&0xfe);
	for(i=0;i<n;i++)
	{
		write8byt(p[i]);
	}
	clk=1;
	rst=0;
}

void  Rbrush1302(uchar address,uchar n,uchar *p)
{
	uchar i;
	rst=0;
	clk=1;
	rst=1;
	write8byt(address|0x01);
	for(i=0;i<n;i++)
	{
		p[i]=read8byt();
		p[i]=chose(p[i]);
	}
	clk=1;
	rst=0;
}

unsigned char buff[9];
void zhh(char a,char b,char c)
{
   buff[0] = c/10 + '0';
   buff[1] = c%10 + '0';
   buff[2] = ':'; 
   buff[3] = b/10 + '0';
   buff[4] = b%10 + '0';
   buff[5] = ':';
   buff[6] = a/10 + '0';
   buff[7] = a%10 +'0';
   buff[8] = 0;
   if(cont==1)
   {
   		if(flat)
		{
			LCD_WriteStr8(2,65," ");
			LCD_WriteStr8(2,71," ");
		}
   }
   if(cont==2)
   {
   		if(flat)
		{
			LCD_WriteStr8(2,48," ");
			LCD_WriteStr8(2,54," ");	
		}
   }
   if(cont==3)
   {
   		if(flat)
		{
			LCD_WriteStr8(2,30," "); 
			LCD_WriteStr8(2,36," ");	
		}
   }if(cont==4)
   {
   		if(flat)
		{
			LCD_WriteStr8(0,30," ");
			LCD_WriteStr8(0,36," ");	
		}
   }
   if(cont==5)
   {
   		if(flat)
		{
			LCD_WriteStr8(0,48," ");
			LCD_WriteStr8(0,54," ");	
		}
   }
   if(cont==6)
   {
   		if(flat)
		{
			LCD_WriteStr8(0,65," ");
			LCD_WriteStr8(0,71," ");
		}
   }  
}

void keys()
{
	if(k1==0)
	{
		delay(2000);
		if(k1==0)
		{
			while(k1==0)
			{
			}
			cont++;
			if(cont==7)
			{
				cont=0;
			}
			
		}
	}
	if(k2==0)
	{
		delay(2000);
		if(k2==0)
		{
			while(k2==0)
			{
			}
			if(cont==1)
			{
				y[0]++;
				if(y[0]==60)
				{
					y[0]=0;
				}
			}
			if(cont==2)
			{
				y[1]++;
				if(y[1]==60)
				{
					y[1]=0;
				}
			}
			if(cont==3)
			{
				y[2]++;
				{
					if(y[2]==24)
					{
						y[2]=0;
					}
				}
			}
			if(cont==4)
			{
				y[6]++;
				if(y[6]>100)
				{
					y[6]=0;
				}
			}
			if(cont==5)
			{
				y[4]++;
				if(y[4]>12)
				{
					y[4]=1;
				}
			}
			if(cont==6)
			{	
				if(y[4]==1||y[4]==3||y[4]==5||y[4]==7||y[4]==8||y[4]==10||y[4]==12)
				{	
					y[3]++;
					if(y[3]>31)
					{
						y[3]=1;
					}
				}
				else
				if(y[4]==4||y[4]==6||y[4]==9||y[4]==11)
				{
					y[3]++;
					if(y[3]>30)
					{
						y[3]=1;
					}
				}
				else
				if(y[4]==2)
				{
					if((y[6]%4)==0)
					{
						y[3]++;
						if(y[3]>29)
						{
							y[3]=1;
						}
					}
					else
					{
						y[3]++;
						if(y[3]>28)
						{
							y[3]=1;
						}
					}
				}
			}
		}
	}
	if(k3==0)
	{
		delay(2000);
		if(k3==0)
		{
			while(k3==0)
			{
			}
			if(cont==1)
			{
				y[0]--;
				if(y[0]<0)
				{
					y[0]=59;
				}
			}
			if(cont==2)
			{
				y[1]--;
				if(y[1]<0)
				{
					y[1]=59;
				}
			}
			if(cont==3)
			{
				y[2]--;
				if(y[2]<0)
				{
					y[2]=23;
				}
			}
			if(cont==4)
			{
				y[6]--;
				if(y[6]<0)
				{
					y[6]=99;
				}
			}
			if(cont==5)
			{
				y[4]--;
				if(y[4]<1)
				{
					y[4]=12;
				}
			}
			if(cont==6)
			{	
				if(y[4]==1||y[4]==3||y[4]==5||y[4]==7||y[4]==8||y[4]==10||y[4]==12)
				{	
					y[3]--;
					if(y[3]<1)
					{
						y[3]=31;
					}
				}
				else
				if(y[4]==4||y[4]==6||y[4]==9||y[4]==11)
				{	
					y[3]--;
					if(y[3]<1)
					{
						y[3]=30;
					}
				}
				else
				if(y[4]==2)
				{
					if((y[6]%4)==0)
					{
						y[3]--;
						if(y[3]<1)
						{
							y[3]=29;
						}
					}
					else
					{
						//y[3]>=0;
						y[3]--;
						if(y[3]<1)
						{
							y[3]=28;
						}
				  	}
				}		
		   	}
		}
	}
	if(k4==0)
	{
		delay(2000);
		if(k4==0)
		{
			while(k4==0)
			{
			}
			if(cont!=0)
			{
				DS1302_SetProtect(0);
				Wbrush1302(0xbe,8,y);
				DS1302_SetProtect(1);
				cont=0;							
			}
		}
	}
}

void main()
{
	TMOD|=0x10;
	TH1=(65536-1000)/256;
	TL1=(65536-1000)%256;
	TR1=1;
	ET1=1;
	EA=1;
	DS1302_SetProtect(0);
	Wbrush1302(0xbe,8,x);
	DS1302_SetProtect(1);	
	LCD_Init();  //初始化
   	LCD_ClearScreen();  //清屏		   
	while(1)
	{	 
		keys();			 	
	}
}

void time() interrupt 3
{
   	TH1=(65536-1000)/256;
	TL1=(65536-1000)%256;
	ax++;	
	if(ax==250)
	{
		ax=0;
		if(cont==0)
		{
			Rbrush1302(0xbe,8,y);
			zhh(y[3],y[4],y[6]);
			LCD_WriteStr8(0,0,"Data:");
			LCD_WriteStr8(0,30,buff);	
	 		zhh(y[0],y[1],y[2]);
			LCD_WriteStr8(2,0,"Time:");
			LCD_WriteStr8(2,30,buff);
		}
		if(cont!=0)
		{
			zhh(y[3],y[4],y[6]);
			LCD_WriteStr8(0,0,"Data:");
			LCD_WriteStr8(0,30,buff);	
	 		zhh(y[0],y[1],y[2]);
			LCD_WriteStr8(2,0,"Time:");
			LCD_WriteStr8(2,30,buff);
		}
		LCD_WriteStr8(5,0,"Tel15844208399");
		flat=!flat;	
	}
	
}

⌨️ 快捷键说明

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