单片机第10章 外部设备扩展

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2、当P1.0处按钮被按下后, 对应位变成0,P1=0xFE。 3、如果有多个按钮被同时 按下,对应位变成0, P1=0xF6。
1 0 1 1 1 0 1 1 1 1
(2)矩阵式键盘 矩阵式(也称行列式)键盘 用于按键数目较多的场合, 由行线和列线组成,按键位 于行、列的交叉点上。如图 10-9所示,一个4x4的行、 列结构可以构成一个16个 按键键盘。在按键数目较多 的场合,要节省较多的I/O 口线。
图10-9 矩阵式键盘接口
矩阵键盘的读取有两种常见的方法:扫描法和线反转法。两 者的硬件电路有微小差别,请注意区别。
① 扫描法读取步骤,以图10-9为 例。
第1步,识别键盘有无键按下。先 把所有列线均置为0,然后检查各 行线电平是否都为高,如果不全 为高,说明有键按下,否则无键 被按下。 第2步,识别出哪个按键被按下。 采用逐列扫描法,在某一时刻只 让1条列线处于低电平,其余所有 列线处于高电平。

在多位LED显示时,为简化硬件电路,通常将所有显示位 的段码线的相应段并联在一起,由一个8位I/O口控制,而 各位的共阳极或共阴极分别由相应的I/O线控制,形成各 位的分时选通。

虽然这些字符是在不同时刻出现,而在同一时刻,只有一 位显示,其他各位熄灭,由于余辉和人眼的“视觉暂留” 作用,只要每位显示间隔足够短,则可以造成“多位同时 亮”的假象,达到同时显点亮对应的字段,就能显示出相应 的数字。这种表格也叫做七段数码管的“字码表”。

除“8”字型的LED数码管外,市面上还有“±1”型、 “米”字型和“点阵”型LED显示器。
LED数码显示器件有两种常用的驱动方法:静态显示方式和 动态显示方式。 1.LED静态显示方式 无论多少位LED数码管,同时处于显示状态。
工作过程分析:当没 按键按下时,读取P1 口,返回的都是0xFF, 当有一个,或者多个 按钮按下后,P1口对 应的位将变为低电平。 优点:电路简单,各 条检测线独立,识别 按下按键的软件编写 简单。
图10-8 独立式键盘接口电路

【读取过程演示】
1、在没有按钮按下时,由 于上拉电阻的作用, P1=0xFF。
【读取过程演示】
第一步,设置 按下按钮 第二步,设置 由于按钮 综合判断是按钮 6一直被按着 后, P1=0x0F P1=0xF0 P1 6 变成0x0D 说明第 所以 P13 变成 列有按键按下 0xD0 说明第2行有按键被按下
1 0 1 0 1 0 1 0 0 1 1 0 0 1 0 1
10.2.3 键盘的工作方式 单片机在忙于其他各项工作任务时,如何兼顾键盘的输入, 这取决于键盘的工作方式。工作方式选取原则是,既要保证 及时响应按键操作,又不过多占用单片机工作时间。键盘工 作方式有3种,即编程扫描、定时扫描和中断扫描。

按键抖动
按键在松开时一瞬间的波形,由低电平跳变至高电平
将上升沿放大后发现“毛刺”信号 容易导致误触发和错误计数

去抖动算法
If(KEY==0)//检测到有按钮被按下 { delay(10);//延时一段时间 if(KEY==0)//按钮是不是依然被按着 {…用户代码…;} }
键盘可分为两类:非编码键盘和编码键盘。


LED(Light Emitting Diode)发光二极管缩写。LED数码管是 由发光二极管构成的。常见的LED数码管为“8”字型的,共计 8段。每一段对应一个发光二极管。有共阳极和共阴极两种。

为了使数码管显示不同的符号或数字,要把某些段发光二极管 点亮,就要为LED数码管提供段码(字型码)。 LED数码管共计8段。正好是一个字节。习惯上是以“a”段对 应段码字节的最低位。各段与字节中各位对应关系如表10-1所 示。
没有按键按下 第 3列的按钮被按下
② 线反转法读取步骤,以图10-10为例
第 一 步 , P1.0 ~ P1.3 输 出全 为 “ 0 ”,然后,读入 P1.4 ~ P1.7 线 的 状 态 , 结 果 P1.4=0 , 而 P1.5 ~ P1.7 均为 1 ,因此,第 1 行出现电平的变化,说明第 1 行 有键按下; 第二步,让P1.4~P1.7输出全为 “ 0 ”,然后,读入 P1.0 ~ P1.3 位 , 结 果 P1.0=0 , 而 P1.1 ~ P1.3 均为 1 ,因此第 4 列出现电 平的变化,说明第4 列有键按下。 图10-10 采用线反转法的矩阵式键盘
10.2.1 键盘输入应解决的问题 3.按键的识别

有系统有不止一个按键时,如何判断哪个按键被按下了, 以及用户是否放开了按键(只按了一下按键,还是按着不 放手)。
4.如何消除按键的抖动 按键去抖动的方法有两种:

软件延时法。 采用专用的键盘/显示器接口芯片,这类芯片中都有自动 去抖动的硬件电路。
【程序举例与演示】
#include <reg51.h> unsigned char DisTable[16]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x 86,0x8e}; void main (void) { unsigned char temp=0; while(1) { P0=DisTable[temp]; temp++; if(temp==15) temp=0; } }

静态显示方式接口编程容易,但是占用口线较多。若用 I/O口线接口,要占用4个8位I/O口。因此在显示位数较多 的情况下,所需的电流比较大,对电源的要求也就随之增
高,这时一般都采用动态显示方式。
2.LED动态显示方式 无论在任何时刻只有一个LED数码管处于显示状态,即单片 机采用“扫描”方式控制各个数码管轮流显示。
图10-9 矩阵式键盘接口
【读取过程演示】
读 比如按下 第一步:设置 第三步:设置 第四步:设置 第二步:设置 P1口,判断低四位的状态 6号按钮 P1为0x3F 0xEF 0xBF 0xDF P1.0P1.1 此时 ,P1.1 为0 , ,判断为第 P1.2,P1.3 2均为 行 1 1 1 0 1 1 0 1 0 1 0 1 1 0
在键盘控制方面,该芯片内有64键键盘控制器,可实现8×8矩阵 编码键盘的扫描,并内置自动去抖动电路,可提供按键中断与按 键释放标志位等功能。与单片机的接口,可选用1线串行接口或高 速4线串行接口,片内有上电复位电路,同时可提供高电平有效复 位和低电平有效复位两种输出,同时片内提供看门狗WatchDog。
sbit A1=P2^0; sbit A2=P2^1; unsigned char DisTable[16]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x8 2,0xf8,0x80,0x90,0x88,0x83,0xc6,0 xa1,0x86,0x8e};
void main (void) { unsigned char temp=0; A1=0; A2=0;
早期的较为流行的键盘/显示器芯片8279,目前流行的键盘/显示 器接口芯片均采用串行通信方式,占用口线少。常见的芯片有: 周立功公司的ZLG7289A、ZLG7290B、MAX7219、南京沁恒公 司的CH451、HD7279和BC7281等。
专用接口芯片CH451实现的键盘/显示器控制 1. 基本功能与引脚介绍 内部集成数码管显示驱动和键盘扫描控制的专用键盘/显示器接口 芯片。内置RC振荡电路,可以直接动态驱动8位LED数码管(或者 64只LED),可实现显示数字左移、右移、左循环、右循环、各位 显示数字独立闪烁等功能。内置大电流驱动级,段电流不小于 30mA,字电流不小于160mA,并有16级亮度控制功能;
【程序举例与演示】
#include <reg51.h> while(1) { P0=DisTable[temp]; A1=1;//数码管1点亮 temp++; A1=0;//数码管1熄灭 P0=DisTable[temp]; A2=1;//数码管2点亮 temp++; A2=0;//数码管2熄灭 if(temp==2) temp=0; } }

动态显示的优点是硬件电路简单,显示器越多,优势越明 显。缺点是显示亮度不如静态显示的亮度高。如果“扫描” 速率较低,会出现闪烁现象。
10.2.1 键盘输入应解决的问题 1.键盘的任务 (1) 判别是否有键按下?若有,进入下一步工作。 (2)识别哪一个键被按下,并求出相应的键值。 (3)根据键值,找到相应键值的处理程序入口。 2.键盘输入的特点 常见键盘:触摸式键盘、薄膜键盘和按键式键盘,最常用 的是按键式键盘。

我们常用的直接把按钮和单片机I/O连接在一起的键盘属 于非编码键盘,利用专用控制芯片(后面要介绍到的 CH514)的键盘属于编码键盘。 特点是:一键一线,各键相互独立,每个键各接一条I/O 口线,通过检测I/O输入线的电平状态,可容易地判断哪 个按键被按下,如图10-8所示。
(1)独立式键盘


直插封装的 CH451
贴片封装的 CH451

教材P236: 习题10.2,习题10.3,习题10.4,习题10.6
非编码矩阵式键盘所完成的工作分为3个层次。 (1)单片机如何来监视键盘的输入 体现在键盘的工作方式上就是:①编程扫描;②定时扫描; ③中断扫描。 (2)确定按下键的键号 体现在按键的识别方法上就是:①扫描法;②线反转法。
(3)根据按下键的键号,实现按键的功能,即跳向对应的 键处理程序。
常见的键盘显示实现方式: 1. 利用AT89S51串行口实现的键盘/显示器接口 2. 各种专用的键盘/显示器接口芯片 用专用芯片,可省去编写键盘/显示器动态扫描程序以及键盘去抖 动程序编写的繁琐工作。目前各种专用接口芯片种类繁多,各有 特点,总体趋势是并行接口芯片逐渐退出,串行接口芯片越来越 多的得到应用。
1.编程扫描方式 while(1) { KeyNumber=ReadKey();//在while循环中不停读取按键状态 } 2.定时扫描方式 void timer0_int() interrupt 1 { KeyNumber=ReadKey();//在定时器中断函数中读取按键状态 } 3.中断扫描方式 void EXT0_int() interrupt 0 { KeyNumber=ReadKey();//在外中断函数中读取按键状态 }
相关文档
最新文档