📄 key_swit.h
字号:
//闹钟调节与时间调节共用一个k3键,用switch语句,按键已是非常的稳定,已调试OK
//闹钟的定时到时间时,蜂鸣器会响,此时可以按k1~k4任意键清除闹钟
//完成日期:200
//设计人:佘望胜
void keyscan()
{
//---------------------------------------------按任意按键关闭闹钟函数-------------------------------------------//
if(flag0==1)
{
if(k1==0)
{
delay_ms(5); //延时5ms,按键去抖动
if(k1==0)
{
while(!k1); //等待k1键
Sound_ir();
flag0=0; //flag0标志清0
}
}
if(k2==0)
{
delay_ms(5); //延时5ms,按键去抖动
if(k2==0)
{
while(!k2); //等待k2键
Sound_ir();
flag0=0; //flag0标志清0
}
}
if(k3==0)
{
delay_ms(5); //延时5ms,按键去抖动
if(k3==0)
{
while(!k3); //等待k3键
Sound_ir();
flag0=0; //flag0标志清0
}
}
if(k4==0)
{
delay_ms(5); //延时5ms,按键去抖动
if(k4==0)
{
while(!k4); //等待k4键
Sound_ir();
flag0=0; //flag0标志清0
}
}
}
//-----------------------------------------------年 月 日 星期 时 分 秒 循环切换开始---------------------------------//
if(k3==0) //------------------------------------------------k3键开始-------------------------------------------------------//
{
delay_ms(5); //延时5ms,按键去抖动
if(k3==0)
{
num1++; //k3键循环的次数加加
write_command(0x0c); //先关闭光标闪烁,避免显示屏上不需要的地方也会瞬间显示光标
flag0=0; //flag0清除标志位
flag1=1; //flag1标志位置1
while(!k3);
switch(num1) //k3键每按一次,蜂鸣器就会响一声函数时调用了(Sound_ir();)
{
case 1: write_command(0x8f); //第三行显示秒的位置
write_command(0x0f); //显示光标开
break;
case 2: write_command(0x8d); //第三行显示分的位置
write_command(0x0f); //显示光标开
break;
case 3: write_command(0x8b); //第三行显示时的位置
write_command(0x0f); //显示光标开
break;
case 4: write_command(0x97); //第二行显示星期的位置
write_command(0x0f); //显示光标开
break;
case 5: write_command(0x92); //第二行显示日的位置
write_command(0x0f); //显示光标开
break;
case 6: write_command(0x90); //第二行显示月的位置
write_command(0x0f); //显示光标开
break;
case 7: write_command(0x81); //第一行显示年的位置
write_command(0x0f); //显示光标开
break;
case 8: write_command(0x9f); //第四行显示闹钟秒的位置
write_command(0x0f); //显示光标开
break;
case 9: write_command(0x9d); //第四行显示闹钟分的位置
write_command(0x0f); //显示光标开
break;
case 10: write_command(0x9b); //第四行显示闹钟时的位置
write_command(0x0f); //显示光标开
break;
case 11:
ds887_write_date(5,ahour); //设置的 闹钟 时 写入887
ds887_write_date(3,aminute); //设置的 闹钟 分 写入887
ds887_write_date(1,asecond); //设置的 闹钟 秒 写入887
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
write_command(0x0c); //显示光标关
flag1=0; //清除标志位
Sound_ir();
num1=0; break; //num1就清为0
default:break;
}
}
}//------------------------------------------k3键结束---------------------------------------------------//
//-----------------------------年 月 日 星期 时 分 秒 闹钟时 分 秒调整函数开始----------------------//
if(num1!=0)
{
//---------------------------------------------------------k2键 加函数开始--------------------------------------------//
if(k2==0)
{
delay_ms(5); //延时5ms,按键去抖动
if(k2==0) //按键加
{
while(!k2); //如果此处不加分号,调节按钮时,时间加的飞快
Sound_ir();
switch(num1) //调用的是k3键循环的次数
{
case 1: second++; //当k2键按下,second开始++
if(second==60) //如果second等于60,
second=0; //那么second就等于0 【下面的以此类推】
write_12864add_three(7,second); //设置后的数据要刷新12864屏,地址是屏的第三行位置6,数据是秒
write_command(0x8f); //设置要调节的地址,这一步必须放在此处
break;
case 2: minute++;
if(minute==60)
minute=0;
write_12864add_three(5,minute); //设置后的数据要刷新12864屏,地址是屏的第三行位置3,数据是分
write_command(0x8d); //设置要调节的地址,这一步必须放在此处
break;
case 3: hour++;
if(hour==24)
hour=0;
write_12864add_three(3,hour); //设置后的数据要刷新12864屏,地址是屏的第三行位置0,数据是时
write_command(0x8b); //设置要调节的地址,这一步必须放在此处
break;
case 4: week++;
if(week==8)
week=1;
write_12864add_two(7,week); //设置后的数据要刷新12864屏,地址是屏的第二行位置14,数据是星期
write_command(0x97); //设置要调节的地址,这一步必须放在此处
break;
case 5: date++;
if(date==32)
date=1;
write_12864add_two(2,date); //设置后的数据要刷新12864屏,地址是屏的第二行位置8,数据是日
write_command(0x92); //设置要调节的地址,这一步必须放在此处
break;
case 6: month++;
if(month==13)
month=1;
write_12864add_two(0,month); //设置后的数据要刷新12864屏,地址是屏的第二行位置5,数据是月
write_command(0x90); //设置要调节的地址,这一步必须放在此处
break;
case 7: year++;
if(year==100)
year=0;
write_12864add_one(1,year); //设置后的数据要刷新12864屏,地址是屏的第一行位置2,数据是年
write_command(0x81); //设置要调节的地址,这一步必须放在此处
break;
case 8: asecond++;
if(asecond==60)
asecond=0;
write_12864add_four(7,asecond); //设置后的数据要刷新12864屏,地址是屏的第二行位置14,数据是闹钟秒
write_command(0x9f); //设置要调节的地址,这一步必须放在此处
break;
case 9: aminute++;
if(aminute==60)
aminute=0;
write_12864add_four(5,aminute); //设置后的数据要刷新12864屏,地址是屏的第二行位置11,数据是闹钟分
write_command(0x9d); //设置要调节的地址,这一步必须放在此处
break;
case 10: ahour++;
if(ahour==24)
ahour=0;
write_12864add_four(3,ahour); //设置后的数据要刷新12864屏,地址是屏的第二行位置8,数据是时
write_command(0x9b); //设置要调节的地址,这一步必须放在此处
break;
case 11: num1=0; break;
default:break;
}
}
}
} //-------------------------------------------------k2键 加结束-----------------------------------------------//
//-------------------------------------------------k1键 减开始-----------------------------------------------//
if(num1!=0)
{
if(k1==0)
{
delay_ms(5); //延时5ms,按键去抖动
if(k1==0) //按键加
{
while(!k1); //如果此处不加分号,调节按钮时,时间减的飞快
Sound_ir();
switch(num1) //调用的是k3键循环的次数
{
case 1: second--; //当k2键按下,second开始--,同时蜂鸣器会响一声
if(second==-1) //如果second等于-1? second=59; //那么second就等于59 【下面的以此类推】
write_12864add_three(7,second); //设置后的数据要刷新12864屏,地址是屏的第三行位置6,数据是秒
write_command(0x8f); //设置要调节的地址,这一步必须放在此处
break;
case 2: minute--;
if(minute==-1)
minute=59;
write_12864add_three(5,minute); //设置后的数据要刷新12864屏,地址是屏的第三行位置3,数据是分
write_command(0x8d); //设置要调节的地址,这一步必须放在此处
break;
case 3: hour--;
if(hour==-1)
hour=23;
write_12864add_three(3,hour); //设置后的数据要刷新12864屏,地址是屏的第三行位置0,数据是时
write_command(0x8b); //设置要调节的地址,这一步必须放在此处
break;
case 4: week--;
if(week==0)
week=7;
write_12864add_two(7,week); //设置后的数据要刷新12864屏,地址是屏的第二行位置14,数据是星期
write_command(0x97); //设置要调节的地址,这一步必须放在此处
break;
case 5: date--;
if(date==0)
date=31;
write_12864add_two(2,date); //设置后的数据要刷新12864屏,地址是屏的第二行位置8,数据是日
write_command(0x92); //设置要调节的地址,这一步必须放在此处
break;
case 6: month--;
if(month==0)
month=12;
write_12864add_two(0,month); //设置后的数据要刷新12864屏,地址是屏的第二行位置5,数据是月
write_command(0x90); //设置要调节的地址,这一步必须放在此处
break;
case 7: year--;
if(year==-1)
year=99;
write_12864add_one(1,year); //设置后的数据要刷新12864屏,地址是屏的第一行位置2,数据是年
write_command(0x81); //设置要调节的地址,这一步必须放在此处
break;
case 8: asecond--;
if(asecond==-1)
asecond=59;
write_12864add_four(7,asecond); //设置后的数据要刷新12864屏,地址是屏的第二行位置14,数据是闹钟秒
write_command(0x9f); //设置要调节的地址,这一步必须放在此处
break;
case 9: aminute--;
if(aminute==-1)
aminute=59;
write_12864add_four(5,aminute); //设置后的数据要刷新12864屏,地址是屏的第二行位置11,数据是闹钟分
write_command(0x9d); //设置要调节的地址,这一步必须放在此处
break;
case 10: ahour--;
if(ahour==-1)
ahour=23;
write_12864add_four(3,ahour); //设置后的数据要刷新12864屏,地址是屏的第二行位置8,数据是时
write_command(0x9b); //设置要调节的地址,这一步必须放在此处
break;
case 11: num1=0; break;
default:break;
}
}
}
}//-----------------------------年 月 日 星期 时 分 秒 闹钟时 分 秒调整函数结束---------------------//
} //--------------------------------------------按键扫描结束----------------------------------------------//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -