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

📄 -=-

📁 ds1302+1602显示的程序。程序简单适用
💻
字号:
#include<reg51.h>
#define uchar unsigned char

//..........................1602的子函数..............//
void init_1602();
void delay(uchar ms);
void write_com(uchar com);
void write_date(uchar date);

//...........................1302的子函数.............//
uchar recvive_date();
void send_command(uchar command);
void send_date(uchar date);
void change_date();
void disply_date();

//.......................发送,接收和处理数据的缓冲区...............................//
//.......................初始化时间为59秒59分24时09日09月星期7,09年................//
uchar table[8]={0x59,0x59,0x23,0x09,0x09,0x07,0x09,0};
uchar table1[7];
uchar table2[14];
uchar adder[14]={0xca,0xcb,0xc7,0xc8,0xc4,0xc5,0x89,0x8a,0x86,0x87,0x8d,0x8e,0x83,0x84};
uchar command;


//...1602的端口定义: rs,rw和e分别为(lcd)1602的3,4和5引脚。(lcd)1602的6~13(d0~d7)接单片机的p1口..//
//...1302的端口定义: sclk,io和rst分别接时钟芯片1302的7,6和5脚....................................//
sbit rs=P2^2;
sbit rw=P2^1;
sbit e=P2^0;
sbit sclk=P2^5;
sbit io=P2^6;
sbit rst=P2^7;


void main()
{
	uchar i;
	init_1602();
	send_command(0xbe);
	for(i=0;i<8;i++)
	send_date(table[i]);
	rst=0;
	while(1)
	{
		send_command(0xbf);
		for(i=0;i<7;i++)
		table1[i]=recvive_date();
		rst=0;
		change_date();
		disply_date();
	}
}


//.....................发送命令函数..............................//
void send_command(uchar command)
{	
	uchar temp,i;
	rst=0;
	sclk=0;
	rst=1;
	for(i=0;i<8;i++)
	{
		temp=command&0x01;
		command>>=1;
		io=temp;
		sclk=1;
		sclk=0;
	}
}


//....................发送数据函数..............................//
void send_date(uchar date)
{
	uchar j,temp;
	for(j=0;j<8;j++)
	{
		temp=date&0x01;
		date>>=1;
		io=temp;
		sclk=1;
		sclk=0;
	}
}

//.....................接收数据函数..............................//
uchar recvive_date()
{
	uchar temp=0,i;
	for(i=0;i<8;i++)
	{
		temp>>=1;
		if(io)
		temp|=0x80;
		sclk=1;
		sclk=0;
	}
	return temp;
}


//.....................处理数据函数..............................//
void change_date()
{	
	uchar i,count,num=0;
	for(i=0;i<7,num<14;i++)
	{
		count=table1[i];
		table1[i]&=0xf0;
		table2[num++]=(table1[i]>>4);
		count&=0x0f;
		table2[num++]=count;
	}
}


//....................lcd显示函数..............................//
void disply_date()
{	
	uchar i,num=0;
	for(i=0;i<14;i++)
	{	
		write_com(adder[i]);
		write_date(0x30+table2[num++]);
	}
	write_com(0x81);
	write_date(0x32);
	write_com(0x82);
	write_date(0x30);
	write_com(0xc6);
	write_date(0x3a);
	write_com(0xc9);
	write_date(0x3a);
	write_com(0x85);
	write_date(0x2d);
	write_com(0x88);
	write_date(0x2d);
	
}


//.....................延时函数..............................//
void delay(uchar ms)
{
    uchar a,b;
    for(a=ms;a--;a>0)
        for(b=110;b--;b>0);
}


//...................1602的各个子函数......................//
void write_com(uchar com)
{
    rs=0;
    rw=0;
    e=1;
    delay(5);
    P1=com;
    e=0;   
}
void write_date(uchar date)
{
    rs=1;
    rw=0;
    e=1;
    delay(5);
    P1=date; 
    e=0;
}
void init_1602()
{
   write_com(0x38);
   write_com(0x0e);
   write_com(0x06);
   write_com(0x01);
}

⌨️ 快捷键说明

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