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

📄 1602.c

📁 C语言单片机编程的代码及教程文献
💻 C
字号:
#include"INCLUDE.H"
//函数声明
 void Up_date();
 void Up_disp();
 void To_almarray();
 extern void Song_delay();
 void Play();

 //定义新旧日期/时间变量
 struct date new_date,old_date;
 struct time new_time,old_time,alm_time;

  //定义软件延时计数变量
   uchar secount=0;

  //定义闹钟开关变量
  bit on=0;
  bit K1=1;

  //定义扬声器引脚
  sbit speaker=P1^0; 
code uchar menu3[16]="--Made by Zheng@";
code uchar menu4[16]="Kunlong &Lorise@";
 code uchar dispweek[7][4]={"Mon@","Tus@","Wes@","Thu@","Fir@","Sat@","Sun@"};
 code uchar menu1[16]="1.Time 2.Alarm @";
 code uchar menu2[16]="3.manufacturer@";
 code uchar alarm_menu[]="Alarm time@";
 code uchar onoff[2][4]={"OFF@","ON @"};

 //定义时间、日期显示数组
 struct disptime disp_time,disp_almtime;
 struct dispdate disp_date;
void time() interrupt 1
 {
    TH0=0x3c;
    TL0=0xd3;
    secount++;
    if(secount==20)
      {
	     secount=0;
         new_time.second++;
         if(new_time.second>=60)
	       {
		      new_time.second=0;
	          new_time.minute++;
	          if(new_time.minute>=60)
	            {
				   new_time.minute=0;
		           new_time.hour++;
		           if(new_time.hour>=24)
		            {
					   new_time.hour=0;
					   Up_date();
					}
		        }
	        }
       }
 }
 /***********************把显示数组的值转换为十进制数值	*************/
void To_value()
 {
   new_date.year=(disp_date.year[0]-'0')*1000+(disp_date.year[1]-'0')*100
                      +(disp_date.year[2]-'0')*10+(disp_date.year[3]-'0');
   new_date.month=(disp_date.month[0]-'0')*10+(disp_date.month[1]-'0');
   new_date.day=(disp_date.day[0]-'0')*10+(disp_date.day[1]-'0');

   new_time.hour=(disp_time.hour[0]-'0')*10+(disp_time.hour[1]-'0');
   new_time.minute=(disp_time.minute[0]-'0')*10+(disp_time.minute[1]-'0');
   new_time.second=(disp_time.second[0]-'0')*10+(disp_time.second[1]-'0');
 }
 /***********************把十进制的值转换为显示数组数值	*************/
void To_almarray()
 {
	disp_almtime.hour[0]=alm_time.hour/10+'0';
	disp_almtime.hour[1]=alm_time.hour%10+'0';
	disp_almtime.minute[0]=alm_time.minute/10+'0';
	disp_almtime.minute[1]=alm_time.minute%10+'0';
	disp_almtime.second[0]=alm_time.second/10+'0';
	disp_almtime.second[1]=alm_time.second%10+'0';   
 }
void To_array()
 {
    disp_date.year[0]=old_date.year/1000+'0';
	disp_date.year[1]=(old_date.year/100)%10+'0';
	disp_date.year[2]=(old_date.year/10)%10+'0';
	disp_date.year[3]=old_date.year%10+'0';
	disp_date.month[0]=old_date.month/10+'0';
	disp_date.month[1]=old_date.month%10+'0';
	disp_date.day[0]=old_date.day/10+'0';
	disp_date.day[1]=old_date.day%10+'0';

	disp_time.hour[0]=old_time.hour/10+'0';
	disp_time.hour[1]=old_time.hour%10+'0';
	disp_time.minute[0]=old_time.minute/10+'0';
	disp_time.minute[1]=old_time.minute%10+'0';
	disp_time.second[0]=old_time.second/10+'0';
	disp_time.second[1]=old_time.second%10+'0';
 }
/***********************日期更新函数************************/
void Up_date()
 {
    new_date.week++;
    if(new_date.week==8) 
	   new_date.week=1;
    new_date.day++;
    if(new_date.day>=29)
      {
	     switch(new_date.month)
           {
		     case 2:
	           {
			      if(new_date.year%4==0&&new_date.year%100!=0||new_date.year%400==0)
				    { 
	                 if(new_date.day==30) 
		               {
					      new_date.day=0;
		                  new_date.month++;
		               }
		           else 
				      {
					     new_date.day=0;
						 new_date.month++;
					  }
					 }
		         break;
	           }
	          case 1:case 3:case 5:case 7:case 8:case 10:case 12:
	             {
				   if(new_date.day==32)
		             {
					    new_date.day=0;
						new_date.month++;
					 }
		           break;
		         }
	         case 4:case 6:case 9:case 11:
	           {
			     if(new_date.day==31)
		           {
				      new_date.day=0;
					  new_date.month++;
				   }
		         break;
		       }
	       }
	    if(new_date.month==13) 
	      {
	         new_date.month=0;
		     new_date.year++;
	      }
	    if(new_date.year==6000) 
	       new_date.year=0;
      }
  }
/******************更新日期,时间显示函数****************************/
void Up_disp()
 {
   if(new_date.year!=old_date.year||new_date.month!=old_date.month
      ||new_date.day!=old_date.day||new_date.week!=old_date.week)
	 {
   	   old_date.year=new_date.year;
	   old_date.month=new_date.month;
	   old_date.day=new_date.day;
	   old_date.week=new_date.week;	     
	 }
    if(old_time.hour!=new_time.hour||old_time.minute!=new_time.minute||old_time.second!=new_time.second)
	  {
	     old_time.hour=new_time.hour;
         old_time.minute=new_time.minute;
         old_time.second=new_time.second;
	  }
 }
 //初始化函数
void Init()
 {
   //初始化时间变量
   new_time.second=old_time.second=0;
   new_time.minute=old_time.minute=0;
   new_time.hour=old_time.hour=0;

   //初始化闹钟时间变量
   alm_time.second=30;
   alm_time.minute=50;
   alm_time.hour=7;

   //初始化日期变量
   new_date.year=old_date.year=2007;
   new_date.month=old_date.month=5;
   new_date.day=old_date.day=10;
   new_date.week=old_date.week=3;

   //初始化时间显示数组
   disp_time.hour[2]='@';
   disp_time.minute[2]='@';
   disp_time.second[2]='@';

   //初始化闹钟时间显示数组
   disp_almtime.hour[2]='@';
   disp_almtime.minute[2]='@';
   disp_almtime.second[2]='@';

   //初始化日期显示数组
   disp_date.year[4]='@';
   disp_date.month[2]='@';
   disp_date.day[2]='@';

   To_almarray();
   Init_LCD();

   TMOD=0x11;
   TH0=0x3c;
   TL0=0xd3;
   IE=0x8a;
   speaker=1;
   TR0=1;
 }
 main()
 {
        Init();
		}

⌨️ 快捷键说明

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