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

📄 wahaha.txt

📁 用c51单片机及其外围电路LCD显示
💻 TXT
字号:
#include<at89x52.h>
#define uchar unsigned char
#define uint unsigned int
uchar led_code[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
uchar key1_flag,key2_flag,glitter_flag=0;   /*key1_flag用来存放按键1状态,key2_flag用来存放按键2状态*/
uchar disp[6]=0;    /*存放要显示字符*/
uchar second,minute,hour;    
uchar day=1;
uchar month=6;
uchar year=5;

uchar daynum(void)      /*判断每月天数*/
{
  if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
	return(31);
  else if(month==4||month==6||month==9||month==11)
    return(30);
  else if(((year+2000)%4==0)&&((year+2000)%100!=0))    /*判断是否闰年*/
	return(29);
  else 
	return(28);
}

void delayXms(uint x)     /*软件延时程序,用于精度不高延时*/
{
	unsigned int i,j;
	for(i=0;i<x;i++)
	  for(j=0;j<100;j++);
}

void display()    /*显示程序,用六个数码管分别显示disp[6]数组里的数字*/
{
  uint i;
  uchar temp;
  temp=0x01;
  for(i=0;i<6;i++)
    {
      P0=0xff;
	  P2=~temp;
	  P0=led_code[disp[i]];	  	  
	  delayXms(2);
	  temp=temp<<1;	  
	}
}

void process()     /*处理放置所需显示数字*/
{
  if(key1_flag==0)
    {
	  disp[5]=hour/10;
	  disp[4]=hour%10;
	  disp[3]=minute/10;
	  disp[2]=minute%10;	  	  
	  disp[1]=second/10;
	  disp[0]=second%10;
	}
  else if(key1_flag==1)
    {
	  disp[5]=year/10;
	  disp[4]=year%10;
	  disp[3]=month/10;
	  disp[2]=month%10;	  	  
	  disp[1]=day/10;
	  disp[0]=day%10;
	}
}

void keyscan()      /*键盘扫描程序,根据相应按键置相应标志位*/
{
  uint i;
  if((P1&0x0f)!=0x0f)  
    {
	  delayXms(10);          /*消抖*/
      if((P1&0x04)!=0x04)       /*按键1按下,用于转换年/月/日及时/分/秒*/  
        {
		  key2_flag=0;
		  TR0=1;
		  if(++key1_flag==2)
			key1_flag=0;
		}	  
	  else if((P1&0x01)!=0x01)       /*按键2按下,用于校准时间*/ 
        {
		  if(++key2_flag==4)
			{
			  key2_flag=0;
		      TR0=1;
			}
		  else
		    {
			  TR0=0;
			  glitter_flag=0;
		    }
		}
      else if((P1&0x08)!=0x08)       /*按键3按下,校准时间时增加数字量*/
        {
	      for(i=0;i<10;i++)
	        display();
          while((P1&0x08)!=0x08)       /*如果按键3出现持续按下,则快速增加数字量*/
		    {
			  if(key1_flag==0&&key2_flag==1)      /*快增调节时*/
  			    {
                  if(++hour==24)
 				    hour=0;
				  process();
	              display();
			    }
			  if(key1_flag==0&&key2_flag==2)      /*快增调节分*/
  			    {
                  if(++minute==60)
 				    minute=0;
				  process();
	              display();
  			    }
			  if(key1_flag==0&&key2_flag==3)      /*快增调节秒*/
  			    {
                  if(++second==60)
 				    second=0;
				  process();
	              display();
  			    }
			  if(key1_flag==1&&key2_flag==1)      /*快增调节年*/
  			    {
                  if(++year==100)
 				    year=0;
				  process();
	              display();
  			    }
			  if(key1_flag==1&&key2_flag==2)      /*快增调节月*/
  			    {
                  if(++month==13)
 				    month=1;
				  process();
	              display();
  			    }
			  if(key1_flag==1&&key2_flag==3)      /*快增调节日*/
  			    {
                  if(++day==(daynum()+1))     
 				    day=1;
				  process();       
	              display();
  			    }
			  display();
			}
		  if(key1_flag==0&&key2_flag==1)      /*慢增调节时*/
  			  {
                if(++hour==24)
 				  hour=0;
			  }
		  else if(key1_flag==0&&key2_flag==2)      /*慢增调节分*/
  			    {
                  if(++minute==60)
 				    minute=0;
  			    }
		  else if(key1_flag==0&&key2_flag==3)      /*慢增调节秒*/
  			    {
                  if(++second==60)
 				    second=0;
  			    }
	      else if(key1_flag==1&&key2_flag==1)      /*慢调节年*/
  			    {
                  if(++year==100)
 				    year=0;
  			    }
		  else if(key1_flag==1&&key2_flag==2)      /*慢增调节月*/
  			    {
                  if(++month==13)
 				    month=1;
  			    }
		  else if(key1_flag==1&&key2_flag==3)      /*慢增调节日*/
  			    {
                  if(++day==daynum()+1)     
 				    day=1;
  			    }

		}
	  else if((P1&0x02)!=0x02)       /*按键4按下,校准时间时减少数字量*/
        {
	      for(i=0;i<10;i++)
	          display();
          while((P1&0x02)!=0x02)       /*如果按键4出现持续按下,则快速减少数字量*/
		    {
			  if(key1_flag==0&&key2_flag==1)      /*快减调节时*/
  			    {
                  if(hour==0)
 				    hour=23;
				  else
				    hour--;
				  process();
	              display();
			    }
			  if(key1_flag==0&&key2_flag==2)      /*快减调节分*/
  			    {
                  if(minute==0)
 				    minute=59;
				  else
				    minute--;
				  process();
	              display();
  			    }
			  if(key1_flag==0&&key2_flag==3)      /*快减调节秒*/
  			    {
                  if(second==0)
 				    second=59;
				  else
				    second--;
				  process();
	              display();
  			    }
			  if(key1_flag==1&&key2_flag==1)      /*快减调节年*/
  			    {
                  if(year==0)
 				    year=99;
				  else
				    year--;
				  process();
	              display();
  			    }
			  if(key1_flag==1&&key2_flag==2)      /*快减调节月*/
  			    {
                  if(--month==0)
 				    month=12;
				  process();
	              display();
  			    }
			  if(key1_flag==1&&key2_flag==3)      /*快减调节日*/
  			    {
                  if(--day==0)     
 				    day=daynum();
				  process();       
	              display();
  			    }
			  display();
			}
          if(key1_flag==0&&key2_flag==1)      /*慢减调节时*/
  			    {
                  if(hour==0)
 				    hour=23;
				  else 
				    hour--;
			    }
		  else if(key1_flag==0&&key2_flag==2)      /*慢减调节分*/
  			    {
                  if(minute==0)
 				    minute=59;
				  else
				    minute--;
  			    }
		  else if(key1_flag==0&&key2_flag==3)      /*慢减调节秒*/
  			    {
                  if(second==0)
 				    second=59;
				  else
				    second--;
  			    }
		  else if(key1_flag==1&&key2_flag==1)      /*慢减调节年*/
  			    {
                  if(year==0)
 				    year=99;
				  else
				    year--;
  			    }
		  else if(key1_flag==1&&key2_flag==2)      /*慢减调节月*/
  			    {
                  if(--month==0)
 				    month=12;
  			    }
		  else if(key1_flag==1&&key2_flag==3)      /*慢减调节日*/
  			    {
                  if(--day==0)     
 				    day=daynum();
  			    }
		}
	  while((P1&0x0f)!=0x0f)
	    display();
	} 
}

void onems()interrupt 1     /**/
{
  P3_5=0;
  P3_5=1;
  TH0=0xfc;
  TL0=0x18;
}

void onesecond()interrupt 3
{
  second++;
  TH1=0xfc;
  TL1=0x18;
}

void main(void)
{
  TMOD=0x51;
  TH0=0xfc;
  TL0=0x18;
  TH1=0xfc;
  TL1=0x18;
  EA=1;
  ET0=1;
  ET1=1;
  TR0=1;
  TR1=1;  
  while(1)
    {
	  keyscan();
      if(second==60)
	    {
		  minute++;
		  second=0;
		  if(minute==60)
		    {
			  hour++;
			  minute=0;
			  if(hour==24)
			    {
				  day++;
				  hour=0;
				  if(day=daynum()+1)
				    {
					  month++;
					  day=1;
					  if(month==13)
					    {
						  year++;
						  month=1;
						  if(year==100)
						    year=0;
						}
					}
				}
			}
		}
	  process();
	  glitter_flag++;	  
	  glitter_flag=glitter_flag%30;
	  if((key2_flag==1)&&(glitter_flag>15)&&(glitter_flag<30))
	    {
		  disp[5]=10;
		  disp[4]=10;
		}
	  if((key2_flag==2)&&(glitter_flag>15)&&(glitter_flag<30))
	    {
		  disp[3]=10;
		  disp[2]=10;
		}
	  if((key2_flag==3)&&(glitter_flag>15)&&(glitter_flag<30))
	    {
		  disp[1]=10;
		  disp[0]=10;
		}
	  display();	  
	}
}

⌨️ 快捷键说明

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