您当前的位置:五五电子网电子知识单片机-工控设备51单片机矩阵式键盘的连接方法和工作原理 正文
矩阵式键盘的连接方法和工作原理

矩阵式键盘的连接方法和工作原理

点击数:7299 次   录入时间:03-04 11:42:13   整理:http://www.55dianzi.com   51单片机
 H
 
0
 0
 0
 0
 0
 0
 0
 1
 1
 03H
 
1
 1
 0
 0
 1
 1
 1
 1
 1
 9FH
 
2
 0
 0
 1
 0
 0
 1
 1
 1
 27H
 
3
 0
 0
 0
 0
 1
 1
 0
 1
 0DH
 
4
 1
 0
 0
 1
 1
 0
 0
 1
 99H
 
5
 0
 1
 0
 0
 1
 0
 0
 1
 49H
 
6
 0
 1
 0
 0
 0
 0
 0
 1
 41H
 
7
 0
 0
 0
 1
 1
 1
 1
 1
 1FH
 
8
 0
 0
 0
 0
 0
 0
 0
 1
 01H
 
9
 0
 0
 0
 0
 1
 0
 0
 1
 09H
 

不过这是按照上面的标准接线排列的 在实际的程序设计中 有时为了接线方便常常会把接线顺

序打乱我们的实验板就是这样的那么此时的字形表又该如何做呢 其实也很简单 一样地列表

以我们的实验板为例 同样显示 9876543210 共阴极接法注意 和共阳极接法的区别接线如下

P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 对应 g f a b h c d e 则字形码如下所示

0 11101110/EEH 1 00101000/28H 2 11001101/ CDH 3 01101101/ 6DH 4 00101011/

2BH 5 01100111/67H 6 11100111/E7H 7 00101100/2CH 8 11101111/EFH 9 00101111/ 2FH

继续练习 写出显示 A-F 的字形码 下面提个问题 如果是共阳极的接法 字形码又该是怎么样的呢

不用我再说了吧 如果学到现在连这个还不明白 那真的是惨了

现在让我们来继续上面的实验 把 543210 的字形码放入上面的查表程序中 即 DB 后面

如果要显示 012345 我们的程序又该如何修改呢 自己想一下

三 本课总结

这一课主要讨论数码管的静态显示原理及编程方法 在实际的应用中远比这些要复杂的多 不过

在我们的上册课程中 目的是为了让大家尽快的进入到 单片机 的应用中来 所以我这里只能讲这么多

如果您想学习更多的知识 只有继续学习课程的下册部分 当然如果您现在就要用到这方面的内容 我 可以协助您开发和设计

四 第 23 课习题

1
什么是 LED 数码管的共阳接法
它与共阴接法有什么不同

2
深入了解 74LS164 的工作原理




3
了解 74LS165 的作用和功能
























 

93

---------------- 

 

第二十四课 数码管接口与编程 二




上一课讲解了数码管的静态显示方法 这一课专门来讨论数码管的动态显示方法

一 LED 数码显示器的动态显示方法

由于静态显示占用的 I/O 口线较多 CPU 的开销很大 所以为了节省 单片机 的 I/O 口线 常采用 动态扫描方式来作为 LED 数码管的接口电路 在实际的工程应用中 它是使用最为广泛的一种显示方式

其接口电路是把所有显示器的 8 个笔划段 h-a 同名端连在一起 而每一个显示器的公共极 COM 端与各自 独立的 I/O 口连接 当 CPU 向字段输出口送出字形码时 所有显示器接收到相同的字形码 但究竟是那 个显示器亮 则取决于 COM 端 而这一端是由另外的 I/O 口控制的 所以我们就可以自行决定何时显示 哪一位了 而所谓动态扫描就是指我们采用分时的方法 一位一位地轮流控制各个显示器的 COM 端 使 各个显示器每隔一段时间点亮一次

在轮流点亮的扫描过程中 每位显示器的点亮时间是极为短暂的约 1ms 左右由于人的视觉 暂留现象及发光二极管的余辉效应 尽管实际上各位显示器并非同时点亮 但只要扫描的速度足够快

给人的印象就是一组稳定的显示数据 不会有闪烁感

在我们实验板的电路图中 我们把 89C52 的 P2 口作为位选端即同名端 abcdefgh并联起来

而把它们的片选端分别与 P3.5 和 P3.6 连接 图中为了增加 P3.5 和 P3.6 的驱动能力采用了一个三极管

这样由 P3.5 和 P3.6 控制对应数码管的亮或灭 只要给 P2.0 送入不同的字形码 就能显示不同的数了

下面的这个程序 就是用我们实验板上的两个数码管来显示 0 和 1电路的连接方法请看后面的 实验板电路图

FIRST EQU P3.6 ;第一位数码管的位控制 SECOND EQU P3.5 ;第二位数码管的位控制 DISPBUFF EQU 5AH ;显示缓冲区为 5AH

ORG 0000H ; AJMP START ; ORG 30H ;

START: MOV  SP,#5FH ;设置堆栈

MOV
P0,#0FFH
;


MOV
P1,#0FFH
;


MOV
P2,#0FFH
;初始化所有显示器
LED 灭

MOV
DISPBUFF,#0
;第一位显示 0


MOV
DISPBUFF+1,#1
;第二位显示 1




LOOP:LCALL DISP ;调用显示程序

AJMP LOOP ;主程序到此结束



DISP:PUSH ACC ;ACC 入栈

PUSH PSW ;PSW 入栈

MOV  A,DISPBUFF ;取第一个待显示数

MOV  DPTR,#DISPTAB ;字形表首地址

MOV C A,@A+DPTR ;取数字 0 的字形码

MOV  P2,A ;将字形码送 P2 口

SETB FIRST ;打开第一位显示器位选端

LCALL DELAY ;延时 1 毫秒

CLR FIRST ;关闭第一位显示器开始准备第二位的数据

 

94


---------------- 

 

MOV  A,DISPBUFF+1 ;取显示缓冲区的第二位

MOV  DPTR,#DISPTAB ;第二个字形码地址

MOV C A,@A+DPTR ;去数字 1 的字形码

MOV  P2,A ;将第二个字形码送 P2 口 SETB SECOND ;打开第二位显示器位选端 LCALL DELAY ;延时 1 毫秒

CLR SECOND ;关闭第二位显示器

POP
PSW
;

POP
ACC
;

RET

;



DELAY:PUSH PSW ;

SETB RS0 ;  MOV  R7,#50 ; D1:MOV R6,#10 ; D2:DJNZ R6,$ ; DJNZ R7,D1 ;

POP
PSW
;

RET

;


DISPTAB:DB 0EEH 28H 0CDH 6DH 2BH 67H 0E7H 2CH 0EFH 2FH

END

从上面的例子中可以看出 动态扫描显示必须由 CPU 不断地调用显示程序 才能保证持续不断的 显示 上面的这个程序虽然可以实现数字的显示 但过于简单了 我们学到现在也应该做点复杂一些的 实验 比如让两个 LED 从 0 显示到 99 不断的循环 这可是很经典的程序 几乎所有用数码管显示的 系统都会把它作为初始化的显示程序 看下面的实验程序

a_bit equ 20h ;个位数存放处 b_bit equ 21h ;十位数存放处 temp equ 22h ;计数器寄存器 star:  MOV  temp,#0 ;初始化计数器 stlop: acall display

inc temp  MOV  a,temp

cjne a,#100,next ;=100 重来

上一页  [1] [2] [3] [4]  下一页


本文关键字:工作原理  键盘  51单片机单片机-工控设备 - 51单片机