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

📄 shizhong.c

📁 51单片机.rar
💻 C
字号:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit k=P2^7;
sbit rs=P3^2;
sbit en=P3^3;
sbit gn=P3^7;
sbit s1=P3^6;
sbit s2=P3^5;
sbit s3=P3^4;

uchar shi,fen,miao,count,flag,u,yue,ri;		 //定义变量
int nian;
 
uchar code table[]="2010-03-26 FRI"	;
uchar code table1[]="00:00:00";
uchar code table2[]="MONTUEWEDTHUFRISATSUN";

void write_sfm(uchar add,uchar date);
void write_yr(uchar add,uchar date);
void write_nian(uchar add,int nian);
void write_xq(uchar xq);
void delay(int z)			//延时函数
{
	uchar x,y;
	for(x=110;x>0;x--)
	  for(y=z;y>0;y--);
}

void write_com(uchar com)	   //液晶写指令函数
{
	rs=0;	
	P0=com;
	delay(5); 
	en=0;
	en=1;
	en=0;
}

void write_byte(uchar byte)		 //液晶写数据函数
{
	rs=1;
	P0=byte;
	delay(5);
	en=0;
	en=1;
	en=0;
}

void keyscan()					//键盘检测函数
{
 	 if(gn==0)
	 {
		  delay(5);
		  if(gn==0)
		  {
			    flag++;
				while(!gn);
			    if(flag==1)
				{
					TR0=0; 				
					write_com(0x80+0x40+11);
					write_com(0x0f);
				}
				if(flag==2)
				{
					write_com(0x80+0x40+8);
				}
				if(flag==3)
				{
					write_com(0x80+0x40+5);
				}
				if(flag==4)
				{
					write_com(0x80+0x0e);
			    }
				if(flag==5)
				{
					write_com(0x80+0x0a);
				}
				if(flag==6)
				{
					write_com(0x80+7);
				}					
				if(flag==7)
				{
					write_com(0x80+4);
				}
				if(flag==8)
				{
					flag=0;
					TR0=1;
					write_com(0x0c);
				}	
		    }
	 }
	if(flag!=0)
	 {
		if(s1==0)
		{
			delay(5);
			if(s1==0)
			{
			    while(!s1);
				if(flag==1)
				{
					miao++;
					if(miao==60)
					miao=0;	
					write_sfm(10,miao);
					write_com(0x80+0x40+11);
					
				}
				if(flag==2)
				{
					fen++;
					if(fen==60)
					fen=0;
					write_sfm(7,fen);
					write_com(0x80+0x40+8);
				}
				if(flag==3)
				{
					shi++;
					if(shi==24)
					shi=0;
					write_sfm(4,shi);
					write_com(0x80+0x40+5);
				}
				if(flag==4)
				{
					u++;
					if(u==8)
					u=1;
					write_xq(u);
					write_com(0x80+0x0e);
				}
				if(flag==5)
				{
					ri++;
					if(ri==32)
					ri=1;
					write_yr(9,ri);
					write_com(0x80+0x0a);
				}
				if(flag==6)
				{
					yue++;
					if(yue==13)
					yue=1;
					write_yr(6,yue);
					write_com(0x80+7);
				}
				if(flag==7)
				{
					nian++;
					if(nian==2099)
					nian=1985;
					write_nian(1,nian);
					write_com(0x80+4);
				}
			}
		}
		if(s2==0)
		{
			delay(5);
			if(s2==0)
			{
			    while(!s2);
				if(flag==1)
				{	
				    if(miao==0)
					{	
						miao=60;
						write_sfm(10,miao);
						write_com(0x80+0x40+11);
					}
					miao--;
					write_sfm(10,miao);
					write_com(0x80+0x40+11);			
				}
				if(flag==2)
				{	
				    if(fen==0)
					{
					    fen=60;
						write_sfm(7,fen);
						write_com(0x80+0x40+8);
					}
					fen--;
					write_sfm(7,fen);
					write_com(0x80+0x40+8);	
				}
				if(flag==3)
				{	
				    if(shi==0)
					{
						shi=24;
						write_sfm(4,shi);
						write_com(0x80+0x40+5);
					}
					shi--;
					write_sfm(4,shi);
					write_com(0x80+0x40+5);	
				}
				if(flag==4)
				{
					u--;
					if(u==0)
					u=7;
					write_xq(u);
					write_com(0x80+0x0e);
				}
			    if(flag==5)
				{					   
					ri--;
					if(ri==0)
					ri=31;
					write_yr(9,ri);
					write_com(0x80+0x0a);
			     }
				if(flag==6)
				{					
				     yue--;
					 if(yue==0)
					 yue=12;
					 write_yr(6,yue);
					 write_com(0x80+7);					
			    }
				if(flag==7)
				{
						nian--;
						if(nian==2000)
						nian=2050;
						write_nian(1,nian);
						write_com(0x80+4); 
					
				}	
		    }
	    }
   }
}	
			
void init()				   //初始化函数
{
	uchar num;
	nian=2010;
	yue=3;
	ri=26;
	k=1;
	P1=0;
	k=0;
	write_com(0x38);
	write_com(0x0c);
	write_com(0x06);
	write_com(0x01);
	write_com(0x80+0x01);
	for(num=0;num<14;num++)
	{
		write_byte(table[num]);
		delay(2);
	}
	write_com(0x80+0x40+0x04);
	 for(num=0;num<8;num++)
	{
		write_byte(table1[num]);
		delay(2);
	}
	TMOD=0x01;
	TH0=0x4c;
	TL0=0x00;
	EA=1;
	ET0=1;
	TR0=1;
}
	
void write_sfm(uchar add,uchar date)	  //写时分秒函数
{
	 uchar shi,ge;	
	 shi=date/10;
	 ge=date%10; 
	 write_com(0x80+0x40+add);
	 write_byte(0x30+shi);
	 write_byte(0x30+ge);
}

void write_yr(uchar add,uchar date)		   //写日和月函数
{
	 uchar shi,ge;	
	 shi=date/10;
	 ge=date%10; 
	 write_com(0x80+add);
	 write_byte(0x30+shi);
	 write_byte(0x30+ge);
}

void write_xq(uchar xq)					  //写星期函数
{
    uchar j;
	write_com(0x80+0x0c);
	for(j=0;j<3;j++)
	{
	  write_byte(table2[xq*3-3+j]);
	}
}

void write_nian(uchar add,int nian)		   //写年函数
{
	uchar qian,bai,shi,ge;
	qian=nian/1000;
	bai=nian%1000/100;
	shi=nian%100/10;
	ge=nian%10;
	write_com(add+0x80);
	write_byte(qian+0x30);
	write_byte(bai+0x30);
	write_byte(shi+0x30);
	write_byte(ge+0x30);
}
	
void main()								   //主函数
{
	init();
	while(1)
	{
	    keyscan();		
	}
}

void timer0() interrupt 1					 //中断函数
{
	TH0=0x4c;
	TL0=0x00;
	count++;
	if(count==20)
		{
			count=0;
			miao++;
			if(miao==60)
			{			
				miao=0;
				fen++;
				if(fen==60)
				{
					fen=0;
					shi++;
					if(shi==24)
					{
					  shi=0;
					}
					write_sfm(4,shi);
				}
				write_sfm(7,fen);
			}
			write_sfm(10,miao);
		}
}

⌨️ 快捷键说明

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