📄 key_sws.h
字号:
//用IF语句所写,调节时、分、秒、年、月、日、星期用k3键,调节闹钟的时、分、秒用k4键,已经调试OK
//闹钟的定时到时间时,蜂鸣器会响,此时可以按k1~k4任意键清除闹钟
//完成日期:2008-12-28日 19:20
//设计人:佘望胜
void keyscan()
{
//---------------------------------------------按任意按键关闭闹钟函数-------------------------------------------//
if(flag0==1)
{
if(k1==0)
{
delay_lcd1602(20);
if(k1==0)
{
flag0=0;
while(!k1);
flag0=0;
}
}
if(k2==0)
{
delay_lcd1602(20);
if(k2==0)
{
flag0=0;
while(!k2);
flag0=0;
}
}
if(k3==0)
{
delay_lcd1602(20);
if(k3==0)
{
flag0=0;
while(!k3);
flag0=0;
}
}
if(k4==0)
{
delay_lcd1602(20);
if(k4==0)
{
flag0=0;
while(!k4);
flag0=0;
}
}
}
//-----------------------------------------------年 月 日 星期 时 分 秒 循环切换开始---------------------------------//
if(k3==0) //------------------------------------------------k3键开始-------------------------------------------------------//
{
delay_lcd1602(20);
if(k3==0)
{
num1++;
write_command_1602(0x0f); //光标闪烁,指示所调节的位置
flag0=0; //清除标志位
flag1=1; //设置标志位
while(!k3)
{
if(num1==1)
write_command_1602(0x80+0x40+6); //第二行显示秒的位置
if(num1==2)
write_command_1602(0x80+0x40+3); //第二行显示分的位置
if(num1==3)
write_command_1602(0x80+0x40+0); //第二行显示时的位置
if(num1==4)
write_command_1602(0x80+14); //第一行显示星期的位置
if(num1==5)
write_command_1602(0x80+8); //第一行显示日的位置
if(num1==6)
write_command_1602(0x80+5); //第一行显示月的位置
if(num1==7)
write_command_1602(0x80+2); //第一行显示年的位置
if(num1==8) //如果num1=8
{
num1=0; //num1就清为0
flag1=0; //清除标志位
write_command_1602(0x0c); //显示光标关
ds887_write_date(9,year); //设置的 年 写入887
ds887_write_date(8,month); //设置的 月 写入887
ds887_write_date(7,date); //设置的 日 写入887
ds887_write_date(6,week); //设置的 星期 写入887
ds887_write_date(4,hour); //设置的 时 写入887
ds887_write_date(2,minute); //设置的 分 写入887
ds887_write_date(0,second); //设置的 秒 写入887
}
}
}
}//------------------------------------------------k3键结束-------------------------------------------------------//
else //-----------------------------------------------闹钟 时 分 秒 循环切换开始-----------------------------------------------//
{
if(k4==0) //------------------------------------------------k4键开始-------------------------------------------------------//
{
delay_lcd1602(20);
if(k4==0)
{
num2++;
write_command_1602(0x0f); //光标闪烁,指示所调节的位置
flag0=0; //清除标志位
flag2=1; //设置标志位
while(!k4)
{
if(num2==1) //闹钟秒
write_command_1602(0x80+0x40+14); //第二行显示闹钟秒的位置
if(num2==2) //闹钟分
write_command_1602(0x80+0x40+11); //第二行显示闹钟分的位置
if(num2==3) //闹钟时
write_command_1602(0x80+0x40+8); //第二行显示闹钟时的位置
if(num2==4)
{
num2=0;
flag2=0; //清除标志位
write_command_1602(0x0c); //显示光标关
ds887_write_date(5,ahour); //设置的 闹钟 时 写入887
ds887_write_date(3,aminute); //设置的 闹钟 分 写入887
ds887_write_date(1,asecond); //设置的 闹钟 秒 写入887
}
}
}
}//------------------------------------------------k4键结束-------------------------------------------------------//
}//-----------------------------------------------闹钟 时 分 秒 循环切换结束---------------------------------//
//------------------------------------------------年 月 日 星期 时 分 秒调整函数开始-----------------------------------------//
if(num1!=0)
{
//-------------------------------------------------------------num1 加函数开始-------------------------------------------------//
if(k2==0)
{
delay_lcd1602(20);
if(k2==0) //按键加
{
while(!k2);
if(num1==1) //秒加
{
second++;
if(second==60)
second=0;
write_1602add_two(6,second); //设置后的数据要刷新1602屏,地址是屏的第二行位置6,数据是秒
write_command_1602(0x80+0x40+6); //设置要调节的地址,这一步必须放在此处
}
if(num1==2) //分加
{
minute++;
if(minute==60)
minute=0;
write_1602add_two(3,minute); //设置后的数据要刷新1602屏,地址是屏的第二行位置3,数据是分
write_command_1602(0x80+0x40+3); //设置要调节的地址,这一步必须放在此处
}
if(num1==3) //时加
{
hour++;
if(hour==24)
hour=0;
write_1602add_two(0,hour); //设置后的数据要刷新1602屏,地址是屏的第二行位置0,数据是时
write_command_1602(0x80+0x40+0); //设置要调节的地址,这一步必须放在此处
}
if(num1==4) //星期加
{
week++;
if(week==8)
week=1;
write_1602add_one(14,week); //设置后的数据要刷新1602屏,地址是屏的第一行位置14,数据是星期
write_command_1602(0x80+14); //设置要调节的地址,这一步必须放在此处
}
if(num1==5) //日加
{
date++;
if(date==32)
date=1;
write_1602add_one(8,date); //设置后的数据要刷新1602屏,地址是屏的第一行位置8,数据是日
write_command_1602(0x80+8); //设置要调节的地址,这一步必须放在此处
}
if(num1==6) //月加
{
month++;
if(month==13)
month=1;
write_1602add_one(5,month); //设置后的数据要刷新1602屏,地址是屏的第一行位置5,数据是月
write_command_1602(0x80+5); //设置要调节的地址,这一步必须放在此处
}
if(num1==7) //年加
{
year++;
if(year==100)
year=0;
write_1602add_one(2,year); //设置后的数据要刷新1602屏,地址是屏的第一行位置2,数据是年
write_command_1602(0x80+2); //设置要调节的地址,这一步必须放在此处
}
}
}//-------------------------------------------------------------num1 加函数结束-------------------------------------------------//
if(k1==0) //-------------------------------------------------------------num1 减函数开始-------------------------------------------------//
{
delay_lcd1602(20);
if(k1==0) //秒减
{
while(!k1);
if(num1==1) //秒减
{
second--;
if(second==-1)
second=59;
write_1602add_two(6,second); //设置后的数据要刷新1602屏
write_command_1602(0x80+0x40+6); //设置要调节的地址,这一步必须放在此处
}
if(num1==2) //分减
{
minute--;
if(minute==-1)
minute=59;
write_1602add_two(3,minute); //设置后的数据要刷新1602屏,地址是屏的第二行位置3,数据是分
write_command_1602(0x80+0x40+3); //设置要调节的地址,这一步必须放在此处
}
if(num1==3) //时减
{
hour--;
if(hour==-1)
hour=23;
write_1602add_two(0,hour); //设置后的数据要刷新1602屏,地址是屏的第二行位置0,数据是时
write_command_1602(0x80+0x40+0); //设置要调节的地址,这一步必须放在此处
}
if(num1==4) //星期减
{
week--;
if(week==0)
week=7;
write_1602add_one(14,week); //设置后的数据要刷新1602屏,地址是屏的第一行位置14,数据是星期
write_command_1602(0x80+14); //设置要调节的地址,这一步必须放在此处
}
if(num1==5) //日减
{
date--;
if(date==0)
date=31;
write_1602add_one(8,date); //设置后的数据要刷新1602屏,地址是屏的第一行位置8,数据是日
write_command_1602(0x80+8); //设置要调节的地址,这一步必须放在此处
}
if(num1==6) //月减
{
month--;
if(month==0)
month=12;
write_1602add_one(5,month); //设置后的数据要刷新1602屏,地址是屏的第一行位置5,数据是月
write_command_1602(0x80+5); //设置要调节的地址,这一步必须放在此处
}
if(num1==7) //年减
{
year--;
if(year==-1)
year=99;
write_1602add_one(2,year); //设置后的数据要刷新1602屏,地址是屏的第一行位置2,数据是年
write_command_1602(0x80+2); //设置要调节的地址,这一步必须放在此处
}
}
}//---------------------------------------------------------num1 减函数结束------------------------------------------------//
}//------------------------------------------------年 月 日 星期 时 分 秒调整函数结束-----------------------------------------//
//-----------------------------num2 闹钟 时 分 秒加 开始---------------------------------------------//
else if(num2!=0) //-----------------------------------num2 开始-------------------------------------------------//
{
if(k2==0) //-------------------------------------k2 加开始-----------------------------------------------//
{
delay_lcd1602(20);
if(k2==0)
{
while(!k2);
if(num2==1) //秒加
{
asecond++;
if(asecond==60)
asecond=0;
write_1602add_two(14,asecond); //设置后的数据要刷新1602屏,地址是屏的第二行位置14,数据是闹钟秒
write_command_1602(0x80+0x40+14); //设置要调节的地址,这一步必须放在此处
}
if(num2==2) //分加
{
aminute++;
if(aminute==60)
aminute=0;
write_1602add_two(11,aminute); //设置后的数据要刷新1602屏,地址是屏的第二行位置11,数据是闹钟分
write_command_1602(0x80+0x40+11); //设置要调节的地址,这一步必须放在此处
}
if(num2==3) //时加
{
ahour++;
if(ahour==24)
ahour=0;
write_1602add_two(8,ahour); //设置后的数据要刷新1602屏,地址是屏的第二行位置8,数据是时
write_command_1602(0x80+0x40+8); //设置要调节的地址,这一步必须放在此处
}
}
} //-----------------------------------k2 加结束-------------------------------------------------//
if(k1==0) //-------------------------------------k1 减开始-----------------------------------------------//
{
delay_lcd1602(20);
if(k1==0)
{
while(!k1);
if(num2==1) //秒加
{
asecond--;
if(asecond==-1)
asecond=59;
write_1602add_two(14,asecond); //设置后的数据要刷新1602屏,地址是屏的第二行位置14,数据是闹钟秒
write_command_1602(0x80+0x40+14); //设置要调节的地址,这一步必须放在此处
}
if(num2==2) //分加
{
aminute--;
if(aminute==-1)
aminute=59;
write_1602add_two(11,aminute); //设置后的数据要刷新1602屏,地址是屏的第二行位置11,数据是闹钟分
write_command_1602(0x80+0x40+11); //设置要调节的地址,这一步必须放在此处
}
if(num2==3) //时加
{
ahour--;
if(ahour==-1)
ahour=23;
write_1602add_two(8,ahour); //设置后的数据要刷新1602屏,地址是屏的第二行位置8,数据是时
write_command_1602(0x80+0x40+8); //设置要调节的地址,这一步必须放在此处
}
}
} //---------------------------------------k1 减结束----------------------------------------------------//
} //---------------------------------------num2 结束------------------------------------------------------------//
} //===============================================按键扫描结束======================================================//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -