矩阵键盘识别实验

 一、   实验目的

掌握单片机I/O口的输入检测的方法、矩阵按键的识别方法、键盘消抖等。

学会实时程序的调试技巧。

 

 二、   实验原理

我们在手动按键的时候,由于机械抖动或是其它一些非人为的因素很有可能会造成误识别,一般手动按下一次键然后接着释放,按键两片金属膜接触的时间大约为50ms 左右,在按下瞬间到稳定的时间为5-10ms,在松开的瞬间到稳定的时间也为5-10ms,如果我们在首次检测到键被按下后延时10ms 左右再去检测,这时如果是干扰信号将不会被检测到,如果确实是有键被按下,则可确认,以上为按键识别去抖动的原理。

 

 三、   实验内容

实验板上电时,数码管不显示,顺序按下矩阵键盘后,在数码管上依次显示0F6个数码管同时静态显示即可。

下图中按键s6-s218条线分别联接p3口相连,p3.0~p3.3控制1~4行,p3.4~p3.7控制1~4列。

矩阵键盘识别实验
               图1 实验板键盘电路原理图

 

 四. 实验步骤

1 按实验要求在Keil中创建项目,编辑、编译程序。

2 将编译生成的目标码文件(后缀为.Hex)传入实验板中。

3 在实验板上运行程序,观察实验运行结果并记录


五.实验结果

wei bit p2.7

    duan bit p2.6

       org 0000h

       jmp main

       org 0040h

      

main:   mov p3,#0ffh

        mov a,p3

        setb wei

        mov p0,#0ffh

        clr wei

        mov dptr,#table

 

m1:     mov p3,#0feh

        mov a,p3

        cjne a,#0feh,s1

        jmp s7

s1:     call delay

        mov a,p3

        cjne a,#0feh,s2

        jmp s7

s2:     mov a,p3

        cjne a,#0eeh,s3

        mov r2,#0

        jmp s8

s3:     mov a,p3

        cjne a,#0deh,s4

        mov r2,#1

        jmp s8

s4:     mov a,p3

        cjne a,#0beh,s5

        mov r2,#2

        jmp s8

s5:     mov a,p3

        cjne a,#7eh,s8

        mov r2,#3

        jmp s8

s8:     mov a,p3

        cjne a,#0feh,s8

        call display

s7:     nop

        jmp m2

 

m2:     mov p3,#0fdh

        mov a,p3

        cjne a,#0fdh,l0

        jmp l0

l0:     call delay

        mov a,p3

        cjne a,#0fdh,l2

        jmp l7

l2:     mov a,p3

        cjne a,#0edh,l3

        mov r2,#4

        jmp l8

l3:     mov a,p3

        cjne a,#0ddh,l4

        mov r2,#5

        jmp l8

l4:     mov a,p3

        cjne a,#0bdh,l5

        mov r2,#6

        jmp l8

l5:     mov a,p3

        cjne a,#7dh,l8

        mov r2,#7

        jmp l8

l8:     mov a,p3

        cjne a,#0fdh,l8

        call display

l7:     nop

        jmp m3

m3 :    mov p3,#0fbh

        mov a,p3

        cjne a,#0fbh,a0

        jmp a0

a0:     call delay

        mov a,p3

        cjne a,#0fbh,a2

        jmp a7

a2:     mov a,p3

        cjne a,#0ebh,a3

        mov r2,#8

        jmp a8

a3:     mov a,p3

        cjne a,#0dbh,a4

        mov r2,#9

        jmp a8

a4:     mov a,p3

        cjne a,#0bbh,a5

        mov r2,#10

        jmp a8

 

a5:     mov a,p3

        cjne a,#7bh,a8

        mov r2,#11

        jmp a8

a8:     mov a,p3

        cjne a,#0fbh,a8

        call display

a7:     nop

        jmp m4

m4:     mov p3,#0f7h

        mov a,p3

        cjne a,#0f7h,b0

        jmp b0

b0:     call delay

        mov a,p3

        cjne a,#0f7h,b2

        jmp b7

b2:     mov a,p3

        cjne a,#0e7h,b3

        mov r2,#12

        jmp b8

b3:     mov a,p3

        cjne a,#0d7h,b4

        mov r2,#13

        jmp b8

b4:     mov a,p3

        cjne a,#0b7h,b5

        mov r2,#14

        jmp b8

b5:     mov a,p3

        cjne a,#77h,b8

        mov r2,#15

        jmp b8

b8:     mov a,p3

        cjne a,#0f7h,b8

        call display

b7:     nop

        jmp m1

display:setb wei

        mov p0,#0c0h

        clr wei

        setb duan

        mov a,r2

        movc a,@a+dptr

        mov p0,a

        clr duan

        ret

delay:  mov r4,#20

dl0:    mov r7,#248

        djnz r7,$

        djnz r4,dl0

        ret

 

table: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh

db 77h,7ch,39h,5eh,79h,71h

end

相关文章:

  • 2021-07-18
  • 2021-09-16
  • 2022-02-13
  • 2021-11-19
  • 2021-10-30
  • 2021-12-26
  • 2021-11-19
  • 2021-05-28
猜你喜欢
  • 2022-12-23
  • 2021-04-10
  • 2022-01-31
  • 2021-11-19
  • 2021-04-30
  • 2021-11-19
相关资源
相似解决方案