找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2172|回复: 4
收起左侧

求助 时钟按键问题

[复制链接]
ID:140489 发表于 2017-4-8 15:15 | 显示全部楼层 |阅读模式
//s1加键,s2减键,s3设置键,knum是设置键按下的次数
//现在加,减调节都正常;
//现在想在按下设置键,对时后过几秒钟使时钟自行启动走;
//后面写了一段程序,按下设置键不做任何操作过10秒启动时钟走时,
//现在问题是按下设置键,按加、减键调时,如果从1加到59,时间没对好就启动时钟走时了,怎么做才能使时间对好后过几秒自动启动走时呢?
void keyscan()                                                                   //按键扫描函数
{                                                                                   
        if(s3==0)                                                                   //选择按键按下
        {
                delay(10);                                                        //延时
                if(s3==0)
                {
                        while(!s3)                //松手检测,这句后面不能加分号,不然按键按下所以数码管会灭,松手后才亮
                                display(shi,fen,miao);        //加上这句,按键按下对应的位置就会闪
                        knum++;
                        if(knum==1)                                                  //分闪烁
                        {
                                 write_1302(0x8e,0x00);                //写保护取消
                                 write_1302(write_miao,0x80); //  写秒80,时钟停止走时;
                        
                        }
                        
                        
                        if(knum==3)                                                   //时钟启动
                        {
                                knum=0;
                                write_1302(write_miao,0x00);
                                write_1302(0x8e,0x80);                //保护启动
                        }


                }
        }




        if(knum==1)                                                                //分钟调节
        {
                if(s1==0)                                                        //加
                {
                        delay(10);
                        if(s1==0)
                        {        
                                while(!s1)
                                        display(shi,fen,miao);        //加上这句,按键按下就会闪
                                fen++;
                                fen=fen/10*16+fen%10;                //转为16进制
                                if(fen==0x60)
                                        fen=0x00;
                                write_1302(write_fen,fen);        //写入1302
                                read_sf();                                        //读出时间,然后显示
                                
                                
                        
                        }
                  
                }
               
                if(s2==0)
                {
                        delay(10);
                        if(s2==0)
                        {        
                                while(!s2)
                                        display(shi,fen,miao);        //加上这句,按键按下就会闪
                                fen--;
                                fen=fen/10*16+fen%10;                //转为16进制
                                if(fen==-1)
                                        fen=0x59;
                                write_1302(write_fen,fen);
                                read_sf();
                        }
                }

                        
        }
        
        
        if(knum==2)
        {
                if(s1==0)
                {
                        delay(10);
                        if(s1==0)
                        {        
                                while(!s1)
                                        display(shi,fen,miao);        //加上这句,按键按下就会闪
                                shi++;
                                shi=shi/10*16+shi%10;                //转为16进制
                                if(shi==0x24)
                                        shi=0x00;
                                write_1302(write_shi,shi);
                                read_sf();
                        }
                }
                if(s2==0)
                {
                        delay(10);
                        if(s2==0)
                        {        
                                while(!s2)
                                          display(shi,fen,miao);        //加上这句,按键按下就会闪
                                shi--;
                                shi=shi/10*16+shi%10;                //转为16进制
                                if(shi==-1)
                                        shi=0x23;
                                write_1302(write_shi,shi);
                                read_sf();


                        }
                }
        }
        

        if(knum!=0 )        //在设置状态下,x秒钟不做任何操作,则自动退出设置状态,时钟启动,走时。

        {
           
          if( (s1!=0)&&(s2!=0) )
          {
                TR1=1;                          //启动定时器
                if(zs==10)                  
                  {
                        zs=0;
                        knum=0;                                           //设置按键次数清零
                        TR1=0;                                           //关闭定时器
                        write_1302(write_miao,0x00); //写秒0,时钟启动,走时。
                        write_1302(0x8e,0x80);                //保护启动
                  }
                }
        }        
}

void temer2() interrupt 3      //50毫秒中断
{
  TH1=(65536-46080)/256;
  TL1=(65536-46080)%256;
  ss1++;
  if(ss1==20)       //到1秒
  {        
          ss1=0;
          zs++;
  }

}

回复

使用道具 举报

ID:111634 发表于 2017-4-8 15:40 | 显示全部楼层
本帖最后由 zl2168 于 2017-4-8 17:24 编辑

先给你2个案例看看,其中有你需要的东东。
先Proteus仿真,确认有效。
实例91 具有校正功能的时钟1302LCD1602显示)


实例91 带校正时钟1302(LCD1602显示).rar (52.74 KB, 下载次数: 7)
回复

使用道具 举报

ID:140489 发表于 2017-4-8 21:08 来自手机 | 显示全部楼层
zl2168 发表于 2017-4-8 15:40
先给你2个案例看看,其中有你需要的东东。
先Proteus仿真,确认有效。
实例91  具有校正功能的时钟1302( ...

例子里没有我想要的哦
回复

使用道具 举报

ID:111634 发表于 2017-4-8 22:42 | 显示全部楼层
lids 发表于 2017-4-8 21:08
例子里没有我想要的哦

你的问题是:“按下设置键,按加、减键调时,如果从1加到59,时间没对好就启动时钟走时了,怎么做才能使时间对好后过几秒自动启动走时呢?”
我推荐的案例是:按加、减键调时,时钟照常运行,根本就不需过几秒再启动。
你先Proteus仿真一下,确认有效,再去找程序源代码。不过,我先告诉你:仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:187627 发表于 2017-4-9 10:08 | 显示全部楼层
不知道哦
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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