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

📄 时钟.c

📁 单片机C源程序+HEX文件。配合实验板。需要的话加Q:394011495.并注明。
💻 C
字号:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rclk=P1^4;
sbit srclk=P1^7;
sbit ser=P1^5;
sbit scl=P2^0;
sbit sda=P2^1;
uchar wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f},
	  duantable[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40},k;
uchar shi=13,fen=50,miao=20,count,wnum[3],weinum,i,a,j,/*x[3]={20,10,11},b,*/h;

/*void delay1()
{
	for(h=80;h>0;h--);
} */
void displaymiao(uint miao)
{
	wnum[1]=miao/10;
	wnum[0]=miao%10;
	wnum[2]=10;
	for(j=0;j<3;j++)
	{	
		a=wnum[j];
		k=wei[weinum++];
		for(i=0;i<8;i++)
		{
			srclk=0;
			k=k<<1;
			ser=CY;
			srclk=1;	
		}
		k=duantable[a];
		for(i=0;i<8;i++)
		{
			srclk=0;
			k=k<<1;
			ser=CY;
			srclk=1;
		}
		rclk=0;
		rclk=1;
	}
			
}

void displayfen(uint fen)
{
	wnum[1]=fen/10;
	wnum[0]=fen%10;
	for(j=0;j<3;j++)
	{	
		a=wnum[j];
		k=wei[weinum++];
		for(i=0;i<8;i++)
		{
			srclk=0;
			k=k<<1;
			ser=CY;
			srclk=1;	
		}
		k=duantable[a];
		for(i=0;i<8;i++)
		{
			srclk=0;
			k=k<<1;
			ser=CY;
			srclk=1;
		}
		rclk=0;
		rclk=1;
	}
						
}

void displayshi(uint shi)
{
	wnum[1]=shi/10;
	wnum[0]=shi%10;
	for(j=0;j<2;j++)
	{	
		a=wnum[j];
		k=wei[weinum++];
		for(i=0;i<8;i++)
		{
			srclk=0;
			k=k<<1;
			ser=CY;
			srclk=1;	
		}
		k=duantable[a];
		for(i=0;i<8;i++)
		{
			srclk=0;
			k=k<<1;
			ser=CY;
			srclk=1;
		}
		rclk=0;
		rclk=1;
	}
				
}

void init()
{
	EA=1;
	ET0=1;
	TMOD=0x01;
	TR0=1;
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;
}


/*void delay()
{;;}
void init2()		  // 初始化
{
	sda=1;
	delay();
	scl=1;
	delay();
	k=0xff;
	for(i=0;i<8;i++)
	{
		srclk=0;
		k=k<<1;
		ser=CY;
		srclk=1;
	}
	k=0x00;
	for(i=0;i<8;i++)
	{
		srclk=0;
		k=k<<1;
		ser=CY;
		srclk=1;
	}
	rclk=0;
	rclk=1;
}
void start()			//开始信号
{
	
	sda=1;
	delay();
	scl=1;
	delay();
	sda=0;
	delay();

}

void stop()					  //结束信号
{	
	sda=0;
	delay();
	scl=1;
	delay();	
	sda=1;
	delay();
}

void ack()			 //响应信号
{
	uchar i;
	scl=1;
	delay();
	while((sda==1)&&(i<200))
		i++;
	scl=0;
	delay();	
}

void write_type(uchar date)			//写数据
{
	uchar k,i;
	k=date;
	for(i=0;i<8;i++)
	{
		k=k<<1;
		scl=0;
		delay();
		sda=CY;
		delay();
		scl=1;
		delay();
	}
	scl=0;
	delay();
	sda=1;
	delay();
}
uchar read_type()				 //读数据
{
	uchar k,i,j;
	scl=0;
	delay();
	sda=1;
	delay();
	for(i=0;i<8;i++)
	{
		scl=1;
		delay();
		k=k<<1;
		j=sda;
		k=k|j;
		scl=0;
		delay();
	}
	return k;
}

void baocun(uint miao,uint fen,uint shi)
{
	x[0]=miao;
	x[1]=fen;
	x[2]=shi;
	for(i=0;i<3;i++)
	{
		b=x[i];
		start();
		write_type(0xa0);
		ack();
		write_type(i);
		ack();
		write_type(b);
		ack();
		stop();
		delay1();	
	}
			
} 
void duqu()
{
	for(i=0;i<3;i++)
	{
		start();
		write_type(0xa0);
		ack();
		write_type(i);
		ack();
		start();
		write_type(0xa1);
		ack();
		x[i]=read_type();
		stop();
		delay1();	
	}
	miao=x[0];
	fen=x[1];
	shi=x[2];

}		 */

void main()
{	
	init();
	//init2();
	//baocun(miao,fen,shi);
	//duqu();
	while(1)
	{
		if(count==20)
		{
			count=0;
			miao++;
		}
		if(miao==60)
		{
			miao=0;
			fen++;
		}
		if(fen==60)
		{
			fen=0;
			shi++;
		}
		if(shi==24)
		{
			shi=0;
		}
		displayfen(miao);
		displaymiao(fen);
		displayshi(shi);
		weinum=0;
	//	baocun(miao,fen,shi);	
	}
	
}




void time() interrupt 1
{
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;
	count++;		
}

⌨️ 快捷键说明

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