51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机源码 > 详细内容
4*4键盘程序03
作者:佚名  发布时间:2009/10/16  阅读次数:958  字体大小: 【】 【】【
  ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   4*4键盘程序
                           ;******************************************************
                                               ;* 名称:readkyeboard
                                               ;* 功能:从键盘中读入按键值,存入寄存器A
                                             ;* 调用函数:   key_on     delay10ms     key_p   key_ccode
                                               ;* 输入:
                                               ;*   输出: A=按键值
                                               ;*   使用的寄存器:R2,R3,R5,R6,R7
                           ******************************************************
   readkeyboard:
     begin: acall key_on                               ;判断有无键按下
                 jnz     delay
                 ajmp readkeyboard
     delay:acall delay10ms                             ;消除抖动
               acall key_on
                 jnz     key_num                                 ;有键按下,转定按键位置
                 ajmp   begin
     key_num:acall key_p                                 ;调定键位置子程序
                 anl a,#0FFh
                 jz   begin                                         ; 出错继续扫描
                 acall key_ccode                               ;对按键编码
               push a
     key_off:acall key_on                               ;等待按键释放
                     jnz       key_off
                     pop a
                       ret
                       ;<<<<<<<<<   判断是否有键按下子程序
                       key_on: mov a,#00h
                 orl a,#0fh
               mov p1,a
               mov a,p1
                 orl a,#0f0h
                     cpl a
                     ret
                       ;<<<<<<<<<<<<<<编码程序
                       key_p:
                 mov r7,#0efh             ; R7存列扫描值
         l_loop:mov a,r7
                 mov p1,a
               mov a,p1
                 orl a,#0f0h
                   mov r6,a                   ; R6存行读入值
                   cpl a
                 jz   next
                 ajmp key_c
       next: mov a,r7
             jnb acc.7,error
                 rl a
                 mov r7,a
                 ajmp l_loop
     error:mov a,#00h
                   ret
     key_c:mov r2,#00h   ;r2   行号
                 mov r3,#00h   ;r3   列号
                     mov a,r6
                 mov r5,#04h
again1:jnb acc.0,out1
                   rr   a
                   inc r2
               djnz r5, again1
         out1: inc r2
                   mov a,r7
               mov r5,#04h
again2:jnb acc.4,out2
                     rr a
                   inc r3
                 djnz r5,again2
       out2: inc r3
                   mov a, r2
                     swap a
                     add a,r3
                   ret

                       ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<解码程序
                       key_ccode:
                 push a
                     swap a
                 anl a,#0fh
                 dec a
                     rl a           ;行号乘4
                     rl a
                     mov r7,a
                 pop a
               anl a,#0fh
                   dec a
                     add a,r7
                   ret


                       ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<延时10Ms
                       delay10ms:
           anl tmod,#0f0h
         orl tmod,#01h

         mov th0,#0d8h
           mov tl0,#0f0h
             setb tr0
wait:jbc tf0,over
               ajmp wait
               clr tr0
     over:ret
  
我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号