微机原理与接口技术_CH9.2.ppt_第1页
微机原理与接口技术_CH9.2.ppt_第2页
微机原理与接口技术_CH9.2.ppt_第3页
微机原理与接口技术_CH9.2.ppt_第4页
微机原理与接口技术_CH9.2.ppt_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

05 31 微机原理与接口技术 第二十一讲 05 31 2 第九章可编程外围接口芯片8255A及其应用 9 18255工作原理结构和功能控制字工作方式和C口状态字9 28255的应用举例基本输入输出应用举例键盘接口七段LED显示器及接口电路 自学 8255A在PC XT机中的应用 自学 内容提要 05 31 3 基本输入输出应用举例 在工业控制等实际应用中 经常需要检测某些开关量的状态 例如 在某一系统中 有8个开关K7 K0 要求不断检测它们的通断状态 并随时在发光二极管LED7 LED0上显示出来 开关断开 相应的LED点亮 开关合上 LED熄灭 我们选用8086CPU 8255A和74LS138译码器等芯片 构成如图所示的硬件电路 来实现上述功能 10 28255A的应用举例 05 31 4 10 28255A的应用举例 基本输入输出 74LS138 05 31 5 基本输入输出应用举例 10 28255A的应用举例 基本输入输出 05 31 6 基本输入输出应用举例 确定方式选择控制字 A口工作于方式0输入 B口为方式0输出 C口未用 控制字中与C口对应的位可以被置为0 写入控制端口F6H的控制字为 10010000B 按键扫描及其显示 可将A口的开关状态读入寄存器AL 若开关合上 AL中的相应位为0 断开则为1 当把AL中的内容从B口输出时 相应于0的位上的LED熄灭 表示对应的开关是合上的 否则LED点亮 指示开关断开 10 28255A的应用举例 基本输入输出 05 31 7 基本输入输出应用举例 程序 MOVDX 0F6H 控制寄存器MOVAL 10010000B 控制字OUTDX AL 写入控制字TEST IT MOVDX 0F0H 指向A口INAL DX 从A口读入开关状态MOVDX 0F2H 指向B口OUTDX AL B口控制LED 指示开关状态JMPTEST IT 循环检测 10 28255A的应用举例 基本输入输出 05 31 8 键盘接口 从原理上讲 键盘可以来用下图那样的结构 不过 这会带来一个很大的缺点 那就是每个键要用一条线 每8个开关还要占用一个8位的并行端口 一个具有64个键的键盘需要64条连线 与8个8位的并行端口相连 所以 这种结构只能用在仅有几个键的小键盘中 对于大多数的键盘 按键被排成行和列的矩阵 下面以机械式开关构成的16个键的键盘为例 来讨论键盘接口的工作原理 这种原理对采用其它类型的开关的键盘也是适用的 键盘是最常用的外设 可以用来制造键盘的按键开关有好多种 最常用的有机械式 薄膜式 电容式和霍尔效应式等4种 10 28255A的应用举例 基本输入输出 05 31 9 键盘接口 10 28255A的应用举例 05 31 10 按下键 9 时 PB口 11011011B DBH 10 28255A的应用举例 键盘接口 05 31 11 在无键压下时 由于接到 5V上的上拉电阻的作用 列线被置成高电平 压下某一键后 该键所在的行线和列线接通 这时 如果向被压下键所在的行线上输出一个低电平信号 则对应的列线也呈现低电平 当从B口读取列线信号时 便能检测到该列线上的低电乎 读取B口的状态时 还能读到行线上的低电平信号 这样 根据读入的行和列状态中低电平的位置 便能确定哪个键被压下了 分析 10 28255A的应用举例 键盘接口 05 31 12 键扫描过程 检测是否所有键都松开了 若没有则反复检测 当所有键都松开了 再检测是否有键压下 若无键压下则反复检测 若有键压下 要消除键抖动 确认有键压下 对压下的键进行编码 将该键的行列信号转换成16进制码 由此确定哪个键被压下了 如出现多键重按的情况 只有在其它键均释放后 仅剩一个键闭合时 才把此键当作本次压下的键 该键释放后 再回到 10 28255A的应用举例 键盘接口 05 31 13 先向所有行线输出低电平 再读入各列线值 只有当所有的列线均为高电平 表示以前压下的键都已释放了 检测矩阵中是否有键压下的一种简单方法 自输出口A向所有行线输出0电平 再通过B口的低4位读取列值 若其中有0值 便是有键压下了 上一次压下的键是否已松开 当检测到有键压下后 必须消除键抖动 Debance 常用方法是在检测到有键压下后 延长一定时间 通常为20ms 再检查该键是否仍被压着 若是 才认定该键确实被按下了 而不是干扰 消除键抖动 10 28255A的应用举例 键盘接口 05 31 14 获取行列信息 先从A口输出一个低电平到一行线上 再从B口读入各列的值 若没有一列为低电平 说明压下的键不在此行 于是 再向下一行输出一个低电平 再检测各列线上是否有低电平 依次对每一行重复这个过程 直至查到某一列线上出现低电平为止 被置成低电平的行和读到低电平的列 便是被压下键所在的行列值 确定被压下键所在的行列号 根据键所在的行号 0 3 和列号 0 3 后 就能得到该键的扫描码 例如 对于数字0 它位于3行 3列 压下 0 键时 从B口可读得D7位和D3位为0 其余位为1 所以数字0的编码为仍01110111B 即77H 对于数字6 处于2行 1列 压下 6 键时 D6位和D1位为0 其余位为1 所以数字6的编码为10111101B BDH 类似地 其余各键的编码也可一一求得 将这些编码值列成表 放在数据段中 用查表程序来查对 便能确定压下的是什么键 获取键的扫描码 10 28255A的应用举例 键盘接口 05 31 15 下面是键盘检测 去抖动 键值编码和确定键名的汇编语言程序 程序运行后 若返回值AH 0 表示已读到有效的键值 并在AL中存有0 F键的16进制代码 若AH 1 则表示出错 端口地址PORT AEQU0FF9H 8255A口地址PORT BEQU0FFBH 8255B口地址PORT CTLEQU0FFFH 8255控制口地址 数据段 键盘扫描码表DATASEGMENT 01234567TABLEDB77H 7BH 7DH 7EH 0B7H 0BBH 0BDH 0BEH 89ABCDEFDB0D7H 0DBH 0DDH 0DEH 0E7H 0EBH 0EDH 0EEHDATAENDS 10 28255A的应用举例 键盘接口 05 31 16 堆栈段STACKSEGMENTSTACKDW50DUP 0 TOP STACKLABELWORDSTACKENDS 代码段CODESEGMENTASSUMECS CODE DS DATA SS STACKSTART MOVAX STACKMOVSS AXLEASP TOP STACKMOVAX DATAMOVDS AX 10 28255A的应用举例 键盘接口 05 31 17 初始化8255A 方式0 A口作输出 B口和C口为输入MOVDX PORT CTL 指向控制口MOVAL 10001011B 控制字OUTDX AL 写入控制字 向所有行送0MOVDX PORT A A口MOVAL 00HOUTDX AL 向A口各位输出0 读列 查看是否所有键均松开MOVDX PORT BWAIT OPEN INAL DX 键盘状态读入B口ANDAL 0FH 只查低4位 列值 CMPAL 0FH 是否都为1 各键都松开 JNEWAIT OPEN 否 继续查 10 28255A的应用举例 键盘接口 05 31 18 各键均已松开 再查列是否有0 即是否有键压下WAIT PRES INAL DX 键盘状态读入B口ANDAL 0FH 只查低4位 列值 CMPAL 0FH 是否有键按下 JEWAIT PRES 无 等待 有键压下 延时20ms 消抖动MOVCX 16EAHDELAY LOOPDELAY 再查列 看键是否仍被压着INAL DX 键盘状态读入B口ANDAL 0FH 只查低4位 列值 CMPAL 0FH 是否有键按下 JEWAIT PRES 已松开 转出等待压键 10 28255A的应用举例 键盘接口 05 31 19 键仍被压着 确定哪一个键被按下MOVAL 11111110H 现使D0 0MOVCL AL CL 11111110BNEXT ROW MOVDX PORT A A口OUTDX AL 向一行输出低电平MOVDX PORT B B口INAL DX 读入B口状态ANDAL 0FH 只截取列值CMPAL 0FH 是否均为1JNEENCODE 否 表示有键压下 转去编码ROLCL 01 均为1 使下行输出0MOVAL CLJMPNEXT ROW 查看下行 10 28255A的应用举例 键盘接口 05 31 20 已找到有一行为低电平 对压键的行列值编码ENCODE MOVBX 000FH 建立地址指针 先指向F键对应的地址INAL DX 从B口读入行列号NEXT TRY CMPAL TABLE BX 行列值与表中查的相等码 JEDONE 相等 转出DECBX 不等 指向下一个 键值较小者 地址JNSNEXT TRY 若地址尚未减为负值 继续查MOVAH 01H 若减为负值 置出错码01 AH中JMPEXIT 退出DONE MOVAL BL BL中存在有键的16进制代码MOVAH 00 AH 0 读到有效键值EXIT HLTCODE ENDSEND 10 28255A的应用举例 键盘接口 05 31 21 七段LED显示器及接口电路 微型机系统中采用CRT显示器作为显示设备 它显示计算机运行时生成的各种状态信息和向用户发出的提示 重现用户向计算机输入的数据信息 并向用户报告计算机执行程序后生成的结果数据 包括数值 表格 图形和图象等 10 28255A的应用举例 05 31 22 在专用的微机控制系统 测量系统及智能化仪器仪表中 为缩小体积和降低成本 往往采用简易的数字显示装置来指示系统的状态和报告运行的结果 七段LED显示器 LightEmittingDisplay 显示16进制数字液晶显示器 LiquidCrystalDisplay LCD 显示字符和图形 常用显示器 10 28255A的应用举例 七段LED显示器及接口电路 05 31 23 发光二极管电路 输出设备 10 28255A的应用举例 七段LED显示器及接口电路 05 31 24 七段LED显示器的工作原理和接口电路 10 28255A的应用举例 七段LED显示器及接口电路 05 31 25 七段LED显示器的工作原理和接口电路 数字 5 10 28255A的应用举例 七段LED显示器及接口电路 05 31 26 共阳极结构中 各LED二极管的阳极被连在一起 使用时要将它与 5V相连 而把各段的阴极连到器件的相应引脚上 当要点亮某一段时 只要将相应的引脚 阴极 接低电平 其余段接高电平即可 共阴极结构的LED显示器 阴极连在一起后接地 各阳极段接到器件的引脚上 要想点亮某一段时 只要将相应引脚接高电平 LED显示器的一个段发光时 通过该段的平均电流约为10mA 20mA 计算机输出的TTL电平信号不能直接提供这么大的电流 所以必须用驱动电路对TTL电平的控制信号进行驱动 驱动器可以用三极管设计 也可用现成的集成电路驱动器 如DM7404等 10 28255A的应用举例 七段LED显示器及接口电路 05 31 27 软件译码法 10 28255A的应用举例 七段LED显示器及接口电路 05 31 28 软件译码法 由图可见 CPU送来的二进制数字代码从8255A的A口输出 并经反相驱动器驱动后与LED相连 若要显示数字0 应使g段熄灭 其余段均点亮 为此 可编程使PA6输出高电平 经反相后输出低平 其余位输出低电平 经反相后输出高电平 即数字0编码为01000000B 40H 其中PA7未派用处 我们也将它置为0 将数字0 F 也可以是0 9 所对应的七段代码组成一个表 利用XLAT指令进行查表 就可求得各数字对应的七段代码值 把要显示的数字的七段代码从8255A输出 就可点亮相应的段 显示这个数字 设16进制数字的七段代码表的首地址为TABLE 下面的程序段在LED显示器上显示16进制数中的一位数字 程序中为5 10 28255A的应用举例 七段LED显示器及接口电路 05 31 29 软件译码法 PORT AEQU0F0H A口地址COUNTEQU05H 要显示的数字 16进制数字的七段代码表DATASEGMENT 01234567TABLEDB40H 79H 24H 30H 19H 12H 02H 78H 89AbCdEFDB00H 18H 08H 03H 46H 21H 06H 0EHDATAENDS 10 28255A的应用举例 七段LED显示器及接口电路 05 31 30 16进制数字到七段码的转换程序CODESEGMENT DISPY MOVBX OFFSETTABLE 七段代码表首地址MOVAL COUNTXLAT 将被转换的七段代码 ALMOVDX PORT AOUTDX AL 将七段代码值从A口输出 点亮相应数字 CODEENDSEND 软件译码法 10 28255A的应用举例 七段LED显示器及接口电路 05 31 31 利用专用接口芯片驱动七段LED显示器 对于共阳极LED显示器 可利用带驱动电路的专用接口芯片7447对BCD码进行译码 用7447驱动单个七段LED显示器的电路如图所示 这种电路只能对BCD码数字0 9进行译码 不能用于显示16进制数字A F 显示单个数字 10 28255A的应用举例 七段LED显示器及接口电路 05 31 32 7447有4个BCD码输入端A B C和D 其中D为最高有效位 A为最低有效位 它们分别与输出端口中的4位相连 7447的7个输出引脚a g直接与LED的相应引脚相连 每个段中都串接一个限流电阻 其阻值为150 显示单个数字 利用专用接口芯片驱动七段LED显示器 10 28255A的应用举例 七段LED显示器及接口电路 05 31 33 电阻是这样来计算的 设发光二极管点燃时 流过的电流为20mA LED上的压降为1 5v 7447输出的低电平为0 2V 则加在电阻上的压降应为 5V 1 5V 0 2V 3 3V所以限流电阻的阻值应为 3 3V 20mA 168 当电阻取150 时 电流值不会超过LED的最大允许值 当从A B C和D端输入一个BCD码时 就能在LED上显示相应的数字 显示单个数字 利用专用接口芯片驱动七段LED显示器 10 28255A的应用举例 七段LED显示器及接口电路 05 31 34 显示多个数字 05 31 35 显示多个数字 8255A的A口和B口都作为输出口 CPU输出的BCD数码 经B口送到7447的4个输入端 7447的7个输出引脚并行地接到7个LED显示器的各段输入端 也称为段总线 同名端都连在一起 每一位共阳极LED

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论