单片机原理和开发应用 第十一讲 学习与实验(七)

🏠 首页 《无线电》杂志 1991年 🔗 第6期 🔗 第26页 分类:无线电技术自学经验交流 🔗 周振安 🔗

键盘和LED显示器是单片机应用系统中构成人机对话的一种基本方式。本讲我们将以此内容为核心,系统介绍键盘和LED显示器的硬件扩展以及管理软件的编写,引导读者由单元实验向系统综合实验过渡,使读者逐步学会自己设计一个单片机应用系统。

矩阵式键盘结构原理

键盘通常由若干按钮式开关排列成行、列矩阵结构,开关的一端接行线,另一端接列线,见图1。单片机工作时,先由输出口向各列送出全0,使各列均为低电平,然后由输入口读入各行的状态,若无键按下,则读入的各行必然为全部高电平;若输入口中有一位为低电平,则说明有键按下。

图1
图1 🔍原图 (812×536)

如果逐列输出低电平(即扫描键盘),并读入行值,找出所按键的所在行列位置,就能准确地确定出所按键,单片机根据键号进行响应,从而完成某键的功能。

数码管显示原理

LED显示器采用七段数码管,七段数码管是由7(或8,加点)个发光二极管按一定规律排列构成的(如图2所示),这些发光二极管的正极(共阳)或负极(共阴)连在一起形成公共端。本实验采用共阴数码管,当公共端为低时,所有接高电平的发光二极管(即相应的段)均亮,从而形成相应的数码,图2绘出了0~9十个数的字型及其相应的代码,每一个代码实际上是一个8位二进制数,由低到高顺序为a、b、c、d、e、f、g,最高位h是小数点位。

图2
图2 🔍原图 (863×451)

在编写显示程序时,常将这些需要显示的字符代码排列成一个表,显示前先进行查表变换。

实验电路介绍

图3为16键键盘、6位LED数码管显示器与单片机连接的实验电路。由于键盘的行、列各需一个I/O口,显示器也至少还需一个I/O口,因而该实验电路至少需要三个I/O口,即两个基本输出口和一个基本输入口。这几个I/O口都可以用锁存器(如74LS373)扩展而成(见TD-Ⅱ型学习机的键盘、显示器电路)。本实验中,为硬件操作方便,用8155的PA、PB、PC三个口来实现键盘扫描和显示任务。

图3
图3 🔍原图 (1718×1300)

图3中,8155的PA口作为扫描输出口,地址为DF01H,一方面扫描键盘的各列,同时扫描选通LED显示器的各位:PB口为数据显示输出口,地址为DF2H;PC口为键盘输入口,地址为DF03H。74LS07和MC1413为段、位显示驱动器,以提高输出端的负载能力。

接线前,先将8155的各条引线擦磨干净,由于本实验连线较多,接线时除需正确无误外,还要连线可靠,不能虚焊。

加电时先不要插入各芯片,用万用表压档检查各插座引脚的电压是否正确,特别注意VCC和E引脚电平。待一切正常后再断电插入芯片,加电并输入程序指令。

如果读者需要进一步扩展显示器位数及键盘的按键数目,在硬件上是很容易修改的,例如PA口8根线的剩余两位(6PA、7PA)可使显示器增加两位,也可以使键盘增加两位。PC口6根线的剩余两位(4PC、5PC)可以使键盘增加两行。如果在PA口接入一个译码器,则扩展的范围就更大了。具体细节不作叙述,有兴趣的读者可以自己思考。

键盘监控程序的编写要点

1)利用软件延时清除键抖动。每当CPU查询到有键按下时,延时10ms,等稳定接触后再逐列扫描,查找按键的行、列位置,如果没有找到,则说明有键按下是由于干扰引起,CPU不作任何响应;如果找到键的位置,则等待按键稳定释放后再进行键处理。

2)键号的确定。图3中4×4键盘的16个键分别以用0~F赋以键号,扫描键盘时,设置一个列计数器R5,一个行计数器R2,键号=行号(即R2中内容)×4+列号(R5)。例如最后一行(第3行),最后一列(第3列)的键号等于3×4+3=15,即F键。零行零列的键号为0。(本讲未完待续)(周振安)