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

📄 1602-

📁 1602与DS1302时钟
💻
字号:
#include<reg52.h>
#include<intrins.h>
#include<string.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
uchar datetime[7];
sbit rs=P2^0;
sbit rw=P2^1;
sbit en=P2^2;
sbit rst=P3^5;
sbit sclk=P3^6;
sbit io=P3^7;
uchar *week[]={"SUN","***","MON","TUS","WEN","THU","FRI","SAT"};
uchar tab1[]={"date 00-00-00   "};
uchar tab2[]={"time 00:00:00   "};
uchar datetime[7];	   
void delay(uint z)
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=112;y>0;y--);
}
void delay_us()
{_nop_();_nop_();}
void DS_write_byte(uchar dat)   //向DS1302写一个字节
{
	uchar i;
	sclk=0;
	delay(2);
	for(i=0;i<8;i++)
	{
		io=dat&0x01;
		delay_us();
		sclk=1;
		delay_us();
		sclk=0;
		dat>>=1;
	}
}
uchar DS_read_byte() //从DS1302读一个字节
{
    uchar i,dat;
	sclk=0;
	delay(2);
	for(i=0;i<8;i++)
	{
		dat>>=1;
		if(io==1)
			dat|=0x80;
		sclk=1;
		delay_us();
		sclk=0;	  
		delay_us();
	}
	return dat;
}
/*void DS_write_add(uchar add,uchar dat)
{
	rst=0;
	sclk=0;
	rst=1;
	DS_write_byte(add);
	DS_write_byte((dat/10<<4)|(dat%10));
	sclk=1;
	rst=0;
}*/	
uchar DS_read_add(uchar add)
{
	uchar dat0,dat1,dat2;
	rst=0;
	sclk=0;
	rst=1;
	DS_write_byte(add);
	dat0=DS_read_byte();
	sclk=1;
	rst=0;
	dat1=dat0/16;
	dat2=dat0%16;
	dat0=dat1*10+dat2;
	return dat0;
}
void gettime()	  //读取当前日期时间
{
	uchar i,add=0x81;
	for(i=0;i<7;i++)
	{
		datetime[i]=DS_read_add(add);
		add+=2;
	}
} 
uchar LCD_read_state() //读LCD当前状态
{
	uchar state;
	rs=0;
	rw=1;
	delay(5);
	en=1;
	state=P0;
	delay(5);
	en=0;
	delay(5);
	return state;
}
void LCD_write_com(uchar com)	//向LCD写命令
{
	while( (LCD_read_state()&0x80)==0x80);
	rs=0;
	rw=0;
	delay(5);
	en=1;
	P0=com;
	delay(5);
	en=0;
	delay(5);
}
void LCD_write_data(uchar dat) //向LCD写数据
{
	while( (LCD_read_state()&0x80)==0x80);
	rs=1;
	rw=0;
	delay(5);
	en=1;
	P0=dat;
	delay(5);
	en=0;
	delay(5);
}
void LCD_position(uchar pos)
{
	 LCD_write_com(0x80+pos);
}
void display(uchar pos,uchar *s)
{
	uchar i;
	LCD_position(pos);
	for(i=0;i<16;i++)
	{
		LCD_write_data(s[i]);
		delay(1);
	}
}
void date(uchar d,uchar *a)	   //日期时间转换为数字字符
{
	a[0]=d/10+'0';
	a[1]=d%10+'0';
}
void init()	   //LCD初始化
{	 
	LCD_write_com(0x38);
	LCD_write_com(0x0c);
	LCD_write_com(0x06);
	LCD_write_com(0x01);	
}	
void main()	  //主函数
{
	init();
	while(1)
	{
		gettime();
		date(datetime[6],tab1+5);
		date(datetime[4],tab1+8);
		date(datetime[3],tab1+11);

		strcpy(tab1+13,week[datetime[5]]);
		
		date(datetime[2],tab2+5);
		date(datetime[1],tab2+8);
		date(datetime[0],tab2+11);	
	display(0x00,tab1);
	display(0x40,tab2);		
	}  	
}

⌨️ 快捷键说明

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