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

📄 text1.c

📁 电子钟实验
💻 C
字号:
#include<reg51.h>

#define uchar unsigned char
#define uint unsigned int

sbit rs=P1^6;
sbit rw=P1^5;
sbit ep=P1^4;

uchar code rr[]={"D:"};
uchar code ff[]={"W:"};
uchar code ss[]={"Time:"};
uchar code table[]={"0123456789-"};
uchar cnt=0,id=0;
uint nn=2008;
uchar hour=23,min=59,sec=45,xx=1,yy=1,tt=1;
uchar qq[]={"000000000000000000"};
uchar flang;

void delay(uint n) 
{
  uchar i,j;
  for(i=0;i<n;i++)
   for(j=0;j<121;j++)
   ;
}

void xmjc(void)	  //闲忙检测
{
  rs=0;
  rw=1;
  ep=1;
  while(P2&0x80)
  ;
  ep=0;
}


void xml(unsigned char comm)  //写命令
{
  xmjc();
  rs=0;
  rw=0;
  ep=1;
  P2=comm;
  ep=0;
}

void xsj(unsigned char dat)
{
 xmjc();
 rs=1;
 rw=0;
 ep=1;
 P2=dat;
 ep=0;
}
void lcd_init(void)	 //1602初始化
{
  xml(0x38);
  xml(0x06);//光标和显示模式设置
  xml(0x0c);
  xml(0x01);
}



void sjzh(void)
{uchar ee=10;
  qq[0]=hour/10;
  qq[1]=hour%10;
  qq[2]=ee;
  qq[3]=min/10;
  qq[4]=min%10;
  qq[5]=ee;
  qq[6]=sec/10;
  qq[7]=sec%10;
  qq[8]=nn/1000;
  qq[9]=nn/100%10;
  qq[10]=nn%100/10;
  qq[11]=nn%10;
  qq[12]=ee;
  qq[13]=yy/10;
  qq[14]=yy%10;
  qq[15]=ee;
  qq[16]=tt/10;
  qq[17]=tt%10;
  }

void aa(uchar str,uchar lengch)
{
  uchar i;
  for(i=0;i<lengch;i++)
  {
     xsj(str);
   }
}

uchar ajqd(void)
{ 
 while(1)
  {
    P3=0xff;
    flang=P3;
    if(P3!=0xff)
     {
      delay(10);
      if(P3!=0xff) 
       {while(P3!=0xff);}
      }
    return flang;break;
  }	
}

void disp(void)  
{   
  uchar i,j,k,m,n;
  xml(0xc0);
   for(i=0;i<5;i++)
    {
     aa(ss[i],1);
    }
   sjzh();
   for(j=0;j<8;j++)
    {
     xml(0xc5+j);
     aa(table[qq[j]],1);
    }
    xml(0x80);
    for(k=0;k<2;k++)
     {
	  aa(rr[k],1);
   	 }
	for(m=0;m<10;m++)
      {
	    xml(0x82+m);
       aa(table[qq[8+m]],1); 
	   }
	xml(0x8d);
	for(n=0;n<2;n++)
	 {
	  aa(ff[n],1);
	 }
	 xml(0x8f);
	 aa(table[xx],1);
 }




void main(void)
{ 
 lcd_init();
 EA=1;
 ET0=1;
 TMOD=0X01;
 TH0=-50000/256;
 TL0=-50000%256;
 TR0=1;
 
while(1) 
{ 
   disp();
   //flang=0xff;
   ajqd();  
   if(flang==0xfb){id++;if(id>6)id=0;}
   switch(id)
	{
	    
	  case 1:	xml(0x0e);xml(0x85); delay(10);
				if(flang==0xf7){nn++;if(nn>9999)nn=0;}
                break;
	   case 2:	xml(0x0e);xml(0x88); delay(10);
				if(flang==0xf7){yy++;if(yy>12)yy=1;} 
				break;
	   case 3:	xml(0x0e);xml(0x8b); delay(10);					                
				if(flang==0xf7){tt++;if(tt>31)tt=1;}
				break;
	   case 4:	xml(0x0e);xml(0x8f); delay(10);
				 if(flang==0xf7){xx++;if(xx>7)xx=1;}  
				break;
	   case 5:	xml(0x0e);xml(0xc6); delay(10);
				if(flang==0xf7){hour++;if(hour>23)hour=0;} 
				break;
	   case 6:	xml(0x0e);xml(0xc9); delay(10);
				if(flang==0xf7){min++;if(min>59)min=1;}
				break;
		default:xml(0x0c);	  
	   }
	   } 
 } 

   
void zd(void) interrupt 1 using 0
{
 TH0=-50000/256;
 TL0=-50000%256;
 cnt++;
 if(cnt>20)
  { 
    cnt=0;
    sec++;
	if(sec>59)
	{
	  sec=0;
	  min++;
	  if(min>59)
	   { 
	     min=0;
	     hour++;
		 if(hour>23)
		   {
		     hour=0;
			 xx++;
			 if(xx>7)
			 xx=1;
			 tt++;
			{
			   if(yy==1||yy==3||yy==5||yy==7||yy==8||yy==10||yy==12)
			   { 
			     if(tt>31)
			     {
			       tt=1;
			       yy++;
				  }
			    }
			    else if(yy==4||yy==6||yy==9||yy==11)
			     {
			       if(tt>30)
				   {
				    tt=1;
				    yy++;
				   }
			      }
			    else if(yy==2) 
			     {
				  if((nn%400==0)||((nn%100!=0)&&(nn%4==0)))
			        {
				      if(tt>29)
					   {
					     tt=1;
					     yy++;
				       }
				     }
				  else if(tt>28)
				  {
				    tt=1;
					yy++;
				  }
				 }	
			   }  			   
				if(yy>12)
				 {
				   yy=1;
				   nn++;
				   if(nn>9999)
				   nn=0;
				  }
			    }
			  }
	      }
	   }
  }

⌨️ 快捷键说明

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