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

📄 jj.c

📁 一个万年历的程序,但是不是完全正确,请用者自己
💻 C
字号:
#include <STC89C51.H>//加载头文件
void delay(uint k);
bit RINGstart;

//**************** 初始化子函数****************
void init(void)
{
RINGstart=0;
IE=0x81;PT1=1;
IT1=1;
EA=0;
delay(300);
}
//*************** 主函数*********************
void main()
{ init();
  setup12887();
  read12887();
  start12887();//启动DS12887
  while(1)      //无限循环
{
   
    reset();   //复位
    key();     //扫描键盘
    conv();    //计时转换
    pdt();     //计时中断.闹铃
	for(;;)
	{switch(set)//LCD根据工作模式进行显示	
	{case 0:fun0();break;//正常显示
	 case 1:fun1();break;//调整年显示
	 case 2:fun2();break;//调整月。日显示
	 case 3:fun3();break;//调整时显示
	 case 4:fun4();break;//调整分显示 
	 default:break;
	}	
	}  
	deday(300);
}
}
//************conv函数****************/
void conv()			
{
   if(deta<=50)d_05s=0;	  //????????///
     else d_05s=1;
   if(deta>=100){sec++;deta=0;}
   if(sec>=60){min++;sec=0;if(ALMstart)ALMmin--;}
   if(ALMmin==0){ALMstart=0;rdflag=0;}	  //??????/
   if(min>=60){hou++;min=0;}
   if(hou>=24){day++;hou=0;}
   switch(mon)
  {
    case 1:if(day>31){mon++;day=1;}break;
     case 2:if(day>28){mon++;day=1;}break;
      case 3:if(day>31){mon++;day=1;}break;
       case 4:if(day>30){mon++;day=1;}break;
        case 5:if(day>31){mon++;day=1;}break;
         case 6:if(day>30){mon++;day=1;}break;
	      case 7:if(day>31){mon++;day=1;}break;
	       case 8:if(day>31){mon++;day=1;}break;
	        case 9:if(day>30){mon++;day=1;}break; 
		     case 10:if(day>31){mon++;day=1;}break;
	          case 11:if(day>30){mon++;day=1;}break;
		       case 12:if(day>31){mon++;day=1;}break;
		        default:break;
 	}		   
   if(mon>12){year++;mon=1;}break;

	}
//************** DS12887******************
#define uchar unsigned char
#define uint unsigned int
#include <reg52.h>
#include <stdio.h>
#include <absacc.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#define P128870 XBYTE[0xa000]
#define P128871 XBYTE[0xa001]
#define P128872 XBYTE[0xa002]
#define P128873 XBYTE[0xa003]
#define P128874 XBYTE[0xa004]
#define P128875 XBYTE[0xa005]
#define P128876 XBYTE[0xa006]
#define P128877 XBYTE[0xa007]
#define P128878 XBYTE[0xa008]
#define P128879 XBYTE[0xa009]
#define P12887a XBYTE[0xa00a]
#define P12887b XBYTE[0xa00b]
#define P12887c XBYTE[0xa00c]
#define P12887d XBYTE[0xa00d]
#define P12887e XBYTE[0xa00e]
#define P12887f XBYTE[0xa00f]
void setup12887(uchar *p);						                                                                                                             
void read12887(uchar *p);
void start12887(void);
void set12887(uchar *p)//设置系统时间
{
uchar i;
i=P12887d;
P12887a=0x70;P12887b=0xa2;P128870=*p++;P128871=0xff;P128872=*p++;
P128873=0xff;P128874=*p++;P128875=0xff;P128876=*p++;P128877=*p++; 
P128878=*p++;P128879=*p++;P12887b=0x22;P12887a=0x20;
i=P12887c;
}
void read12887(uchar *p)//读取系统时间
{
uchar a;
do{a=P12887a;}while((a&0x80)==0x80);
*p++=P128870;*p++=P128872;*p++=P128874;*p++=P128876;
*p++=P128877;*p++=P128878;*p++=P128879;
}
void start12887(void)//启动时钟
{
uchar i;
i=P12887d;
P12887a=0x70;P12887b=0xa2;P128871=0xff;P128873=0xff;P128875=0xff;
P12887b=0x22;P12887a=0x20;
i=P12887c;
}
 //***************键盘扫描****************
void scankey()	   //扫描键盘子函数
{  if (MS==10)EX0=1;else EX0=0;			 //	 若模式为0或10,打开外中断0
    if(MS<7)								 //	 若模式小于7
    {	if(!MSKEY){MS++;deday(300);if(MS==7)MS=0;}			  //调整模式

if(MS==1){
		  if(!MONKEY){mon++;if(mon>12)mon=1;delay(300);}  //调整月
		  if(!DAYKEY){day++;if(day>31)mon=1;delay(300);}  //调整天
	 	  if(!HOUKEY){hou++;if(hou>23)hou=0;delay(300);}  //调整时
		  if(!MMINKEY){min++;if(mon>=60)min=0;delay(300);}//调整分
}
} 
if(MS==2){													//调整定时1
 if(!HOUKEY){T0hou_st++;if(T1hou_st>23)T0hou_st=0;delay(300);
 }
  if(!HOUKEY){T0min_st++;if(T1hou_st>23)T0hou_st=0;delay(300);}
   if(!CHECKKEY){T0startflag=!T0startflag; delay(300);}		//启动T0
}
 }

//*************延时Kxlms子函数********************/
void delay(uint k)
{
	uint i,j;
	for(i=0;i<k;i++){for(i=0;j<60;j++)
	{;}reset()}
}
 //****************键盘扫描的另一种******************
 void key(void) //扫描键盘
 {uchar xx;
   P1=0xff;
    if(P1!=0xff)
    {delay(10);
      if(P1!=0xff)
       {xx=P1;
        switch(xx)  //根据按键状态,调用不同的函数
         {  case 0xfe:set_adj();break;//MS键按下,调用set_adj()子函数
            case 0xfd:inc_key();break;//+键按下,调用inc_key()子函数
            case 0xfb:dec_key();break; //-键按下,调用dec_key()子函数
			case 0xf7:ring_key();break;//ring键按下,调用ring_key()子函数
            default:break;
         }
       }
     }
  }
 //*************设定工作模式子函数**************//
   void set_adj(void)//设定工作模式子函数
   { if(cnt==5)
   { set++;
     if(set>=4)set=0;
}
}
//********按键+子函数**************//
void inc_key(void)   //按键加法子函数
{
if(cnt==5)
{
switch(set)
{case 0:if(P2==0xf7)ON_OFF=!ON_OFF;break;
 case 1:min++;if(min>=59)min=59;break;
 case 2:hour++;if(hour>=23)hour=23;break
 case 3:day++;
  switch(mon)
{
 case 1:if(day>31){day=31;}break;
  case 2:if(day>28){day=28}break;
   case 3:if(day>31){day=31}break;
    case 4:if(day>30){day=30}break;
     case 5:if(day>31){day=31}break;
      case 6:if(day>30){day=30}break;
	   case 7:if(day>31){day=31}break;
	    case 8:if(day>31){day=31}break;
	     case 9:if(day>30){day=30}break; 
		  case 10:if(day>31){day=31}break;
	      case 11:if(day>30){day=30}break;
		   case 12:if(day>31){day=30}break;
		    default:break;
			}
case 4:mon++;if(mon>=12)mon=12;break;
case 5:year++;break;
default:break;
}
}
}
//**************按键-子函数***********//
 void dec_key(void)   //按键减法子函数
{
 if(cnt==5)
{
switch(set)
{case 0:if(P2==0xf7)ON_OFF=!ON_OFF;break;
 case 1:min--;if(min<=0)min=0;break;
 case 2:hour--;if(hour<=0)hour=0;break;
 case 3:day--; if(day<=0)day=0
 case 4:mon--;if(mon<=0)mon=0;break;
 case 5:year--;break;
 default:break;
}
}
} 
//************定时子函数***************// 
 void ring_key() 
 {									 
 分if()
 					
 }
 //************
 void init_timer0(void)//定时器T0的初始化
 {TMOD=0x01;
 TH0=-(50235/256);
 TL0=-(50235%256);
 TR0=1;
 ET0=1;EA=1;
 }                                                                                                                                                                                                                                                                                                      
//************复位子函数***************//
 void reset(void)
 {
  
  
 }
 //*********************************************    
void fun0(void)                      //液晶显示子函数0
{
WriteCommandLCM(0x0c,1);                  //显示屏打开,光标不显示,不闪烁,检测忙信号
DisplayListChar(0,0,str0);
DisplayListChar(0,1,str1);               

DisplayOneChar(3,0,hour/10+0x30);         //液晶上显示小时
DisplayOneChar(4,0,hour%10+0x30);

DisplayOneChar(6,0,min/10+0x30);          //液晶上显示分
DisplayOneChar(7,0,min%10+0x30);

DisplayOneChar(9,0,sec/10+0x30); 		    //液晶上显示秒
}
void fun1(void)                           //液晶显示子函数1
{
WriteCommandLCM(0x0c,1);                  //显示屏打开,光标不显示,不闪烁,检测忙信号
DisplayListChar(0,0,str0);
DisplayListChar(0,1,str1);               

DisplayOneChar(6,0,min/10+0x30);          
DisplayOneChar(7,0,min%10+0x30);

DisplayOneChar(9,0,sec/10+0x30);  
DisplayOneChar(10,0,sec%10+0x30);  

DisplayOneChar(4,1,T/10+0x30);  
DisplayOneChar(5,1,T%10+0x30);  
							 
DisplayOneChar(11,1,temp1/10+0x30);  
DisplayOneChar(12,1,temp1%10+0x30);  
DisplayOneChar(14,1,temp2+0x30); 

WriteCommandLCM(0x0f,1);                  //显示屏打开,光标显示、闪烁、检测忙信号
DisplayOneChar(3,0,hour/10+0x30);         
DisplayOneChar(4,0,hour%10+0x30);   
}

void fun2(void)                           //液晶显示子函数2
{
WriteCommandLCM(0x0c,1);                  //显示屏打开,光标不显示,不闪烁,检测忙信号
DisplayListChar(0,0,str0);
DisplayListChar(0,1,str1);               

DisplayOneChar(3,0,hour/10+0x30);         
DisplayOneChar(4,0,hour%10+0x30);   

DisplayOneChar(9,0,sec/10+0x30);  
DisplayOneChar(10,0,sec%10+0x30);  

DisplayOneChar(4,1,T/10+0x30);  
DisplayOneChar(5,1,T%10+0x30);  

DisplayOneChar(11,1,temp1/10+0x30);  
DisplayOneChar(12,1,temp1%10+0x30);  
DisplayOneChar(14,1,temp2+0x30); 

WriteCommandLCM(0x0f,1);                  //显示屏打开,光标显示、闪烁、检测忙信号
DisplayOneChar(6,0,min/10+0x30);          
DisplayOneChar(7,0,min%10+0x30);
}

void fun3(void)                           //液晶显示子函数3
{
WriteCommandLCM(0x0c,1);                  //显示屏打开,光标不显示,不闪烁,检测忙信号
DisplayListChar(0,0,str0);
DisplayListChar(0,1,str1);                        

DisplayOneChar(3,0,hour/10+0x30);         
DisplayOneChar(4,0,hour%10+0x30);   

DisplayOneChar(6,0,min/10+0x30);          
DisplayOneChar(7,0,min%10+0x30);

DisplayOneChar(9,0,sec/10+0x30);  
DisplayOneChar(10,0,sec%10+0x30);  

DisplayOneChar(11,1,temp1/10+0x30);  
DisplayOneChar(12,1,temp1%10+0x30);  
DisplayOneChar(14,1,temp2+0x30); 

WriteCommandLCM(0x0f,1);                 //显示屏打开,光标显示、闪烁、检测忙信号
DisplayOneChar(4,1,T/10+0x30);  
DisplayOneChar(5,1,T%10+0x30);  
}        

⌨️ 快捷键说明

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