找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1326|回复: 0
打印 上一主题 下一主题
收起左侧

单片机一键多功能独立键盘遇到问题求帮助!

[复制链接]
跳转到指定楼层
楼主
ID:299904 发表于 2018-4-2 11:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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,时间开始继续走动
   }
  
   }  
  }
}
}     
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表