搜索
bottom↓
回复: 1

矩阵键盘的扫描

[复制链接]

出0入0汤圆

发表于 2012-2-24 15:40:31 | 显示全部楼层 |阅读模式
下面是自己写的矩阵键盘的检测  是程序哪里出来问题一直不知道,还是这中思路不行,求交流一下是程序的一部分,当检测到有按键时,亮一个灯
        #include<reg52.h>
                #define uchar unsigned char
                #define uint unsigned int
                void delay (uchar ms) ;
                uchar ms;
                void main()
                {
                        uchar temp;
                        P3=0xfe;
                        temp=P3;
                        temp&=0xf0;
                        if(temp!=0xf0)
                        {        delay(50);
                                temp=P3;
                              temp&=0xf0;
                                if(temp!=0xf0)
                                {
                                        temp=P3;
                                        switch(temp)
                                        {
                                        case 0xee:
                                        case 0xde:
                                        case 0xbe:
                                        case 0x7e:
                                             P1=0xfe;
                                             break;
                                        }
                                }
                        }

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-2-24 23:26:51 | 显示全部楼层
回复【楼主位】wozhoujue
-----------------------------------------------------------------------

我是新手,最近自己用汇编编了个程序调试成功。没自信看你的,不会C51
;********************************************************************************
;本程序实现扫描按键显示功能.                                                    *   
;分别按16个键盘显示分别显示数字0123456789ABCDEF                                 *
;键盘口P1,数码管显示一位, 数码管段位p0口                                   *
;********************************************************************************
     org        0000h
     ajmp main
     org        0080h
main:
     mov 30h,#00h;键盘码缓存
          mov p1,#0fh;输出扫描码
          lcall delay2;仿抖处理
          mov a,p1
          mov r3,a
          cjne a,#0fh,loop1;有输入,则输出下一个扫描码
          ajmp main
loop1:
     mov p1,#0f0h;输出扫描码
          mov r0,p1
          mov a,r0
          cjne a,#0f0h,loop2
          ajmp main
loop2:
     mov a,r3
          xrl a,r0
          mov 30h,a;暂存键盘码
          lcall chek;调用查询键盘码程序
     lcall display;调用显示程序段
          ajmp main;循环扫描
;#########查询键盘码
chek:
    mov r1,#00h
         mov        dptr,#tab1        ;键盘码首地址
ck1:
    mov a,r1
         inc r1
    movc a,@a+dptr;取键盘码
    jz ck2;取到00h,则说明键盘误动作,退出
         cjne a,30h,ck1
ck2:
    dec r1
    mov a,r1;取出相对地址
    ret
;#########获取显示码并显示
display:
    mov dptr,#tab2
         movc a,@a+dptr;取显示码
         mov p2,#0efh
         mov p0,a
ret                  
;#########延时
delay2:                                  ;延时去抖动子程序
      MOV R5,#10
L7:   MOV R6,#10
L8:   DJNZ R6,L8
      DJNZ R5,L7
      RET
tab1:
      db  77h,0b7h,0d7h,0e7h,7bh,0bbh,0dbh,0ebh,7dh,0bdh,0ddh,0edh,7eh,0beh,0deh,0eeh,00h        ;键盘码表
tab2:
      db  28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h,30h,25h,0a9h,26h,0a1h,0b1h,0ffh        ;数码管0123456789ABCDEF
                end
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 04:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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