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

📄 da1302.c

📁 别人的C51菜单程序
💻 C
字号:
#include <at89c51xd2.h>
#include <intrins.h>
#include "ds1302.h"
#include "lm3228.h"
#include "common.h"
#include "ds1302_hanzi.h"

sbit IO_DATA =P1^5;
sbit CLK =P1^6;
sbit RST =P1^7;

uchar data time1[8];


//从1302读取一个字节
uchar read_1302(void)
{
	uchar xdata i,data_1302;
	
	for(i=0;i<8;i++)
	{	
		
		data_1302>>=1;
		if(IO_DATA)
		{
			data_1302|=0x80;
		}
		CLK=1;
		//nop();
		CLK=0;
	}
	return(data_1302);
}
//向1302写入一个字节
void write_1302(uchar data_1302)
{
	uchar xdata i;
	
	for(i=0;i<8;i++)
	{
		
		data_1302>>=1;
		IO_DATA=CY;
		CLK=0;
		//nop();
		CLK=1;
		//nop();
		CLK=0;
	}
	
}
//从1302的某地址读一个字节的数据
/*uchar read_byte_1302(uchar addr)
{
	uchar data data_1302;
	RST=0;
	CLK=0;
	RST=1;
	write_1302(addr|0x01);
	data_1302=read_1302();
	CLK=1;
	RST=0;
	CLK=0;
	return (data_1302);
}*/
//向1302的某地址写入一个字节的数据
void write_byte_1302(uchar addr,uchar data_1302)
{
	RST=0;
	CLK=0;
	RST=1;
	write_1302(addr);
	write_1302(data_1302);
	CLK=1;
	RST=0;
	CLK=0;
}
//是否写保护
void protect_1302(bit flag)
{
	if(flag)
		write_byte_1302(DS1302_CONTROL,0x80);
	else
		write_byte_1302(DS1302_CONTROL,0x00);
}

//停止1302时钟
/*void stop_1302(void)
{
	write_byte_1302(DS1302_SECOND,0x80);
}*/
//启动1302时钟
void start_1302(void)
{
	write_byte_1302(DS1302_SECOND,0x00);
}

//读1302的时间序列
void read_data(uchar *j)
{
	uchar xdata i;
	RST=0;
	CLK=0;
	RST=1;
	write_1302(0xbf);
	for(i=0;i<8;i++)
	{
		*(j)=read_1302();
		j++;
		
	}
	CLK=1;
	RST=0;
	CLK=0;
}
//写1302的时间序列
void write_data(uchar *j)
{
	uchar xdata i;
	RST=0;
	CLK=0;
	RST=1;
	write_1302(0xbe);
	for(i=0;i<8;i++)						 
	{
		write_1302(*j);
		j++;
	}
	CLK=1;
	RST=0;
	CLK=0;
}	
//显示时间
void display_time(uchar lowaddr,uchar highaddr)
{

		read_data(time1);			  								//读时间

		if(time1[2]&0x80)											//如果成立,即12小时制,否则24小时制
		{									   						//显示小时
			if(time1[2]&0x20)  										//如果成立,即下午,否则上午
			{
				string_display_code(1,&time2[12],lowaddr+0x09,highaddr);
				string_display_code(1,&time2[13],lowaddr+0x0a,highaddr);
				if(time1[2]&0x10)									//下午
				{
					string_display_code(1,&time2[(time1[2]&0x10)>>4],lowaddr+0x00,highaddr);
					string_display_code(1,&time2[time1[2]&0x0f],lowaddr+0x01,highaddr);
				}
				else
				{
					string_display_code(1,&time2[14],lowaddr+0x00,highaddr);
					string_display_code(1,&time2[time1[2]&0x0f],lowaddr+0x01,highaddr);
				}
			}
			else														//上午
			{
				string_display_code(1,&time2[11],lowaddr+0x09,highaddr);
				string_display_code(1,&time2[13],lowaddr+0x0a,highaddr);
				  if(time1[2]&0x10)
				{
					string_display_code(1,&time2[(time1[2]&0x10)>>4],lowaddr+0x00,highaddr);
					string_display_code(1,&time2[time1[2]&0x0f],lowaddr+0x01,highaddr);

				}
				else
				{
					string_display_code(1,&time2[14],lowaddr+0x00,highaddr);					
					string_display_code(1,&time2[time1[2]&0x0f],lowaddr+0x01,highaddr);
				}
			}
		}
		 else															//24小时制
		 {
		 	if(time1[2]&0x30)
			{
				string_display_code(1,&time2[(time1[2]&0x30)>>4],lowaddr+0x00,highaddr);
				string_display_code(1,&time2[time1[2]&0x0f],lowaddr+0x01,highaddr);
			}
			else
			{
				string_display_code(1,&time2[14],lowaddr+0x00,highaddr);
				string_display_code(1,&time2[time1[2]&0x0f],lowaddr+0x01,highaddr);
			}
		}			 	
		string_display_code(1,&time2[10],lowaddr+0x02,highaddr);					  			//显示:

		string_display_code(1,&(time2[(time1[1]&0x70)>>4]),lowaddr+0x03,highaddr);	  			//显示分钟
		string_display_code(1,&time2[time1[1]&0x0f],lowaddr+0x04,highaddr);
		


		string_display_code(1,&time2[10],lowaddr+0x05,highaddr);					   			//显示:


		string_display_code(1,&(time2[(time1[0]&0x70)>>4]),lowaddr+0x06,highaddr);				//显示秒
		string_display_code(1,&time2[time1[0]&0x0f],lowaddr+0x07,highaddr);

}
//设置时间
void set_time(uchar *time)
{
	protect_1302(0);														//清除写保护
																			//写预设时间
	write_data(time);
	
	start_1302();															 //启动1302

	protect_1302(1);														  //开启写保护
}


 //显示星期
void display_week(uchar lowaddr,uchar highaddr)
{
	uchar xdata i;
	hanzi_display(hanzi3,sizeof(hanzi3),lowaddr,highaddr);				  //显示“星期”
	read_data(time1);
	i=time1[5];							  //显示星期几
	hanzi_display(&hanzi4[(i-2)*32],32,lowaddr+0x4,highaddr);				 //sizeof(hanzi4[i])
}																				   
//显示“现在时间”
void display_currenttime(uchar lowaddr,uchar highaddr)
{
	hanzi_display(hanzi2,sizeof(hanzi2),lowaddr,highaddr);
}
//
void display_year(uchar lowaddr,uchar highaddr)
{
	read_data(time1);
	set_point(SET_ADDRESS_POINTER,lowaddr,highaddr);
	string_display_code(1,&time2[(time1[6]>>4&0x0f)],lowaddr,highaddr);
	string_display_code(1,&time2[time1[6]&0x0f],lowaddr+0x01,highaddr);		 //年
	text_display('-');
	string_display_code(1,&time2[time1[4]>>4&0x01],lowaddr+0x03,highaddr);
	string_display_code(1,&time2[time1[4]&0x0f],lowaddr+0x04,highaddr);	  //月
	text_display('-');
	string_display_code(1,&time2[time1[3]>>4&0x03],lowaddr+0x06,highaddr);
	string_display_code(1,&time2[time1[3]&0x0f],lowaddr+0x07,highaddr);		   //日
}
void time_display(void)
{
	display_currenttime(0x00,0x08);
	display_year(0x28,0x31);
	display_week(0x10,0x08);
	display_time(0x38,0x31);
}

⌨️ 快捷键说明

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