k1是功能选择键,选择功能是根据按键次数定义的。
怎样让k1一直保持低电平状态并且可以选择功能。
void keyscan()//菜单键按下扫描函数定义
{
k1=1;
k2=1;
k3=1;
k4=1;
//判断菜单键k1是否按下
if(k1==0)
{
delay(5);
if(k1==0)
{
while(!k1);//松手检测
k1_num++;//记录菜单键k1是第几次按下,而判断是调节秒、分还是时。
if(k1_num==1 )//指示调节秒
{
EX0=0;//关闭外部中断0,使时间走动停止,准备调时间
ds1307_write_date(0xd0,0,0x80|b_second);
lcd_write_com(0x80+0x40+12);//数据指针和光标移动秒出
lcd_write_com(0x0f);//使光标显示,并光标处字符格符闪烁,用来提示用户此时可以调节是秒,是分还是时。
}
if(k1_num==2)//指示调节分
{
lcd_write_com(0x80+0x40+9);//数据指针和光标移动分出
}
if(k1_num==3)//指示调节时
{
lcd_write_com(0x80+0x40+6);//数据指针和光标移动时出
}
if(k1_num==4)//退出时间调节菜单
{
k1_num=0;//菜单键k0按下清零
lcd_write_com(0x0c);//恢复到时钟走动状态,即光标不显示,不闪烁
//将所调的时间转换成bcd码
b_second=dectobcd(second);
b_minute=dectobcd(minute);
b_hour=dectobcd(hour);
//将所调的时间向时钟写入
ds1307_write_date(0xd0,2,b_hour);
ds1307_write_date(0xd0,1,b_minute);
ds1307_write_date(0xd0,0,b_second);
EX0=1;//开外部中断0,时间开始继续走动
}
}
}
//判断是否按下过时间调节菜单键k1,而处于需要调节时间状态
if(k1==0)
{
//判断是否是上调键k2按下
if(k2==0)
{
delay(5);
if(k2==0)
{
while(!k2);//松手检测
if(k2_num==1)//上调秒
{
second++;
if(second==60)
second=0;
lcd_write_second(second);//向lcd写入被修改的时间
lcd_write_com(0x80+0x40+12);//光标位置重定位到所要调的时间处
}
if(k2_num==2)//上调分
{
minute++;
if(minute==60)
minute=0;
lcd_write_minute(minute);
lcd_write_com(0x80+0x40+9);
}
if(k2_num==3)//上调时
{
hour++;
if(hour==24)
hour=0;
lcd_write_hour(hour);
lcd_write_com(0x80+0x40+6);
}
}
}
//判断是否是下调键k3按下
if(k1==0)
{
delay(5);
if(k3==0)
{
while(!k3);
if(k3_num==1)//下调节秒
{
second--;
if(second==255)
second=59;
lcd_write_second(second);
lcd_write_com(0x80+0x40+12);
}
if(k3_num==2)//下调节分
{
minute--;
if(minute==255)
minute=59;
lcd_write_minute(minute);
lcd_write_com(0x80+0x40+9);
}
if(k3_num==3)//下调节时
{
hour--;
if(hour==255)
hour=23;
lcd_write_hour(hour);
lcd_write_com(0x80+0x40+6);
}
}
}
if(k1==0)
{
delay(5);
//判断是否是确定键k1按下
if(k4==0)
{
while(!k4);//松手检测
if(k4_num==1)//退出时间调节菜单
{
lcd_write_com(0x0c);//恢复到时钟走动状态,即光标不显示,不闪烁
//将所调的时间转换成bcd码
b_second=dectobcd(second);
b_minute=dectobcd(minute);
b_hour=dectobcd(hour);
//将所调的时间向时钟写入
ds1307_write_date(0xd0,2,b_hour);
ds1307_write_date(0xd0,1,b_minute);
ds1307_write_date(0xd0,0,b_second);
EX0=1;//开外部中断0,时间开始继续走动
}
}
}
}
}
|