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

📄 main.h

📁 用单片机制作电子时钟,lcd1602显示,包括模拟电路图,源码,以及编译过程等
💻 H
字号:
#ifndef MAIN_H
#define MAIN_H 

#include "REGX52.H "
#include "LCD1602.h"
#include "DS1302.h"

#define th0   0xee;					  //5ms
#define tl0   0x00;
#define th1   0xdc;					  //10ms
#define tl1   0x00;

sbit updown = P1^1;	   //0x0d
sbit choose = P1^2;	   //0x0b
sbit enter  = P1^3;	   //0x07	  
sbit buzzer = P1^4;				  
       unsigned char lcdmenu=1,resetflag=1; 
       unsigned char keyflag=0;	 
       bit lcdflag=0;
	   bit Alarm_on=0;
	   bit resbit=0;
       unsigned char keycode;
       unsigned char oldcode,keyt; 
	   unsigned char station;
static unsigned char jj;
static  SYSTEMTIME CurrentTime,Alarm_time;	

void key_explain(unsigned char );		          //按键解释
void currenttime();								  //显示当前时间
void menu_choose(unsigned char lcdmenu);		  //菜单选择
void lcd_menu(void);       		                  //显示菜单
void alarm_set();								  //闹钟设置
void alarm_speaker();							  //闹钟启动
void time_reset();								  //时间重设
void delay(unsigned int count);					  //延时函数

void delay(unsigned int count)				      //延时函数
 {	unsigned char i,j;
     for(i=0;i<=count;i++)
	  for(j=0;j<=100;j++)
	      ;
 }
 void time1_isr(void)  interrupt 3	  	           //T1中断
{  	static unsigned char ii;
    TR1=0;
    TH1=th1;
    TL1=tl1;				
    ii++;
	 if(ii==50)
	   { ii=0;
		 if((CurrentTime.Hour==Alarm_time.Hour)&&(CurrentTime.Minute==Alarm_time.Minute))
			  buzzer=~buzzer;
		  else buzzer=1;
	   	    
		DS1302_GetTime(&CurrentTime);
		DateToStr(&CurrentTime);
		TimeToStr(&CurrentTime); 

		GotoXY(0,0);
		Print("Date: "); 
		Print(CurrentTime.DateString);

		GotoXY(0,1);
		Print("Time: ");
		Print(CurrentTime.TimeString);
	
	   }
	   delay(20);
  TR1=1;
}

 void time0_isr(void)  interrupt 1	  	         //T0中断扫描键盘
 {	
    TR0=0;
    TH0=th0;
	TL0=tl0;

    keycode=P1;
	keycode=keycode&0x0f;
	oldcode=keycode;
	 if(keycode!=0x0f)
	     {while(1)
			{ keycode=P1;
	          keycode=keycode&0x0f;
			  if( keycode==0x0f)
				 break;
			}		  
		  key_explain(oldcode);         
				
	     }
  	TR0=1;
  }	
void key_explain(unsigned char oldcode)		     //按键解释
{   
		   
		   lcdflag=1;   
		   switch(oldcode)
		    {
		     case 0x0d: keyflag=1;			  
		                break;			        //updown
	         case 0x0b: keyflag=2;			 
	  				    break;			        //choose
		     case 0x07: keyflag=3;            
		                break;			        //enter
		     default:  	break;
	         }

	 if(keyflag==2)
	   { if(station==0)
		   lcdmenu++;
		 if(station==2||station==3)
		   resetflag++;
	   } 	
	 if(lcdmenu==4)	
	    lcdmenu=1; 
	 if(resetflag==6)
		resetflag=1;   
}
void time_reset()						      //时间重设
{ 
    SYSTEMTIME ResetTime;
  	
	  TR1=0;
	if(resbit==1)
   	   {
	    ResetTime=CurrentTime;
		GotoXY(0,0);
	    Print("Rdate:");
		Print(ResetTime.DateString);
		GotoXY(0,1);
		Print("Rtime:");
		Print(ResetTime.TimeString);
		}
	switch(resetflag)		                  //choose健	 2
	{ case 1:
			 GotoXY(7,0);
			 Print(" ");
			 delay(100);
	         break;
	 case 2: GotoXY(10,0);
			 Print(" ");
			 delay(100);
	         break;
	 case 3: GotoXY(13,0);
	 		 Print(" ");
			  delay(100);
	         break;
	 case 4: GotoXY(7,1);
	         Print(" ");
			 delay(100);
	         break;
	 case 5: GotoXY(10,1);
			 Print(" ");
			 delay(100);
	         break;
	
	 default:break;
	}

	 	
  if(keyflag==1)			                 //updown键	 1
   { 
  
    switch(resetflag)		                 //choose健	 2
	{ case 1:
			 ResetTime.Year++;
			 if(ResetTime.Year>=100)
			   	ResetTime.Year=0;
	         break;
	 case 2:
			 ResetTime.Month++;
			 if(ResetTime.Month>=13)
			   	ResetTime.Month=0;
	         break;
	 case 3: 
	 		 ResetTime.Day++;
			 if(ResetTime.Day>=31)
			   	ResetTime.Day=0;
	         break;
	 case 4: 
	         ResetTime.Hour++;
			 if(ResetTime.Hour>=24)
			   	ResetTime.Hour=0;
	         break;
	 case 5: 
			 ResetTime.Minute++;
			 if(ResetTime.Minute>=60)
			   	ResetTime.Minute=0;
	         break;
	
	 default:break;
	}
	keyflag=4;
	resbit=0;
    DS1302_SetTime(DS1302_YEAR,ResetTime.Year);		 
	DS1302_SetTime(DS1302_MONTH,ResetTime.Month);
	DS1302_SetTime(DS1302_DAY,ResetTime.Day );
	DS1302_SetTime(DS1302_HOUR,ResetTime.Hour );
	DS1302_SetTime(DS1302_MINUTE,ResetTime.Minute );
   }
   	DateToStr(&ResetTime);
	TimeToStr(&ResetTime);
	GotoXY(0,0);
	Print("Date: ");
	Print(ResetTime.DateString);
	GotoXY(0,1);
	Print("Time: ");
	Print(ResetTime.TimeString);	
  	delay(4);

}
  	 
void alarm_set(void)						     //闹钟设置
{ 
  
  	  TR1=0;
	if(resbit==1)
   	   {
	   Alarm_time=CurrentTime;
		GotoXY(0,0);
	    Print("Adate:");
		Print(Alarm_time.DateString);
		GotoXY(0,1);
		Print("Atime:");
		Print(Alarm_time.TimeString);
		}
	switch(resetflag)		                      //choose健	 2
	{ case 1:
			 GotoXY(7,0);
			 Print(" ");
			 delay(100);
	         break;
	 case 2: GotoXY(10,0);
			 Print(" ");
			 delay(100);
	         break;
	 case 3: GotoXY(13,0);
	 		 Print(" ");
			  delay(100);
	         break;
	 case 4: GotoXY(7,1);
	         Print(" ");
			 delay(100);
	         break;
	 case 5: GotoXY(10,1);
			 Print(" ");
			  delay(100);
	         break;
	
	 default:break;
	}

	 	
  if(keyflag==1)			                        //updown键	 1
   { 
  
    switch(resetflag)		                        //choose健	 2
	{ case 1:
			 Alarm_time.Year++;
			 if(Alarm_time.Year>=100)
			   	Alarm_time.Year=0;
	         break;
	 case 2: 
			 Alarm_time.Month++;
			 if(Alarm_time.Month>=13)
			   	Alarm_time.Month=0;
	         break;
	 case 3: 
	 		 Alarm_time.Day++;
			 if(Alarm_time.Day>=31)
			   	Alarm_time.Day=0;
	         break;
	 case 4:
	         Alarm_time.Hour++;
			 if(Alarm_time.Hour>=24)
			   	Alarm_time.Hour=0;
	         break;
	 case 5: 
			 Alarm_time.Minute++;
			 if(Alarm_time.Minute>=60)
			   	Alarm_time.Minute=0;
	         break;
	 default:break;
	}
	keyflag=4;
	resbit=0;
	DateToStr(&Alarm_time);
	TimeToStr(&Alarm_time);
   }
   GotoXY(0,0);
	Print("Date: ");
	Print(Alarm_time.DateString);
	GotoXY(0,1);
	Print("Time: ");
	Print(Alarm_time.TimeString);	
  	delay(4);
}
void lcd_menu(void)		                 //显示菜单
{ 	static unsigned char jj;
    jj++;
 	if(resbit==1)
    {TR1=0;
	GotoXY(0,0);
    Print("   MENU:"); 
	Print("   Alarm");	  
    GotoXY(0,1);
    Print("   Time ");
    Print("   Reset");
   	 }
	  resbit=0;
       switch(lcdmenu)
	      {
		    case 1: 
			        GotoXY(9,1);
				    Print("  ");			
			        GotoXY(0,1);
					Print("=>");
				    break;
				  
		    case 2: 
			        GotoXY(0,1);
				    Print("  ");			
			       	GotoXY(9,0);
		            Print("=>");
				    break;
				  
		    case 3: 			
			        GotoXY(9,0);
				    Print("  ");			
			        GotoXY(9,1);
		            Print("=>");
				    break;
				  
		    default:
				    break; 
		 }
} 
#endif 	 

⌨️ 快捷键说明

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