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

📄 1302a.c

📁 DS1302时钟芯片程序 电子时钟 1302 万年历 c语言程序
💻 C
字号:
//DS1302时钟芯片程序
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit CLK=P2^3;       		//定义口
sbit IO=P2^4;
sbit RST=P2^5;
sbit ACC7=ACC^7;
sbit ACC0=ACC^0;
uchar a[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}, //定义数码管显示码
	  b[8]={0x57,0x56,0x23,0x21,0x11,0x04,0x73,0xbe},//写入时钟数据	,最后be突发访问
	  c[7],v[8];	  //c存放读出时钟数据
//uchar u[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe},v[8];	//u[]位选信号,v[]显示信号

void delay(uchar z)								   // 延时
{
	uchar i,j;
	 	for(i=z;i>0;i--)
		   for(j=200;j>0;j++);
}
void delaynop()
{      uchar i;
 	for(i=4;i>0;i--);
}


//	显示子程序
void display(void)
 {
uchar x,i,l; 
  
 
 for(i=0;i<8;i++)
 {	if (i==2||i==5)
    x=10;
  	else
    x=v[i];
	P0=a[x];	//LED是P0口驱动
	delaynop();
	l=P2&0xf8 ;
  	P2=l+7-i;
   	delay(5);	
	
 }
  delay(20);
   }

//********DS1302读写程序************

void w(uchar u) 					   //写入1位字节
{ 
    uchar i;
    ACC = u;
    for(i=8; i>0; i--)
    {
        IO = ACC0;         
        CLK = 1;
        CLK = 0;
        ACC = ACC >> 1; 
    } 
}

uchar r(void) 						//读出1位字节
{ 
    uchar i;
    for(i=8; i>0; i--)
    {
        ACC = ACC >>1;        
        ACC7 = IO;
        CLK = 1;
        CLK = 0;
    } 
    return(ACC); 
}

void W1302(uchar ucAddr, uchar ucDa)
{
    RST = 0;
    CLK = 0;
    RST = 1;
    w(ucAddr);       // 地址,命令 
    w(ucDa);       //写1Byte数据
    CLK = 1;
    RST = 0;
}



void wclock(uchar *p)	  //写入时钟多字节数据
{
	uchar i; 
//	W1302(0x80,0x00);	  //停止时钟
	W1302(0x8e,0x00);	  //  允许写
	RST=0;
	CLK=0;
	RST=1;				 
	w(0xbe);			 //写多字节命令
	for(i=8;i>0;i--)
	{
		w(*p);	 //按数组指针逐个写入,写入数据在主函数调用时指向b数组
		p++;
	}
	W1302(0x00,0x50);	//启动定时器
	CLK=1;
	RST=0;
}
void rclock(uchar *p)	  //读出时钟多字节数据
{
	uchar i;
	
	RST=0;
	CLK=0;
	RST=1;
	w(0xbf);
	for(i=7;i>0;i--)
	{
		*p=r();
		p++;
	}
	CLK=1;
	RST=0;
}

void main(void) 
{
   	wclock(b);	
	while(1)
 { 	
 	rclock(c);
	switch(v[0])
{
	case(5):
 		v[1]=(c[3]&0xf0)>>4,
 		v[0]=c[3]&0x0f,
	 	v[4]=(c[4]&0xf0)>>4;
 		v[3]=c[4]&0x0f,
 		v[7]=(c[6]&0xf0)>>4,
		v[6]=c[6]&0x0f,			          
 		display(); 			
		   	delay(50);
	break;
default:
	
	v[1]=(c[0]&0xf0)>>4,
	v[0]=c[0]&0x0f,
	v[4]=(c[1]&0xf0)>>4,
 	v[3]=c[1]&0x0f,
 	v[7]=(c[2]&0xf0)>>4,
 	v[6]=c[2]&0x0f,
	display();
	break; 	
	
  }
  }
}

⌨️ 快捷键说明

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