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

📄 rtc._c

📁 在AVR开发板驱动时钟芯片DS1302
💻 _C
📖 第 1 页 / 共 2 页
字号:
		 DS1302_writeD(setadd|WR,setdat);		//写入设置值
		 DS1302_writeD(C_WP|WR,PROTECT);		//写保护
		 LCD1602_gotoXY(dis_x,dis_y);			//将当前设置位在1602液晶上对应的位置显示更新
		 LCD1602_sendstr("0");					//向1602写入0字符并显示
		 LCD1602_gotoXY(dis_x,dis_y);			//将光标保持在当前设置位上
		}
		break;		 
	case 0x1:	//过程和0键相同,只是将当前设置位设置成1并更新显示
	    if(RD_TFLAG==0)
		{
		 setdat=DS1302_readD(setadd|RD);
		 setdat=setdat>>shift|setdat<<shift;
		 setdat&=0xF0;
		 setdat|=1;
		 setdat=setdat>>shift|setdat<<shift;
		 DS1302_writeD(C_WP|WR,UPROTECT);
		 DS1302_writeD(setadd|WR,setdat);
		 DS1302_writeD(C_WP|WR,PROTECT);
		 LCD1602_gotoXY(dis_x,dis_y);
		 LCD1602_sendstr("1");
		 LCD1602_gotoXY(dis_x,dis_y);
		}		 
		break;
	case 0x2: 	 //过程和0键相同,只是将当前设置位设置成2并更新显示
		if(RD_TFLAG==0)
		{
		 setdat=DS1302_readD(setadd|RD);
		 setdat=setdat>>shift|setdat<<shift;
		 setdat&=0xF0;
		 setdat|=2;
		 setdat=setdat>>shift|setdat<<shift;
		 DS1302_writeD(C_WP|WR,UPROTECT);
		 DS1302_writeD(setadd|WR,setdat);
		 DS1302_writeD(C_WP|WR,PROTECT);
		 LCD1602_gotoXY(dis_x,dis_y);
		 LCD1602_sendstr("2");
		 LCD1602_gotoXY(dis_x,dis_y);
		}		 
		break;
	case 0x3:   //过程和0键相同,只是将当前设置位设置成3并更新显示
		if(RD_TFLAG==0)
		{
		 setdat=DS1302_readD(setadd|RD);
		 setdat=setdat>>shift|setdat<<shift;
		 setdat&=0xF0;
		 setdat|=3;
		 setdat=setdat>>shift|setdat<<shift;
		 DS1302_writeD(C_WP|WR,UPROTECT);
		 DS1302_writeD(setadd|WR,setdat);
		 DS1302_writeD(C_WP|WR,PROTECT);
		 LCD1602_gotoXY(dis_x,dis_y);
		 LCD1602_sendstr("3");
		 LCD1602_gotoXY(dis_x,dis_y);
		}		 
		break;
	case 0x4:   //过程和0键相同,只是将当前设置位设置成4并更新显示
		if(RD_TFLAG==0)
		{
		 setdat=DS1302_readD(setadd|RD);
		 setdat=setdat>>shift|setdat<<shift;
		 setdat&=0xF0;
		 setdat|=4;
		 setdat=setdat>>shift|setdat<<shift;
		 DS1302_writeD(C_WP|WR,UPROTECT);
		 DS1302_writeD(setadd|WR,setdat);
		 DS1302_writeD(C_WP|WR,PROTECT);
		 LCD1602_gotoXY(dis_x,dis_y);
		 LCD1602_sendstr("4");
		 LCD1602_gotoXY(dis_x,dis_y);
		}		 
		break;
	case 0x5:    //过程和0键相同,只是将当前设置位设置成5并更新显示
		if(RD_TFLAG==0)
		{
		 setdat=DS1302_readD(setadd|RD);
		 setdat=setdat>>shift|setdat<<shift;
		 setdat&=0xF0;
		 setdat|=5;
		 setdat=setdat>>shift|setdat<<shift;
		 DS1302_writeD(C_WP|WR,UPROTECT);
		 DS1302_writeD(setadd|WR,setdat);
		 DS1302_writeD(C_WP|WR,PROTECT);
		 LCD1602_gotoXY(dis_x,dis_y);
		 LCD1602_sendstr("5");
		 LCD1602_gotoXY(dis_x,dis_y);
		}		 
		break;
	case 0x6:    //过程和0键相同,只是将当前设置位设置成6并更新显示
		if(RD_TFLAG==0)
		{
		 setdat=DS1302_readD(setadd|RD);
		 setdat=setdat>>shift|setdat<<shift;
		 setdat&=0xF0;
		 setdat|=6;
		 setdat=setdat>>shift|setdat<<shift;
		 DS1302_writeD(C_WP|WR,UPROTECT);
		 DS1302_writeD(setadd|WR,setdat);
		 DS1302_writeD(C_WP|WR,PROTECT);
		 LCD1602_gotoXY(dis_x,dis_y);
		 LCD1602_sendstr("6");
		 LCD1602_gotoXY(dis_x,dis_y);
		}		 
		break;
	case 0x7:    //过程和0键相同,只是将当前设置位设置成7并更新显示
		if(RD_TFLAG==0)
		{
		 setdat=DS1302_readD(setadd|RD);
		 setdat=setdat>>shift|setdat<<shift;
		 setdat&=0xF0;
		 setdat|=7;
		 setdat=setdat>>shift|setdat<<shift;
		 DS1302_writeD(C_WP|WR,UPROTECT);
		 DS1302_writeD(setadd|WR,setdat);
		 DS1302_writeD(C_WP|WR,PROTECT);
		 LCD1602_gotoXY(dis_x,dis_y);
		 LCD1602_sendstr("7");
		 LCD1602_gotoXY(dis_x,dis_y);
		}		 
		break;
	case 0x8:    //过程和0键相同,只是将当前设置位设置成8并更新显示
		if(RD_TFLAG==0)
		{
		 setdat=DS1302_readD(setadd|RD);
		 setdat=setdat>>shift|setdat<<shift;
		 setdat&=0xF0;
		 setdat|=8;
		 setdat=setdat>>shift|setdat<<shift;
		 DS1302_writeD(C_WP|WR,UPROTECT);
		 DS1302_writeD(setadd|WR,setdat);
		 DS1302_writeD(C_WP|WR,PROTECT);
		 LCD1602_gotoXY(dis_x,dis_y);
		 LCD1602_sendstr("8");
		 LCD1602_gotoXY(dis_x,dis_y);
		}		 
		break;
	case 0x9:    //过程和0键相同,只是将当前设置位设置成9并更新显示
		if(RD_TFLAG==0)
		{
		 setdat=DS1302_readD(setadd|RD);
		 setdat=setdat>>shift|setdat<<shift;
		 setdat&=0xF0;
		 setdat|=9;
		 setdat=setdat>>shift|setdat<<shift;
		 DS1302_writeD(C_WP|WR,UPROTECT);
		 DS1302_writeD(setadd|WR,setdat);
		 DS1302_writeD(C_WP|WR,PROTECT);
		 LCD1602_gotoXY(dis_x,dis_y);
		 LCD1602_sendstr("9");
		 LCD1602_gotoXY(dis_x,dis_y);
		}		 
		break;
	case 0xC: 	 					 //模式选择按键,更换设置模式和显示模式(每按一下,交替设置和显示模式)
		 RD_TFLAG^=0x01;			 //改变模式标志,RD_TFLAG为0是设置模式,RD_TFLAG为1是显示模式
		 if(RD_TFLAG==0)			 //如果进入设置模式,做以下工作
		 {		  
		  setdat=DS1302_readD(C_SEC|RD);			//读出秒寄存器的内容
		  DS1302_writeD(C_WP|WR,UPROTECT);			//解除写保护
		  DS1302_writeD(C_SEC|WR,CLK_HALT|setdat);	//进入设置模式就停止振荡器,但不改变秒寄存器的内容	
		  DS1302_writeD(C_WP|WR,PROTECT);			//写保护
		  while(LCD1602_readBF());					//更新1602
 		  LCD1602_sendbyte(iCmd, LCDa_CURFLA);		//启动光标闪烁功能
		  LCD1602_gotoXY(2,11);	 					//光标定位在秒个位(进入设置模式默认设置秒个位)
		  setadd=C_SEC;								//将设置地址指向秒寄存器
		  shift=0;									//设置秒个位
		  dis_x=2;									//1602第2行
		  dis_y=11;									//1602第11列
		 }
		 else
		 {	 										//显示模式应做以下工作
		  setdat=DS1302_readD(C_SEC|RD);			//读出秒寄存器的内容 		  
		  DS1302_writeD(C_WP|WR,UPROTECT);			//解除写保护
		  DS1302_writeD(C_SEC|WR,0x7F&setdat);		//进入显示模式就启动振荡器,但不改变秒寄存器的内容	
		  DS1302_writeD(C_WP|WR,PROTECT);			//写保护
		  LCD1602_sendbyte(iCmd, LCDa_ON);			//将光标闪烁关闭
		  set_num=0;			 					//将当前设置位改为默认的秒寄存器
		 }
		 break;
	case 0xD:  							//当前设置位选择按键(按动此键,将循环改变设置位为:秒-分-时-星期-日-月-年,先个位后十位)			
		 if(RD_TFLAG==0)				//设置模式此键生效,显示模式此键不响应
		 {
		   set_num+=1;					//当前设置位加1
		   if(set_num==13)				//当前设置位为年十位的时候,再按此键将当前设置位改为秒个位
		   {
		   set_num=0;
		   }
		   switch(set_num)				//根据set_num来判断当前设置位,并做相应工作
		   {
		   	case 0:						//设置秒个位
		  	   LCD1602_gotoXY(2,11);	//更新1602的光标位置
			   setadd=C_SEC;			//设置地址指向秒寄存器
			   shift=0;					//设置个位标志
			   dis_x=2;					//1602第2行
			   dis_y=11;				//1602第11列
			   break;
		  	case 1:	 					//设置秒十位
		  	   LCD1602_gotoXY(2,10);	//更新1602的光标位置
			   setadd=C_SEC;			//设置地址指向秒寄存器
			   shift=4;					//设置十位标志
			   dis_x=2;					//1602第2行
			   dis_y=10;				//1602第10列
			   break;
		    case 2:
		  	   LCD1602_gotoXY(2,8);
			   setadd=C_MIN;	   		//设置地址指向分寄存器
			   shift=0;					//设置个位标志
			   dis_x=2;
			   dis_y=8;
			   break;
		    case 3:
		  	   LCD1602_gotoXY(2,7);
			   setadd=C_MIN;	   		//设置地址指向分寄存器
			   shift=4;					//设置十位标志
			   dis_x=2;
			   dis_y=7;
			   break;
		    case 4:
		  	   LCD1602_gotoXY(2,5);
			   setadd=C_HR;		   		//设置地址指向小时寄存器
			   shift=0;					//设置个位标志
			   dis_x=2;
			   dis_y=5;
			   break;
		    case 5:
		  	   LCD1602_gotoXY(2,4);
			   setadd=C_HR;		   		//设置地址指向小时寄存器
			   shift=4;					//设置十位标志
			   dis_x=2;
			   dis_y=4;
			   break;
		    case 6:
		  	   LCD1602_gotoXY(1,13);
			   setadd=C_WK;				//设置地址指向星期寄存器
			   shift=0;					//设置个位标志
			   dis_x=1;
			   dis_y=13;
			   break; 
			case 7:
		  	   LCD1602_gotoXY(1,11);
			   setadd=C_DAY;			//设置地址指向日寄存器
			   shift=0;					//设置个位标志
			   dis_x=1;
			   dis_y=11;
			   break; 
			case 8:
		  	   LCD1602_gotoXY(1,10);
			   setadd=C_DAY;			//设置地址指向日寄存器
			   shift=4;					//设置十位标志
			   dis_x=1;
			   dis_y=10;
			   break; 
			case 9:
		  	   LCD1602_gotoXY(1,8);
			   setadd=C_MTH;	   		//设置地址指向月寄存器
			   shift=0;					//设置个位标志
			   dis_x=1;
			   dis_y=8;
			   break; 
			case 10:
		  	   LCD1602_gotoXY(1,7);
			   setadd=C_MTH;	   		//设置地址指向月寄存器
			   shift=4;					//设置十位标志
			   dis_x=1;
			   dis_y=7;
			   break;   
			case 11:
		  	   LCD1602_gotoXY(1,5);
			   setadd=C_YR;		   		//设置地址指向年寄存器
			   shift=0;					//设置个位标志
			   dis_x=1;
			   dis_y=5;
			   break; 
			case 12:
		  	   LCD1602_gotoXY(1,4);
			   setadd=C_YR;		   		//设置地址指向年寄存器
			   shift=4;					//设置十位标志
			   dis_x=1;
			   dis_y=4;
			   break; 
		   }
		 break;
		 }
	default:		 
		 break;		
   }
  }
 }
}

⌨️ 快捷键说明

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