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

📄 万年历.c

📁 基于AT89S52的万年历C51程序 开发平台:Keil uVision2 日历芯片:DS1302
💻 C
📖 第 1 页 / 共 2 页
字号:

/********************************************************************************************
*
*                以下是通过按键控制年,月,日,时,分,秒,星期的显示和设置   
*
*********************************************************************************************/
void nian()//显示和设置年 
{            
          if(keys==10)              //键值为10    表示年份
          {
                while(1)
                {
                    W1302( 0x8e, 0x00);	  //打开写保护
                    da=R1302(0x8d);
                    a[0]=2;
                    a[1]=0;
                    a[2]=(da&0xf0)/16;
                    a[3]=(da&0x0f);          //将键值记录
                    i=4;                	
                    xianshi(a,i);           							
                    keys=jpdata();
                    if(keys==14)			 //设置年份
            		{
            			
                        for(i=2;i<4;)
                        {						
                            if(jpdata()<10)
                			{
                                keys=jpdata();
                                a[i]=keys;
                        		i++;
                                while(1)
            					{
                        			if(jpdata()==16)
                						break;
                        			xianshi(a,i);
            					}	
                			} 
                                  					
                            xianshi(a,i);
                		}
						W1302( 0x8e, 0x00);
                        W1302(0x8c,(a[2]*16)|a[3]);         				
                	}
                    if(keys==11)  {yue_ri();}
                    if(keys==12)  {shi_fen();}
                    if(keys==13)  {miao();}
                    if(keys==15)  {xingqi();}  	
                   
              }                            //将键值的有效位数记录
         }
}



void yue_ri()//显示和设置月/日
{
    if(keys==11)                  // 表示月/日
                {
                    while(1)
                    {
                        W1302( 0x8e, 0x00);
                        da=R1302(0x89);		   //读月
                        a[0]=(da&0xf0)>>4;  
                        a[1]=(da&0x0f);
						W1302( 0x8e, 0x00);
                        da=R1302(0x87);		   //读日
                        a[2]=(da&0xf0)>>4;
                        a[3]=(da&0x0f);         //将键值记录
                        i=4;
                        xianshi(a,i);       								
                        keys=jpdata();
                        if(keys==14)		   //设置月/日
                	    {
            			
                            for(i=0;i<4;)
                            {						
                                if(jpdata()<10)
                	         	{
                                    keys=jpdata();
                                    a[i]=keys;
                        	        i++;
                                    while(1)
            			            {
                        	        	if(jpdata()==16)
                    			        	break;
                        	        	xianshi(a,i);
            			            }	
                    	        } 
                                        					
                                xianshi(a,i);
                	        }	
			                W1302( 0x8e, 0x00);			  //打开写保护
                            W1302(0x88,(a[0]*16)|a[1]);   //写入月
			                W1302(0x86,(a[2]*16)|a[3]);   //写入日 					
                        }	
                       if(keys==10)  {nian();}
                       if(keys==12)  {shi_fen();}
                       if(keys==13)  {miao();}
                       if(keys==15)  {xingqi();}  
                                    			
                    }                               
               }  
}


void shi_fen()//显示和设置时和分
{
     if(keys==12)     //时/分       其它同上
                {
                    while(1)
                    {
                        W1302( 0x8e, 0x00);
                        da=R1302(0x85);
                        a[0]=(da&0xf0)>>4;
                        a[1]=(da&0x0f);
						W1302( 0x8e, 0x00);
                        da=R1302(0x83);
                        a[2]=(da&0xf0)>>4;
                        a[3]=(da&0x0f);          //将键值记录
                        
                        i=4;
                        xianshi(a,i);       								
                        keys=jpdata();
                        if(keys==11)  {yue_ri();}
                        if(keys==10)  {nan();}
                        if(keys==13)  {miao();}
                        if(keys==15)  {xingqi();}          			
                        if(keys==14)
                	    {
            			
                            for(i=0;i<4;)
                            {						
                                if(jpdata()<10)
                		        {
                                    keys=jpdata();
                                    a[i]=keys;
                        	        i++;
                                    while(1)
            			            {
                        	        	if(jpdata()==16)
                    			             break;
                        	         	xianshi(a,i);
            			            }	
                    		    } 
                                        					
                                 xianshi(a,i);
                	        }
			                W1302( 0x8e, 0x00);
                            W1302(0x84,(a[0]*16)|a[1]); 
			                W1302(0x82,(a[2]*16)|a[3]);    					
                       }	
                       
                  }                              //将键值的有效位数记录
             } 
}

void miao()//显示和设置秒
{
      if(keys==13)   //秒           //键值小于10,为年输入
                {
                    while(1)
                    {
                        W1302( 0x8e, 0x00);
                        da=R1302(0x81);
                        a[0]=10;//前两位不显示
                        a[1]=10;
                        a[2]=(da&0xf0)>>4;
                        a[3]=(da&0x0f);          //将键值记录
                        i=4;
                        xianshi(a,i);       								
                        keys=jpdata();
                        if(keys==11)  {yue_ri();}
                        if(keys==12)  {shi_fen();}
                        if(keys==10)  {nian();}
                        if(keys==15)  {xingqi();}  
                                  			
                        if(keys==14)//设置
                    	{
            			
                            for(i=2;i<4;)
                            {						
                                if(jpdata()<10)
                		        {
                                    keys=jpdata();
                                    a[i]=keys;
                        	        i++;
                                    while(1)
            			            {
                        	        	if(jpdata()==16)
                    			             break;
                        		        xianshi(a,i);
            			            }	
                    		    } 
                                        					
                                xianshi(a,i);
                	        }
			                W1302( 0x8e, 0x00);
                            W1302(0x80,(a[2]*16)|a[3]);     					
                        }	
                        
                   }                              //将键值的有效位数记录
              } 
}


void xingqi()//显示和设置星期
{
      if(keys==15)   
               {
                    while(1)
                    {
                        W1302( 0x8e, 0x00);
                        da=R1302(0x8b);
		            	a[0]=10;//前三位不显示
		            	a[1]=10;
                        a[2]=10;
                        //a[2]=(da&0xf0)>>4;
                        a[3]=(da&0x0f);			  
                        i=4;
                        xianshi(a,i);       								
                        keys=jpdata();
                        if(keys==11)  {yue_ri();}
                        if(keys==12)  {shi_fen();}
                        if(keys==13)  {miao();}
                        if(keys==10)  {nian();}            
                        if(keys==14)		//设置
                	    {
            		        for(i=3;i<4;)
                            {			
                                if(jpdata()<10)
                		        {
                                    keys=jpdata();
                                    a[i]=keys;
				                    i++;
                        			
                                    while(1)
            			            {
                        	           if(jpdata()==16)
                    			             break;
                        	           xianshi(a,i);
            			            }	
                    		    } 
                                        					
                                xianshi(a,i);
                	        }
			                W1302( 0x8e, 0x00);
                            W1302(0x8a,a[3]);     					
                	    }	
                       			
                    }                              //将键值的有效位数记录
             } 
}



⌨️ 快捷键说明

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