📄 rtc._c
字号:
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 + -