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

📄 12864指针式时钟.txt

📁 LCM128*64指针式万年 硬件:LCM128*64 M16 DS1302 软件:WinAVR 2.0.6.1 时钟:内部4M
💻 TXT
📖 第 1 页 / 共 5 页
字号:
			 break;
			 
	case 3:if(temp[2]<49)                   //分十位调整
	          {
			   temp[2]+=10;
			  }
			 else
			  {
			   temp[2]=(temp[1]%10);
			  }
			 break;
			 
	case 4:if((temp[2]%10)==9)             // 分个位调整
	          {
			   temp[2]=(temp[2]/10)*10;
			  }
			 else
			  {
			   temp[2]+=1;
			  }
			 break;
 
	case 5:if(temp[3]<49)                   //秒十位调整
	          {
			   temp[3]+=10;
			  }
			 else
			  {
			   temp[3]=(temp[3]%10);
			  }
			 break;
			 
	case 6:if((temp[3]%10)==9)             // 秒个位调整
	          {
			   temp[3]=(temp[3]/10)*10;
			  }
			 else
			  {
			   temp[3]+=1;
			  }
			 break;
			 
    case 7:if(temp[4]<20)                  //时十位调整  定时  关-----------------------------
	           {
			     temp[4]+=10;
			   }
			 else
			   {
			     temp[4]-=20;
			   }
			 break;
			 
	case 8:if((temp[4]%10)==9)             //时个位调整
	          {
			   temp[4]=(temp[4]/10)*10;
			  }
			 else
			  {
			   temp[4]+=1;
			  }
			 break;
			 
	case 9:if(temp[5]<49)                   //分十位调整
	          {
			   temp[5]+=10;
			  }
			 else
			  {
			   temp[5]=(temp[5]%10);
			  }
			 break;
			 
	case 10:if((temp[5]%10)==9)             // 分个位调整
	          {
			   temp[5]=(temp[5]/10)*10;
			  }
			 else
			  {
			   temp[5]+=1;
			  }
			 break;
 
	case 11:if(temp[6]<49)                   //秒十位调整
	          {
			   temp[6]+=10;
			  }
			 else
			  {
			   temp[6]=(temp[6]%10);
			  }
			 break;
			 
	case 12:if((temp[6]%10)==9)             // 秒个位调整
	          {
			   temp[6]=(temp[6]/10)*10;
			  }
			 else
			  {
			   temp[6]+=1;
			  }
			 break;
   }
  address--;
  W1302(0x8e,0x00);           //控制命令,WP=0,允许写操作
    for(i =0; i<7; i++)
    { 
      W1302(address,temp[i]);    // 状态 时分秒.时分秒
      address +=2;
    }
    W1302(0x8e,0x80);           // 控制命令,WP=1,写保护			 
 }

/**************************************************************************** 
函 数 名: four_down(void)
功    能:按键下键处理
说    明:处于四级菜单下.调整定时时间和状态
入口参数:无
返 回 值:无
*****************************************************************************/ 
void four_down()
 {
  unsigned char i,temp[7],address;
  address=(two_show-50)*14+0xc1;
  for(i=0;i<7;i++)
   {
    temp[i]=R1302(address+(i*2));
   }
  switch(three_show)
   {
    case 0:if(temp[0]==0)         //状态调整"开/关"
	         {
			  temp[0]=1;
			 }
			else
			 {
			  temp[0]=0;
			 }
			break;
			
	case 1:if(temp[1]>9)         //时----开
	         {
			  temp[1]-=10;
			 }
			else
			 {
			  temp[1]+=20;
			 }
			break;
			
	case 2:if(temp[1]%10==0)
             {
			  temp[1]=((temp[1]/10)*10+9);
			 }
			else
			 {
			  temp[1]-=1;
			 }
			break;
			
	case 3:if(temp[2]>9)       //分---开
	         {
			  temp[2]-=10;
			 }
			else
			 {
			  temp[2]+=50;
			 }
			break;
			
	case 4:if(temp[2]%10==0)
	         {
			  temp[2]=((temp[2]/10)*10+9);
			 }
			else
			 {
			  temp[2]-=1;
			 }
			break;
			
	case 5:if(temp[3]>9)      //秒---开
	         {
			  temp[3]-=10;
			 }
			else
			 {
			  temp[3]+=50;
			 }
			break;
			
	case 6:if(temp[3]%10==0)
	         {
			  temp[3]=((temp[3]/10)*10+9);
			 }
			else
			 {
			  temp[3]-=1;
			 }
			break;
			
	case 7:if(temp[4]>9)         //时----关
	         {
			  temp[4]-=10;
			 }
			else
			 {
			  temp[4]+=20;
			 }
			break;
			
	case 8:if(temp[4]%10==0)
             {
			  temp[4]=((temp[4]/10)*10+9);
			 }
			else
			 {
			  temp[4]-=1;
			 }
			break;
			
	case 9:if(temp[5]>9)       //分---关
	         {
			  temp[5]-=10;
			 }
			else
			 {
			  temp[5]+=50;
			 }
			break;
			
	case 10:if(temp[5]%10==0)
	         {
			  temp[5]=((temp[5]/10)*10+9);
			 }
			else
			 {
			  temp[5]-=1;
			 }
			break;
			
	case 11:if(temp[6]>9)      //秒---关
	         {
			  temp[6]-=10;
			 }
			else
			 {
			  temp[6]+=50;
			 }
			break;
			
	case 12:if(temp[6]%10==0)
	         {
			  temp[6]=((temp[6]/10)*10+9);
			 }
			else
			 {
			  temp[6]-=1;
			 }
			break;

   }
  address--;
  W1302(0x8e,0x00);           //控制命令,WP=0,允许写操作
    for(i =0; i<7; i++)
    { 
      W1302(address,temp[i]);    // 状态 时分秒.时分秒
      address +=2;
    }
    W1302(0x8e,0x80);           // 控制命令,WP=1,写保护
 }

/**************************************************************************** 
函 数 名: key_up(void)
功    能:按键向上键处理
说    明:根据当前菜单状态跳转到相应处理函数处理
入口参数:无
返 回 值:无
*****************************************************************************/ 
void key_up()
 {
  switch(disp_set)
   {
    case 3:two_up();
	        break;
			
	case 10:three_up();
	         break;
			 
	case 20:four_up();
	         break;
   }
 }

/**************************************************************************** 
函 数 名: key_down(void)
功    能:按键向下键处理
说    明:根据当前菜单状态跳转到相应处理函数处理
入口参数:无
返 回 值:无
*****************************************************************************/ 
void key_down()
 {
  switch(disp_set)
   {
    case 3: two_down();
	         break;
			
	case 10:three_down();
	         break;
			 
	case 20:four_down();
	         break;
   }
 }



void disp_update()
 {
  ;
 }

/**************************************************************************** 
函 数 名: key_transact(void)
功    能:按键处理
说    明:根据键值进入相应按键处理
入口参数:无
返 回 值:无
*****************************************************************************/ 
void key_transact(unsigned char temp)
 {
  switch(temp)
   {
    case 1: key_left();
			 break;
    case 2: key_up();
			 break;
			  
	case 3: key_ok();
			 break;
			 
    case 4: key_down();
			 break; 
			  
	case 5:key_right();
             break;		  
	 }
	 
 }


/**************************************************************************** 
函 数 名: key(void)
功    能:按键检测
说    明:检测是否有按键按下,有则进入按键处理
入口参数:无
返 回 值:无
*****************************************************************************/ 
void key(void)
 {
  unsigned char ankey;
  if(((PIND&0X10)==0)||((PIND&0X08)==0)||((PIND&0X04)==0)||((PINB&0X01)==0)||((PINB&0X40)==0))
   {
    Delay(2);
  if(((PIND&0X10)==0)||((PIND&0X08)==0)||((PIND&0X04)==0)||((PINB&0X01)==0)||((PINB&0X40)==0))
	 {
	  if((PIND&0X08)==0)
		 {
          ankey=3;
		 }
	  if((PIND&0X10)==0)
	    {
          ankey=4;
		}
		 
	  if((PIND&0X04)==0)
	    {
          ankey=2;
		}
	  if((PINB&0X01)==0)
	    {
		  ankey=1;
		}
	  if((PINB&0X40)==0)
	    {
		  ankey=5;
		}
	   key_transact(ankey);
	  }
	 do 
	  {
        disp_update();
	  }
	 while(((PIND&0X04)==0)||((PIND&0X08)==0)||((PIND&0X10)==0)||((PINB&0X01)==0)||((PINB&0X40)==0));
	 
    }
 }




/**************************************************************************** 
函 数 名: Port_init(void)
功    能:端口初始化
说    明:方向及上拉电阻设置
入口参数:无
返 回 值:无
*****************************************************************************/ 
void Port_init(void)
 {
  DDRC=0xff;
  DDRA=0xff;
  DDRB&=~(1<<6);     //SW5 按键4,取消/返回  右键
  PORTB|=(1<<6);     //SW5 使能上拉电阻
  DDRD&=~(1<<4);     //SW4 按键4,快捷改变颜色
  PORTD|=(1<<4);     //SW4 使能上拉电阻
  DDRD&=~(1<<3);     //SW3 按键3,快捷改变模式
  PORTD|=(1<<3);     //SW3 使能上拉电阻
  DDRD&=~(1<<2);     //SW2 按键2,快捷改变型号
  PORTD|=(1<<2);     //SW2 使能上拉电阻
  DDRB&=~(1<<0);     //SW1 按键2,快捷改变型号
  PORTB|=(1<<0);     //SW1 使能上拉电阻
  
  DDRD|=(1<<7);      //i/O 
  DDRD|=(1<<6);      //sck
  DDRB|=(1<<4);      //rst

 }
 


/**************************************************************************** 

功    能:农历信息存储数组

说    明: 时间2000----2099

*****************************************************************************/ 
const unsigned char year_code[] PROGMEM={
                    
                    0x0C,0x96,0x45,    //2000
                    0x4d,0x4A,0xB8,    //2001
                    0x0d,0x4A,0x4C,    //2002
                    0x0d,0xA5,0x41,    //2003
                    0x25,0xAA,0xB6,    //2004
                    0x05,0x6A,0x49,    //2005
                    0x7A,0xAd,0xBd,    //2006
                    0x02,0x5d,0x52,    //2007
                    0x09,0x2d,0x47,    //2008
                    0x5C,0x95,0xBA,    //2009
                    0x0A,0x95,0x4e,    //2010
                    0x0B,0x4A,0x43,    //2011
                    0x4B,0x55,0x37,    //2012
                    0x0A,0xd5,0x4A,    //2013
                    0x95,0x5A,0xBf,    //2014
                    0x04,0xBA,0x53,    //2015
                    0x0A,0x5B,0x48,    //2016
                    0x65,0x2B,0xBC,    //2017
                    0x05,0x2B,0x50,   

⌨️ 快捷键说明

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