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

📄 1_2.c

📁 ds1302实时时钟芯片驱动程序。不带显示。QQ3064192
💻 C
字号:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define LEDPORT P0

uchar numdu,tt,temp,temp01,temp02,shiwan,wan,qian,bai,shi,ge;
sbit dula=P2^7;
sbit wela=P2^6;
sbit keyfen=P2^3;
sbit keyshi=P2^1;
sbit dian=P2^4;
sbit SCLK=P3^2;
sbit IO=P3^3;
sbit RST=P3^4;

sbit ACC7=ACC^7;
sbit ACC0=ACC^0;

uchar times[7]={25,33,23,6,11,2,0x07};//用来存放时间???
uchar KEY=0;
void write_1302_byte(uchar d);//向1302定入一字节数据D
uchar read_1302_byte(void);//从1302读出一字节数据并返回
void write_1302_reg(uchar add,uchar d);//向1302地址ADD处写入数据D
uchar read_1302_reg(uchar add);//向1302地址ADD处读出数据并返回
void write_1302_time(uchar*time);//设置时间
void read_1302_time(uchar time[]);//读出时间

uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
//uchar code tablewe[]={
//0x01,0x02,0x04,0x08,0x10,0x20};
//00000001,00000010,00000100
//00001000,00010000,00100000
void display(uchar shi,uchar ge);
void display01(uchar qian,uchar bai);
void display02(uchar shiwan,uchar wan);
void delay(uint z);
void main()
{
	read_1302_time()
    temp=55;//《256
	temp01=59;
	temp02=19;
	numdu=0;
	while(1)
	{
	
	
		display02(shiwan,wan);
		display01(qian,bai);
		display(shi,ge);
	

	}
	
}

void delay(uint z)
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}
void display(uchar shi,uchar ge)
{
		shi=temp/10;
		ge=temp%10;

		dula=1;
		P0=table[shi];
		dula=0;

		wela=1;
		P0=0x10;
		delay(1);
		
		dula=1;
		P0=table[ge];
		dula=0;

		wela=1;
		P0=0x20;
		delay(1);
		
}
void display01(uchar qian,uchar bai)
{
		qian=temp01/10;
		bai=temp01%10;

		dula=1;
		P0=table[qian];
		dula=0;

		wela=1;
		P0=0x04;
		delay(1);	

		dula=1;
		P0=table[bai];
		dula=0;

		wela=1;
		P0=0x08;
		delay(1);	
}
void display02(uchar shiwan,uchar wan)
{	
		shiwan=temp02/10;
		wan=temp02%10;
		dula=1;
		P0=table[shiwan];
		dula=0;

		wela=1;
		P0=0x01;
		delay(1);	

		dula=1;
		P0=table[wan];
		dula=0;

		wela=1;
		P0=0x02;
		delay(1);		
}

/*===================================*/
/*    向1302当前地址处写入1字节数据     */
/*===================================*/
void write_1302_byte(uchar d)
{
	uchar i;
	ACC=d;   
	for(i=8;i>0;i--)
	{
		IO=ACC0;
		SCLK=1;
		SCLK=0;
		ACC=ACC>>1;
	}
}

/*===================================*/
/*    向1302当前地址处读出1字节数据     */
/*===================================*/

uchar read_1302_byte(void)
{
	uchar i;
	for(i=8;i>0;i--)
	{
		ACC=ACC>>1;
		ACC7=IO;
		SCLK=1;
		SCLK=0;
	}
	return (ACC);
}
/*===================================*/
/*    把数据DATA写入1302寄存器ADD处     */
/*===================================*/
void write_1302_reg(uchar add,uchar d)
{
	RST=0;
	SCLK=0;
	RST=1;
	write_1302_byte(add);
	write_1302_byte(d);
	SCLK=1;
	RST=0;
}
/*===================================*/
/*         读取寄存器ADD处的值          */
/*===================================*/
uchar read_1302_reg(uchar add)
{
	uchar d;
	RST=0;
	SCLK=0;
	RST=1;
	write_1302_byte(add);
	d=read_1302_byte();
	SCLK=1;
	RST=0;
	return (d);
}
/*===================================*/
/*    设置时间,TIME[0]-time[6]数据存放为:秒,分,时,日,月,星期,年          */
/*===================================*/
void write_1302_time(uchar *time)
{
	uchar add=0x80;
	uchar i;
	uchar timeBCD[7];
	bdata uchar l,h;
	for(i=0;i<7;i++)
	{
		l=time[i]%10;
		h=time[i]/10;
		timeBCD[i]=h*16+l;
	}
	write_1302_reg(0x8e,0x00);
	for(i=0;i<7;i++)
	{
		write_1302_reg(add,timeBCD[i]);
		add+=2;
	}
	write_1302_reg(0x8e,0x80);
}
/*===================================*/
/*         读取当前时间                 */
/*===================================*/
void read_1302_time(uchar time[])
{
	uchar i;
	uchar add=0x81;
	bdata uchar l,h;
	write_1302_reg(0x8e,0x00);
	for(i=0;i<7;i++)
	{
		time[i]=read_1302_reg(add);
		l=time[i]&0x0f;
		h=(time[i]>>4)&0x0f;
		time[i]=h*10+l;
		add+=2;
	}
}

⌨️ 快捷键说明

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