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

📄 da1302.c

📁 液晶显示的完整程序
💻 C
字号:
//#include <at89c51RB2.h>
#include <intrins.h>
#include "ds1302.h"
//#include "lm3228.h"
#include "hanzi.h"

#define uchar unsigned char
#define nop() _nop_()
uchar time1[8];
uchar time2[15]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,':','A','P','M',0x00};//0-9,:,A,P,M的CGROM代码
extern void Print(uchar *);
extern void print_char(uchar);
extern void GotoXY(uchar ,uchar );

//从1302读取一个字节
uchar read_1302(void)
{
	uchar 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 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_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 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 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);
		GotoXY(0,1);			  								//读时间

		if(time1[2]&0x80)											//如果成立,即12小时制,否则24小时制
		{									   						//显示小时
			if(time1[2]&0x20)  										//如果成立,即下午,否则上午
			{
				Print("PM:");
				if(time1[2]&0x10)									//下午
				{
					print_char(time2[(time1[2]&0x10)>>4]+'0');
					print_char(time2[time1[2]&0x0f]+'0');
				}
				else
				{
					Print("AM:");
					print_char(time2[14]+'0');
					print_char(time2[time1[2]&0x0f]+'0');
				}
			}
			else														//上午
			{
				print_char(time2[11]+'0');
				print_char(time2[13]+'0');
				  if(time1[2]&0x10)
				{
					print_char(time2[(time1[2]&0x10)>>4]+'0');
					print_char(time2[time1[2]&0x0f]+'0');

				}
				else
				{
					print_char(time2[14]+'0');					
					print_char(time2[time1[2]&0x0f]+'0');
				}
			}
		}
		 else															//24小时制
		 {
		 	if(time1[2]&0x30)
			{
				print_char(time2[(time1[2]&0x30)>>4]+'0');
				print_char(time2[time1[2]&0x0f]+'0');
			}
			else
			{
				print_char(time2[14]);
				print_char(time2[time1[2]&0x0f]+'0');
			}
		}			 	
		print_char(time2[10]);					  			//显示:

		print_char((time2[(time1[1]&0x70)>>4]+'0'));	  			//显示分钟
		print_char(time2[time1[1]&0x0f]+'0');
		


		print_char(time2[10]);					   			//显示:


		print_char((time2[(time1[0]&0x70)>>4]+'0'));				//显示秒

		print_char(time2[time1[0]&0x0f]+'0');
		Print(" ");
		print_char('0');
		print_char(time2[time1[6]&0x07]+'0');
		Print("-");
		print_char(time2[time1[4]&0xf0>>4]+'0');
		Print("-");
		print_char(time2[time1[3]&0x0f]+'0');

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

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


 //显示星期
void display_week(uchar lowaddr,uchar highaddr)
{
							  //显示星期几
}
//显示“现在时间”
void display_currenttime(uchar lowaddr,uchar highaddr)
{
	
}

⌨️ 快捷键说明

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