《匠人手记》推荐网上购书渠道:
  互动出版网(china-pub)   >>>
  当当网(dangdang)   >>>
  卓越亚马逊网    >>>
  淘宝网(taobao)   >>>
  更多购书渠道……   >>> 

设为首页加入收藏联系匠人管理入口21IC首页21IC博客21IC社区侃单片机回复的贴参与的贴新100贴

载入中...

广告3号位
百宝日历
载入中...

百宝专栏

说明:请先返回首页,再点击下列专栏即可进入。
  • 首页 相册 标签
  • 匠人公告(87)
  • 匠人笔记(144)
  • 匠人文集(167)
  • 写书近况(189)
  • 团队撰写(96)
  • 与非门专栏(566)
  • 比尔熊专栏(12)
  • 网络酷文(492)
  • 程序宝典(477)
  • 程序算法(28)
  • 编程技巧(482)
  • 资料宝藏(280)
  • 硬件技术(178)
  • 汽车电子(52)
  • 藏经宝阁(47)
  • 项目管理(15)
  • 趣味设计(6)
  • 社区热贴(5)
  • 开发工具(19)
  • 电脑应用(66)
  • 供需信息(24)
  • 最新货色

    载入中...

    粉丝评论

    载入中...

    载入中...



    百宝信息

    载入中...

    百宝流量

    (2006-07-01开始)


    匠人手记

    购书攻略勘误表

    开发板专卖——淘宝店

     编程技巧: 优质代码的十诫

    《多个按键的连按处理技巧》大话篇
    程序匠人 发表于 2005-6-1 23:56:00  阅读全文 | 回复(6) | 引用通告 | 编辑

    主题:《多个按键的连按处理技巧》大话篇 返回主题列表

    刷新 PAGE 1 / 2 共25篇 首页 前页 后页 尾页 
     
     程序匠人 发表于 2002-1-8 22:33 侃单片机 ←返回版面    

    《多个按键的连按处理技巧》大话篇


    咚咚呛!咚咚呛!咚咚呛!----锣鼓三响,小匠出场:“如果你的芯是一座作坊,我愿做那不知疲倦的程序匠……”

    ----台下,鲜花共烂西红柿一色,飞向台前……
    ----匠人连忙举起一个键盘,左遮右挡……

    话说小匠的大话篇,自隆重推出以来,篇篇都考了个COOL,一时间人气大震。截止昨天,共结交了N位好友,众多MM纷纷到斑竹那里打听小匠的婚否情况……

    ----西红柿再次飞向台前……

    上次贴了一篇《一个按键的多种击键组合判别技巧》,这次再贴个姊妹篇上来……

    ----匠人正在贴贴子,被值勤的斑竹逮个正着:“好啊!我才打扫干净,你又给糟蹋了……”
    ----匠人忙堆起一脸的媚笑:“斑竹大人,我贴的可是大话篇,麻烦你再给个COOL……”
    ----斑竹恍然:“哦,原来满纸胡言,通篇诋毁我斑竹光辉形象的那个匠人,就是你?!……”
    ----匠人一看情形不对,正想开溜……
    ----只见一道白光一晃……
    ----3个时辰之后,有人发现昏迷不醒的程序匠人躺在血泊之中……
    ----墙上提着一行血字:“十步杀一匠,千里不留行。事了拂衣去,深藏身与名。”……

    ----好了,言归正传,请看下文:


        《多个按键的连按处理技巧》

        在设计中,常常用UP键和DOEN来调节参数。这种键在处理时,要考虑连按的问题。而且希望键连续按下的时间越长,动作的响应速度越快(即加速度处理)
    在连按的处理过程中,要考虑3个时间常数:
        1、连按响应时间常数(首次值),该值用于区分连按/单按。
            a)当按键闭和的时间<该参数时,判为单按;
            b)当按键闭和的时间>该参数时,判为连按;
        2、连按缓冲时间常数(最大值)。
            在连按操作刚开始时,按键响应速度较慢,这个参数就是用于决定每次动作之间的最大时间。
        3、连按缓冲时间常数(最小值)
            在连按的过程中,响应的速度越来越快,但也不能无限快。这个参数就是用于决定每次动作之间的最小时间。
        还有一个要考虑的问题是,可能并不是所有按键都具有连按功能。这时,可用一个标志位来区分。在读键子程序中返回键值的同时,也返回这个标志,告诉键盘监控程序是否要做连按处理。

        下面的一段例程中,可以识别单按/连按,并可处理加速度问题。只要在主程序中调用即可。程序中的延时用现实程序来代替。

    ;********************************
    ;按键处理模块
    ;********************************
    ;时间常数定义
    KEY_T        ==    250        ;连按响应时间常数(首次值)
    KEY_TMAX    ==    120        ;连按缓冲时间常数(最大值)
    KEY_TMIN    ==    30        ;连按缓冲时间常数(最小值)
    ;********************************
    KEYWK:
        MOV    A,@KEY_T
        MOV    KEY_JS,A        ;连按计数器置初值
        BC    TT1,KEY            ;清连按标志
        MOV    A,@KEY_TMAX-KEY_TMIN
        MOV    KEY_JSJS,A        ;连按加速计数器置初值
        CALL    READKEY            ;读键
        JBS    R3,C            ;有键按下跳
        RET
        FCALL    MOVLCD            ;显示延时
        CALL    READKEY            ;读键
        JBS    R3,C            ;确实有键按下跳
        RET
    ;====确实有键按下
        MOV    KEY_BUF,A        ;保存键值   
    KEY1:
        FCALL    MOVLCD            ;显示延时
        CALL    READKEY            ;读键
        JBS    R3,C            ;键未释放跳
        JMP    KEY5
    ;====连按判断
        JBS    TT1,KEY_EN        ;连按功能有效跳
        JMP    KEY1            ;禁止连按跳
        JBC    TT1,KEY            ;不是连按跳
        JMP    KEY2
        DJZ    KEY_JS            ;连按计数器-1=0跳
        JMP    KEY1
        BS    TT1,KEY            ;置连按标志
        JMP    KEY1
    ;====连按处理
    KEY2:
        CALL    DOKEY            ;执行按键功能   
        MOV    WK_MODE,A        ;刷新模式
    ;连按加速计数器-1
        DJZ    KEY_JSJS       
        JMP    $+2
        INC    KEY_JSJS
    ;连按计数器置延时值
        MOV    A,@KEY_TMIN
        ADD    A,KEY_JSJS       
        MOV    KEY_JS,A        ;连按计数器置延时值
    KEY4:
        FCALL    MOVLCD            ;显示延时
        DJZ    KEY_JS            ;连按计数器-1=0跳
        JMP    KEY4
        JMP    KEY1
    ;====单按处理
    KEY5:
        FCALL    MOVLCD            ;显示延时
        CALL    READKEY            ;读键
        JBC    R3,C            ;键确实已释放跳
        JMP    KEY1
        JBC    TT1,KEY            ;不是连按跳
        RET
    ;按键发声
        BS    TT1,KEY_SP        ;开蜂鸣器
        FCALL    MOVLCD
        CALL    DOKEY            ;执行按键功能   
        MOV    WK_MODE,A        ;刷新模式
        BC    TT1,KEY_SP        ;关蜂鸣器
        FCALL    MOVLCD
        RET
    ;********************************
    ;读键子程序
    ;出口:    A=键号值(0=无,1=K2定时,2=K3功率选择,3=K4水温上调,4=K5水温下调,
    ;            5=K6时钟上调,6=K7时钟下调,7=K8时段设置)
    ;    C:        (0=无,1=有)
    ;    TT1,KEY_EN:    当前键连按有效标志(0=禁止连按,1=可连按)
    ;    (K4/K5/K6/K7有连按功能)
    ;********************************
    READKEY:
        BS    R3,C
    ;不可连按的按键
        BC    TT1,KEY_EN
        JBS    R7,6            ;K2未闭合跳
        RETL    @01            ;返回A=01    
        JBS    R7,0            ;K3未闭合跳
        RETL    @02            ;返回A=02    
        JBS    R7,5            ;K8未闭合跳
        RETL    @07            ;返回A=07    
    ;可连按的按键
        BS    TT1,KEY_EN
        JBS    R7,1            ;K4未闭合跳
        RETL    @03            ;返回A=03    
        JBS    R7,2            ;K5未闭合跳
        RETL    @04            ;返回A=04    
        JBS    R7,3            ;K6未闭合跳
        RETL    @05            ;返回A=05    
        JBS    R7,4            ;K7未闭合跳
        RETL    @06            ;返回A=06    
        BC    R3,C
        RETL    @00            ;返回A=00

    ----结束   

     

     

    签名:


    如果你的‘芯’是一座作坊,我愿作那不知疲倦的程序匠……
     


     

     

     soho 发表于 2002-1-8 23:56 侃单片机 ←返回版面    

    警告: 下次再贴, 文字加倍, 程序删掉!

    又臭又长的程序谁看.

     

     

     

     jw5th 发表于 2002-1-9 03:35 侃单片机 ←返回版面    

    只需要把思路讲出来就可。

     

     

     

     虚拟人 发表于 2002-1-9 14:20 侃单片机 ←返回版面    

    为匠人默哀3分钟。

    呜呜~~~~

     

     

     

     程序匠人 发表于 2002-1-9 19:43 侃单片机 ←返回版面    

    如此失败?

    没想到各位如此冷落小匠……
    请问SOHO:老哥是喜欢看搞笑的那段,还是凶杀的那段?……

     


    签名:


    如果你的‘芯’是一座作坊,我愿作那不知疲倦的程序匠……
     


     

     

     soho 发表于 2002-1-9 21:57 侃单片机 ←返回版面    

    别伤芯, 要不我给你块糖糖吃 ^-^

     

     

     

     hlmfox 发表于 2002-1-10 17:23 侃单片机 ←返回版面    

    老兄,换C吧!这样掌声会多点!!!

     

     

     

     插翅能飞 发表于 2002-1-11 13:02 侃单片机 ←返回版面    

    我来给点掌声。

    啪!啪啪!啪啪啪!。。。

     

     

     

     skysea 发表于 2002-1-11 14:12 侃单片机 ←返回版面    

    保持你的风格

    每个人都有自己的风格,我个人觉得你的这种风格比较有个性,感觉文笔还不错,能够让战友们在获取资料信息的同时又轻松一笑,佩服!!!
    Y are not alone  :-)

     

     

     

     程序匠人 发表于 2002-1-11 19:48 侃单片机 ←返回版面    

    skysea的发言真是一针见血!

    其实,小匠发这篇帖子的目的,就是想让大家在一个比较轻松愉快的环境下来讨论技术。

     


    签名:


    如果你的‘芯’是一座作坊,我愿作那不知疲倦的程序匠……
     


     

     

     hyqiu 发表于 2002-1-11 20:17 侃单片机 ←返回版面    

    啊……前面的文笔不错……

    后面的程序就……

    这种功能……用 C 来实现更好些……

    另外……对于键盘扫描,我采用的算法是每 1/60 秒扫描一次,然后简单的判断一下本次扫描值和上次扫描值有否区别……类似电视游戏机的做法……

    这样……似乎 CPU 利用率会高一些……如此程序的稳定性也比较有提升的空间(不过实时性也会有所降低),而且还可以免于进行抖动去除……

     

     

     

     今晚打老虎 发表于 2002-1-11 20:18 侃单片机 ←返回版面    

    好呀!

      现在很难找到一个搞义隆系列单片机的战友了,不错不错对我这种初学者来说很有参考的价值,谢谢。希望程序匠人朋友再接再厉,为我们带来快乐。

     

     

     

     程序匠人 发表于 2002-1-11 20:30 侃单片机 ←返回版面    

    关于EMC++

    前面有两位朋友都提到了C语言,
    各位真是幸福,可以用C语言,
    EMC的芯片只有一套伪C语言,叫EMC++
    不过,语法不太严密,界面也不好(FOR DOS 的)
    所以,小匠只有……
    不过,我倒是认为,汇编语言对硬件的控制更直接些。
    各位以为呢?……

     

     

    签名:


    如果你的‘芯’是一座作坊,我愿作那不知疲倦的程序匠……
     


     

     

     johnsoncao 发表于 2002-1-11 20:52 侃单片机 ←返回版面    

    Yes! I Agree!

     

     

     

     soho 发表于 2002-1-11 20:54 侃单片机 ←返回版面    

    对, 汇编语言对硬件的控制更直接些

    只是程序因芯片而异, 局限性大, 加之芯片不熟的话, 读起来也吃力.

     

     

     

     hyqiu 发表于 2002-1-11 20:57 侃单片机 ←返回版面    

    这个嘛……

    个人认为……纯粹的 ANSI C 在处理硬件控制/时序上的能力确实比汇编差,但是这个的相差其实微乎其微……

    而 C 在逻辑/算法上的能力绝非汇编可以比拟的……并且汇编程序几乎是不可重用的……

    另外,如果以 51 系列单片机来说……许多稍具规模的系统用 C 开发编写的代码甚至比汇编还快……

    再者,C 的可移植性是汇编完全没有的……

    最后……C 非常容易学……而且 C 的基础打好的话,可以非常容易的转到 FPGA/DSP 甚至 PC 程序的开发上……这个是汇编不可能比拟的优势——你总不会希望自己一辈子跟 8 位单片机较劲吧?

     

     

     

     插翅能飞 发表于 2002-1-12 12:12 侃单片机 ←返回版面    

    关于C与汇编的好坏,谁最有发言权?

    一定是两种语言都很精通的人,才能不偏不倚地来评价……

     

     

     

     jcws10000 发表于 2002-1-12 13:00 侃单片机 ←返回版面    

    谁再说C比汇编好,我跟他急.....

     

     

     

     alonlee 发表于 2002-1-12 13:22 侃单片机 ←返回版面    

    呜呜,PL/M如何?大家都把它忘了还是不值一提?

     


    签名:

     

        我想飞 , 可我没有翅膀


     

     

     hyqiu 发表于 2002-1-12 14:39 侃单片机 ←返回版面    

    楼上的楼上……急有什么用?

    除非你打算一辈子只用一种单片机……否则长远来看,精通 C 并且了解汇编确实比只精通汇编来的有用……

     

       招聘精通单片机通讯工程师1-2名
    专业源自专心 串口专家
     
     
    主题:《多个按键的连按处理技巧》大话篇 返回主题列表

    刷新 PAGE 2 / 2 共25篇 首页 前页 后页 尾页 
     
     jcws10000 发表于 2002-1-12 21:35 侃单片机 ←返回版面    

    楼上的朋以,干嘛只懂汇编就只能用一种单片机?哪种单片机不能用汇编?

     

     

     

     hyqiu 发表于 2002-1-13 11:51 侃单片机 ←返回版面    

    啊……只是一种比喻而已……

    毕竟只用汇编语言的话,改型后就得重新掌握整套指令体系……

    而以 C 为主的话,基本上只要知道新片子的引脚功能和时序就可以了……

     

     

     

     程序匠人 发表于 2002-1-13 22:16 侃单片机 ←返回版面    

    哈哈,小匠也想把C再学透些,免得被时代淘汰

     


    签名:


    如果你的‘芯’是一座作坊,我愿作那不知疲倦的程序匠……
     


     

     

     程序匠人 发表于 2002-1-14 14:01 侃单片机 ←返回版面    

    请大家继续讨论……

     
    * - 本贴最后修改时间:2002-1-21 14:25:10 修改者:程序匠人
    * - 修改原因:A

     

    签名:


    如果你的‘芯’是一座作坊,我愿作那不知疲倦的程序匠……
     


     

     

     虚拟人 发表于 2002-1-22 12:03 侃单片机 ←返回版面    

    COOL!

     

     

     

    刷新 PAGE 2 / 2 共25篇 首页 前页 后页 尾页 

    看《匠人手记》,与匠人同行!北航出版,正在热卖!

    Re:《多个按键的连按处理技巧》大话篇
    eason_lee(游客)发表评论于2008-2-25 10:42:00  个人主页 | 引用 | 返回 | 删除 | 回复

    eason_lee(游客)匠人,小弟下载了你的全部技术文章,以供学习.
    在此谢过了.

    以下为程序匠人的回复:
    欢迎常来

    看《匠人手记》,与匠人同行!北航出版,正在热卖!

    Re:《多个按键的连按处理技巧》大话篇
    学生(游客)发表评论于2007-12-12 16:49:00  个人主页 | 引用 | 返回 | 删除 | 回复

    学生(游客)谢谢匠人可以将源程序贴上去,而且加了自己的一些调侃,让人感觉真实,不像从别人那借来的。

    看《匠人手记》,与匠人同行!北航出版,正在热卖!

    回复:《多个按键的连按处理技巧》大话篇
    huang jun wu(游客)发表评论于2006-7-29 17:11:00  个人主页 | 引用 | 返回 | 删除 | 回复

    huang jun wu(游客)

    我稍微看了一下,该按键程序处理比较简单,不实用,还不如我做的程序。而且,当多行多列按键按下去的时候,每做处理,容易出错。

     

    看《匠人手记》,与匠人同行!北航出版,正在热卖!

    回复:《多个按键的连按处理技巧》大话篇
    cxjr发表评论于2006-3-27 23:59:00  个人主页 | 引用 | 返回 | 删除 | 回复

    cxjr不会吧,各位睡在偶下铺的兄弟,这段程序中的注释比程序还多,应该很容易看懂的啊!

    看《匠人手记》,与匠人同行!北航出版,正在热卖!

    回复:《多个按键的连按处理技巧》大话篇
    wk(游客)发表评论于2006-3-26 11:23:00  个人主页 | 引用 | 返回 | 删除 | 回复

    wk(游客)

     

    我们不懂汇编都嘛,那我们乍办呢,还是写一份C语言的吧!

    看《匠人手记》,与匠人同行!北航出版,正在热卖!

    回复:《多个按键的连按处理技巧》大话篇
    hongyang01(游客)发表评论于2006-2-26 0:16:00  个人主页 | 引用 | 返回 | 删除 | 回复

    hongyang01(游客)

    以下引用菠菜(游客)在2006-2-14 8:36:00的评论:

    能不能将上述的程序用c51写出来,我看着吃力

    但很想弄明白

    谢谢!

    我的EMAIL:

    hongyang01613@163.com

    再一次表示感谢!我期待着你的答复


    看《匠人手记》,与匠人同行!北航出版,正在热卖!

    回复:《多个按键的连按处理技巧》大话篇
    菠菜(游客)发表评论于2006-2-14 8:36:00  个人主页 | 引用 | 返回 | 删除 | 回复

    菠菜(游客)

    能不能将上述的程序用c51写出来,我看着吃力

    但很想弄明白

    谢谢!

    我的EMAIL:zhuguangxing12345@tom.com

    再一次表示感谢!我期待着你的答复

    看《匠人手记》,与匠人同行!北航出版,正在热卖!

    发表评论:
    载入中...

    芯片专题

    器件专题

    软件专题

    硬件专题

    综合专题

    项目专题

    原创专题

    器件检测
    LCD LED
    按键 触摸键
    E2PROM
    电池 电机
    电阻 电容 电感

    指令系统
    软件算法
    编程规范
    滤波算法
    串行通讯

    PCB设计
    I2C PWM
    红外遥控
    充电技术
    中断 ADC 

    匠人手记
    匠人夜话
    网络心路
    一周热点串烧
    从零开始玩PIC
    DIY旋转时钟

    广告5号位 [投放]

    广告3号位 [投放]

    站内搜索


    站外搜索


    百度  google
    mp3  歌词 
    图片  FLASH 
    知道  文档
    新闻  词典 
    地图  mp3 
    软件  天网 
    雅虎  爱问 
    搜狗  讯雷 
    网讯  华军 
    天空 

    21IC器件搜索
    百宝箱分站
  • 《匠人的百宝箱》21IC站
  • 《匠人的百宝箱》21IC笔记团队
  • 《匠人手记》21IC书友会
  • 《匠人的百宝箱》MCUBLOG站
  • 《匠人的百宝箱》MCUBLOG笔记团队
  • 《匠人的百宝箱》EDN站
  • 《匠人手记》EDN书友会
  • 《匠人的百宝箱》废站
  • 《匠人的百宝箱》土豆视频站
  • 《匠人的百宝箱》新浪站
  • 《匠人的百宝箱》百度站
  • 《匠人的百宝箱》网易126站
  • 《匠人的百宝箱》网易163站
  • 《匠人的百宝箱》互动出版网站
  • 广告4号位 [投放]

     

    推荐阅读

     

    友情连接

     [更多酷站连接]

     

     

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [hotpower 的水潭]

    [八楼的呼吸]

    [柔月阁]

    [PIC论坛]

    [SMARTCODE电子书斋]

    [阿摆手记]

    [电子伙伴]

    [xwj的文君阁]

    [所长的BLOG]

    [海边淘沙]

    [单片机开发联盟]

    [数字电视之家]

    [软件开发之窗]

    [unaided的笔记]

    [小飞的笔记]

    [ICC AVR开发网]

    [我爱研发网]

    [infernal的笔记]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [水牛的仓库]

    [逍遥电子]

    [ningpanda的博客]

    [雄鹰的空中加油站]

    [一网见天下]

    [Armoric]

    [股剩是怎样炼成的]

    [嵌入式365]

    [C-Design]

    [AVR猎手的地盘]

    [中国高校自动化网]

    [SunK]

    [工控365网]

    [煮透社]

    [白沙的香烟盒]

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    大学生电子网 

     

     

     

     

     

     

     

     《匠人的百宝箱》