(带图纸和文档)手把手教你学单片机pdf资料单片机资料
收藏
资源目录
压缩包内文档预览:
编号:21243231
类型:共享资源
大小:10.21MB
格式:ZIP
上传时间:2019-07-31
上传人:QQ24****1780
认证信息
个人认证
王**(实名认证)
浙江
IP属地:浙江
30
积分
- 关 键 词:
-
图纸
以及
文档
手把手
单片机
pdf
资料
- 资源描述:
-
(带图纸和文档)手把手教你学单片机pdf资料单片机资料,图纸,以及,文档,手把手,单片机,pdf,资料
- 内容简介:
-
实用单片机讲座: 口周兴华 手把手教你学单片机 ( 十五 ) L E D数码显示器接 口技术 在单 片机系统中 。经 常用 L E D ( 发光二极管 ) 数码显示器来显示单片 机系统的工作状态、 运算结果等各种信 息。 L E D数码显示器是单片机与人对话 的一种重要输出设备。 图 1 是 L E D数码显 示器的构造 。 它实际上是由8个发光二极管构成。 其 中7个发光二极管排列成 “ 8 ”字形的 笔画段 。另一个发光二极管为圆点形 状 。安装在显示器 的右下角作为小数 点使用。通过发光 二极管亮暗的不同 组合。从而可显示 出0 - 9的阿拉伯数 字符号以及其它能 由这些笔画段构成的各种字符。 L E D数码显示器的内部结构共有 两种不同形式。一种是共阳极显示器 。 其内部电路见图 2 。 即8个发光二极管 的正极全部连接在一起组成公共端 。 8 个发光二极管的负极则各自独立引出。 另一种是共阴极显示器 。 其内部电路见 图 3 。 即 8个发光二极管的负极全部连 接在一起组成公共端, 8个发光二极管 的正极则各自独立引出。 L E D数码显示器中的发光二极管 共有两种连接方法: 共阳极接法。把发光二极管的阳 极连在一起。使用时公共阳极接 + 5 V , 这时阴极接低电平的段发光二极管就 导通点亮。 而接高电平的则不点亮。 共阴极接法。把发光二极管的阴 极连在一起。使用时公共阴极接地。 这 时阳极接高电平的段发光二极管就导 通点亮。 而接低电平的则不点亮。 驱动电路中的限流电阻 R。通常 根据 L E D的工作电流计算而得到。 R = ( V c c V le d) l i e d 。式中。 V c c为电源 电压 ( + 5 V) 。 V l e d为 L E D压降( 一般 取 2 V左右 ) 。 l i e d为工作电流 ( 可取 1 - 2 0 mA) 。R通常取数百欧姆。 我们实验中使用的 8 9 C 5 1单片 机,其 P 0 - P 3 13具有 2 0 mA的灌电流 输出能力。因此可直接驱动共阳极的 L E D数码显 示器 。 为了显示数字或符号。要为 L E D 数码显示器提供代码 。 因为这些代码是 为显示字形的。 因此称之为字形代码。 七段发光二极管。 再加上一个小数 点位。 共计 8 位代码。 由一个数据字节提 供。各数据位的对应关系如下所示: L E D数码显示器的字形 ( 段 ) 码 表如下所示: 在单片机应用系统中。 L E D数码 显示器的显示方法有两种 : 静态显示法 和动态扫描显示法。 所谓静态显示,就是每一个显示 器各笔画段都要独 占具有锁存功能的 输出 13线 , C P U把欲显示的字形代码 送到输出13上, 就可以使显示器显示出 所需的数字或符号。常扫描显示器。 所 以节约了CP U的工作时间。 但静态显示 也有其缺点。主要是占用的 I O 13线较 多, 硬件成本也较高。 所以静态显示法常 用在显示器数目较少的应用系统中。图 I 16 电 子 _ 作 2晰 年 簟 3 期 维普资讯 4为静态显示示意图。 图4中由 7 4 L S 2 7 3( 8 D锁存器 】 作扩展输出13,输出控制信号由 P 2 0 和 WR合成, 当二者同时为 0时。 或门 输 出 为 0,将 P 0 13数 据 锁 存 到 7 4 L S 2 7 3中, 口地址为F E E E H 。 输出口 线的低 4位和高 4位分别接 B CD一 7 段显示译码驱动器 7 4 L S 4 7 ,它们驱动 两位数码管作静态的连续显示。 动态扫描显示是单片机应用系统 中最常用的显示方式之一。它是把所有 显示器的 8个笔画段 a h的各同段名 端互相并接在一起,并把它们接到字段 输出口上。为了防止各个显示器同时显 示相同的数字,各个显示器的公共端 CO M还要受到另一组信号控制,即把 它们接到位输出口上。这样。对于一组 L E D数码显示器需要由两组信号来控 制: 一组是字段输出口输出的字形代码。 用来控制显示的字形, 称为段码: 另一组 是位输出口输出的控制信号,用来选择 第几 位显示器工作, 称为位码。 在这两组 信号的控制下,可以一位一位地轮流点 亮各个显示器显示各自的数码,以实现 动态扫描显示。在轮流点亮一遍的过程 中,每位显示器点亮的时间则是极为短 暂的( 1 - 5 m S) 。由于 L E D具有余辉特 性以及人眼视觉的惰性,尽管各位显示 器实际上是分时断续地显示,但只要适 当选取扫描频率,给人眼的视觉印象就 会是在连续稳定地显示,并不察觉有闪 烁现象。动态扫描显示由于各个数码管 的字段线是并联使用的, 因而大大简化 了硬件线路。图5为动态显示示意图。 在实际的单片机系统中 , L E D显 示程序都是作为一个子程序供监控程 序调用, 因此各位显示器都扫过一遍之 后, 就返回监控程序。 返回监控程序后, 进行一些其它操作 , 再调用显示扫描程 序。通过这种反复调用来实现 L E D数 码显示器的动态扫描。 动态扫描显示接13电路虽然硬件 MOV A 2 0H S WAP A ANL A柏 F H MOV C A A+ DP TR MOVP1 A ACAL L DE L MOV A 2 0 H I NC A D A A MOV2 0 H A 简单,但在使用时必须反复调用显示子 程序, 若 CP U要进行其它操作。 那么显 示子程序只能插入循环程序中,这往往 束缚了CP U的工作, 降低了 C P U的工 作效率。 另外扫描显示电路中, 显示器数 目也不宜太多, 一般在 1 2个以内。 否则 会使人察觉出显示器在分时轮流显示。 下面在 S 2板做一个静态显示实 验,通电后左边两个数码管静态显示 5 6 , 右边两个数码管则作累加显示。 在我的文档中建立一个文件目录 ( $ 3 0) ,然后建立一个 $ 3 0 u v 2的工 程项 目,最后建立源程序文件 ( $ 3 0 a s m) 。 输入下面的程序: 序号: 1 OR G 0 0 0 0 H 2 U MPMAI N 3 ORG 0 3 0 H 4 MAI N: MOV 2 0 H # 0 0 H 5 MOVA 2 0 H 6 MOV P 3,#9 2 H 7 MOV P 2#8 2 H 8 GOON: CL RC 9 ANLA, # 0 F H 1 0 MOV DP TR # T AB 1 1 MOVC A A+DP T R 1 2 MOVP 0A 2 3 AJ MPGOON 2 4 DEL : MOV R7 # 01 4 H 2 5 DEL 1 : MOV R 6 # OF F H 2 6 DEL 2 : MOV R5 , # 01 F H 2 7 DE L 3 : DJ NZ R 5 DEL 3 2 8 DJ NZ R 6 DEL 2 2 9 DJ NZ R 7, DEL l 3 0 RE T 31 ORG 01 o 0 H 3 2 T AB: DB 0 CO H, 0 F 9H 0 A4H, O BO H, 9 9H, 92 H 8 2 H, 0 F 8 H 3 3 DB 8 0 H 9 0H, 8 8 H 8 3H 0 C6 H 0 A1 H 8 6 H, 0 8 E H 3 4 END 编译通过后,将 $ 3 0文件夹中的 h e x文件烧录到 8 9 C 5 1 芯片中,将芯 片插入到 S 2型数码管试验板上,通电 运行。 可看到左边两个数码管静态显示 5 6 ,右边两个数码管则从 o 0 9 9作累 加显示。 我们对程序进行解释。 序号 1( 程序解释 , 以下同 ) : 程序开 始。 序号 2 : 跳转到 MAI N主程序处。 序号 3 : 主程序 MAI N从地址 0 0 3 0 H开 电子作2 O 蝉 卑 l 曩 他 佰 幅 仃 倡 伯 扣 维普资讯 始。 序号 4 :将立即数 O O H传送给 2 0 H单 元 中。 序号 5 : 将 2 0 H单元中的内容传送给累 加器 A。 序号 6 : 将立即数 9 2 H送 P 3口 使最 左的数码管显示 5 。 序号 7 : 将立即数 8 2 H送 P 2 13, 使左 边第二个数码管显示6 。 序号 8 : 进位位CY置 0 。 序号9: 屏蔽累加器 A中高 4位。 序 号 1 0 :将 数 据 表 格 的 首 地 址 ( 0 1 0 0 H)存入 1 6位数据地址指针 DP T R中。 序号 1 1 : 查表。 序号 1 2 : 将累加器 A中内容传送给 P 0 输出13 点亮 。 个 位数码管。 序号 1 3 :再将 2 0 H单元中的内容传送 给累加器 A 。 序号 1 4 :交换累加器 A中的高、低 4 位。 序号 1 5 : 屏蔽 A中高4位。 序号 1 6 : 查表。 序号 1 7 : 将累加器 A中内容传送给 P 1 输出13 点亮。 十 。 位数码管。 序号 1 8 : 调用延时子程序 便于观察。 序号 1 9 : 2 0 H单元中的内容传送给累 加器 A。 序号 2 0 : 累加器 A内容加 1 。 序号 2 1 : 2 1 0进制调整。 序号 2 2 :累加器 A中的内容传送给 2 0 H单元。 序号 2 3 : 跳转到标号 GOON处继续执 行。 序号 2 4 - 3 0 : 延时子程序。 序号 3 1 : 数据表格的首地址为 0 1 0 0 H 。 序号 3 2 3 3 : 数据表格内容。 序号 3 4 : 程序结束。 可以看出一开始对 P 3 、 P 2口置 数点亮左边两个数码管 ( 显示 5 6) 以 后 CP U不再访 问 P 3 、 P 2口。由于 P 3 、 P 2 13具有锁存作用因此左边两个数 码管被持续点亮 处于静态显示状态。 下面再在 S 2板做慢速扫描动态 显示与快速扫描动态显示的对此实验。 在 S 2板做一个实验 让 P 3 P 0 13的数 码管依次慢速 ( 显示时间为 0 5 S) 显 示 1 2 3 4四个字。 在我的文档中建立一个文件 目录 ( S 3 1) 然后建立一个 S 3 1 u v 2的工 程项 目最后建立源程序文件 ( S 3 1 a s m ) 。 输入下面的程序: 序号: 1 OR G 0 0 0 0 H 2 U MPMAI N 3 OR G 0 3 0H 4 MAI N: MOV P 3 #0 F 9 H 5 ACAL L DE L 0 5 S 6 MOV P 3 , # 0 F F H 7 MOVP 2 #0 A4H 8 ACAL L DE L 0 _5 S 9 MOV P 2 , # 0 FF H 1 0 MOV P1 # 0 BOH 1 1 ACAL L DE L 0 _5 S 1 2 MOV P1 # 0F F H 1 3 MOV P 0# 9 9H 1 4 ACAL L DE L 0 _5S 1 5 MOV P 0# 0F F H 1 6 AJ MPMAI N 1 7 DE L 0 5 S: MOV R5 # 0 4 H 1 8 DE LI : M0V R6 帕 F F H 1 9 DE L 2 : MOV R7 挣D F F H 2 0 DE L 3 : DJ NZ R7 , DEL 3 21 DJ NZ R 6 DE L 2 2 2 DJ NZ R 5, DE Ll 2 3 RE T 2 4 END 编译通过后, 将 S 3 1文件夹中的 h e x文件烧录到 8 9 C5 1芯片中将芯 片插入到 S 2型数码管试验板上 通电 运行。可看到左边第一个 ( 千位 ) 数码 管显示 “ 1 字 0 5秒, 随即熄灭; 接下 来百位数码管显示 “ 2 字 0 5秒 随即 熄灭 : 再下来十位数码管显示 “ 3 字 0 5秒 随即熄灭; 最后个位数码管显 示 “ 4 字 0 5 秒 随即熄灭。 重复循环, 反复不已。显示过程采用了分时动态 扫描的方法依次点亮四位数码管 但 由于每位数码管在点亮 0 5秒的过程 中 其它三位数码管处于熄灭状态 扫 描频率太低 因此观察起来很不舒服。 我们对程序进行解释。 序号 1 ( 程序解释 , 以下同 ) : 程序开 始。 序号 2 : 跳转到 MA I N主程序处。 序号 3 : 主程序 MA I N从地址 0 0 3 0 H开 始。 序号 4 : 将立即数 F 9 H送 P 3 13 使千 位数码管显示 1 。 序号 5 : 调用 0 5秒延时子程序 维持千 位数码管点亮。 序号 6 : 将立即数 F F H送 P 3 13 熄灭 千位数码管。 序号 7 : 将立即数 A 4 H送 P 2 13, 使百 位数码管显示 2 。 序号 8 : 调用0 5秒延时子程序 维持百 位数码管点亮。 序号 9 : 将立即数 F F H送 P 2 13 熄灭 百位数码管。 序号 1 0 : 将立即数 B 0 H送 P 1 13 使十 位数码管显示 3 。 序号 1 1 : 调用 0 5秒延时子程序 维持 十位数码管点亮。 序号 1 2 : 将立即数 F F H送 P 1 13 熄灭 十位数码管。 序号 1 3 : 将立即数 9 9 H送 P 0 13 使个 位数码管显示 4 。 序号 1 4 : 调用 0 5秒延时子程序 维持 个位数码管点亮。 序号 1 5 : 将立即数 F F H送 P 0 13 熄灭 个位数码管。 序号 1 6 : 跳转到 MAI N处循环运行。 序号 1 7 - 2 3 : 0 5 秒延时子程序。 序号 2 4 : 程序结束。 配文优惠邮购( 每次邮费保价 费 1 2元 ) : Ke i l 5 1 Wi n d o ws 集成开 发环境(已汉化光盘 ,邮购代号 : K1 ) : 4 6元。T OP 8 5 1多功 能编程器 ( 邮购代号: B1 ) : 4 0 0元。 L E D输 出试 验板 ( 邮 购代号 : S 1 ): 9 0元 。L E D 数 码管输 出试验板( 邮购代号: s 2) : 1 4 0 元 。5 V 高稳定 专用稳 压 电源 ( 邮购代 号 : D1) : 3 5元。 。邮购时只需在附言 栏中写明邮购代号及数量并附上联 系 电话 即可。 邮购地 址 : 2 0 1 1 0 3 上海 市闵行 区 莲花路 2 1 5 1 弄 5 7号 2 0 1室 联 系人 : 吕超亚 电话 : 0 2 1 6 4 0 6 6 5 7 1 1 3 0 4 4 1 5 2 9 4 7 技术支持 E ma i l : z x h 2 1 5 l s o h u c o m 1 8 悱z 似年 簟 3期 维普资讯 MCU Ap p l i c a t i o n 实用单片机讲座 : 口 周 兴 华 手把手教你学单片机 ( 十六 ) L E D数码显示器接 口技术 ( 接上期 ) 同样在S 2板做一个实 验 让 P 3 - P 0口的数码管依次快速 ( 显 示 时 间为 1 ms)显 示 1 2 3 4四个 字。 在我 的文档 中建立一个文件 目录 ( s 3 2) ,然后建立一个 s 3 2u v 2的工程 项 目, 最后建立源程序文件 ( $ 3 2a s m ) 。 输入下面的程序 : 序号 : 1 OR G 0 0 0 0 H 2 L J M PMAl N 3 OR G 03 0 H 4 MAI N MOV P 3 0 F 9 H 5 ACAL L DEL l mS 6 MOV P 3 , # 0 F F H 7 M0V P 2 0 A4 H 8 ACAL L DEL 1 mS 9 MOV P 2 , # 0 F F H 1 0 M0V P1 0 B0 H 11 ACAL LDEL l mS 1 2 M0V P1 0 F F H 1 3 MOV P 0 # 9 9 H 1 4 ACAL L DEL 1 ms 1 5 M0V P 0 # 0 F F H 1 6 AJ MPMAI N 1 7 DEL 1 ms : MOV R6# 02 H 1 8 DEL 1 : MOV R 7# 0F F H 1 9 DJ NZR7$ 2 0 DJ NZ R 6 DEL 1 2 1 R ET 2 2 END 编译 通过 后 ,将 S 3 2文件夹 中的 h e x文件烧录到 8 9 C5 1芯片 中 ,将芯 片插入 到 S 2型数码管试验板上 ,通 电 运行。 可看到四个( 个、 十、 百、 千位 ) 数 码 管同时稳定地 显示 1 2 3 4四个 字 , 没 有闪烁感。 这次尽管也采用了分时动态 扫描的方法依次点亮四位数码管。 但由 于每位数码管点亮的时间仅为 1 ms , 扫 描频率较高, 故显示效果十分理想。 我们对程序进行解 释。 序号 1 ( 程序解释, 以下 同 ) : 程序开始。 序号 2 : 跳转到 MAI N主程序处。 。 序号3 : 主程序 MA I N从地址0 0 O 0 H开始。 I 序 号 4: 将 立 即数 F 9 H送 P 3口 , 使千 位数码管显示 1 。 序号 5 : 调用 1毫秒延时子程序 , 维持 千位数码管点亮。 I 序 号 6: 将 立 即数 F F H送 P 3口 , 熄 灭 千位数码管。 。 序号 7 : 将立即数 A 4 H送 P 2口, 使百 位数码管显示 2 。 序号 8 : 调用 1毫秒延时子程序 , 维持 百位数码管点亮。 序 号 9 : 将 立 即数 F F H送 P 2口, 熄灭 百位数码管。 序号 1 0 : 将立即数 B 0 H送 P 1口, 使十 位数码管显示 3 。 序号 1 1 : 调用 1 毫秒 延时子程序 , 维持 十位数码管点亮。 序号 1 2 : 将立即数 F F H送 P 1口, 熄灭 十位数码管。 序号 1 3 : 将立 即数 9 9 H送 P 0口, 使个 位数码管显示 4 。 序号 1 4 : 调用 1 毫秒延时子程序, 维持 个位数码管点亮。 序号 1 5 : 将立即数 F F H送 P 0口, 熄灭 个位数码管。 序号 1 6 : 跳转到 MA I N处循环运行。 序号 1 7 - 2 1 : 1毫秒延时子程序 。 序号 2 2 : 程序结束。 l 最后我们在 S 2板做一个综合实 验, 让 S 2板成为一个实时时钟。 设计一个电子钟程序的基本思路 为 :让定 时器 T 0作 为时钟基准 , 每 5 0 ms 产生一次定时中断。此外, 我们还 需建立 5 0 ms 计数单元、 秒计数单元 、 分 计数单元、 时计数单元各一个。 每次定时 中断时 5 0 ms计数单元加 1 。还要建立 一 个走时转换子程序,其工作是判断走 时, 5 0 ms计数单元满 2 O时令秒计数单。 元加 1 , 秒计数单元满 6 0时令分计数单 元加 1 , 分计数单元满 6 0时令时计数单 元加 1 , 时计数单元满 2 4时令时、 分计 数单元清零。另外分别建立一个数码管 显示子程序及一个按键判断子程序, 用 于显示及调整时间。 主程序的工作是: 先 判有无键按下?若有则调用按键判断子 程序, 随后分别调用走时转换子程序、 数 码管显示子程序 , 反复执行。 在我的文档中建立一个文件 目录 ( $ 3 3) ,然后建 立一个 $ 3 3 u v 2的工 程项 目,最 后建 立源 程 序文 件 ( $ 3 3 a s m ) o 输入下面的程序 : 序号 : 1 F L A G B I T2 5 H 0 2 Dl DA DAT A 2 0 H 3 SE C DA T A 21 H 4 MI N DAT A 2 2 H 5 H0UR DAT A 2 3 H 6 0R G 0 0 0 0H 7 U MPMAI N 8 0R G 00 0 BH 9 L J MPCL OCK 1 0 0R G 0 3 0 H 1 1 MAl N: MOV T MOD 01 H 1 2 M0V T L 0 # 0 BO H 1 3 MOV T H0 3 CH 1 4 SE T B E T 0 1 5 SE T BT R0 1 6 M0V DI DA# 0 0 H 1 7 SE T B E A 1 8 B EGl N: MOV P 3 # 7F H 1 9 M0VA P 3 2 0 CJ NEA#7 F H NE X T 21 SE T B P 3 7 2 2 ACAL L CONV 2 3 ACAL LDl S 2 4 J B F L AG F L AG SE C 2 5 S E TB P 2 7 2 6 AJ MP BE Gl N 2 4 电子制作2 0 8 4年 第4期 维普资讯 MCU Ap pl i c a t i on 2 7 F L AG SE C: CL R P 2 7 2 8 AJ MP BE GI N 2 9 NE X T : ACAL L KE Y 3 0 AJ MP BE GI N 31 KE Y: ACAL L DEL 1 0 MS 32 J B P 3 0 , HOUR KE Y 3 3 MI N ADJ : CL R C 3 4 MOVA MI N 3 5 I NC A 3 6 DA A 3 7 CJ NE A# 6 0H X1 3 8 CL R A 3 9 X1 : MOVMI N A 4 0 ACAL LDI S 41 ACAL L DEL 2 0 0 MS 4 2 M0V P 3 # 7 F H 4 3 J NB P3 0 MI N AD J 4 4 H0UR KE Y : J B P 3 1 X2 4 5 HOUR ADJ : CL R C 4 6 MOV A, HOUR 4 7 I NC A 4 8 DA A 4 9 CJ NE A # 2 4H X 3 5 0 CL R A 51 X 3: MOVHOURA 5 2 ACAL LDI S 5 3 ACAL L DEL 2 0 0 MS 5 4 X2 : MOV P 3, # 7 F H 5 5 J NB P 3 1 H0UR ADJ 5 6 SE T B P 3 7 5 7 RE T 5 8 C0NV: M0V A DI DA 5 9 CJ NE A # 0 AH F1 6 0 SE T B F L AG 61 F1 : CJ NE A #1 4 H D0NE 6 2 CL R FL AG 6 3 M0VDI DA# 0 0 H 6 4 MOVA SE C 6 5 ADD A # 01 H 6 6 DA A 6 7 M0VSE CA 6 8 CJ NE A # 6 0 H DONE 6 9 M0V SEC # 0 0 H 7 0 M0VA MI N 7 1 ADD A # 01 H 7 2 DA A 7 3 M0V MI N A 7 4 CJ NE A# 60 H DONE 7 5 M0V MI N#0 0H 7 6 M0V A H0UR 7 7 ADD A # 01 H 7 8 DA A 7 9 M0V H0UR A 8 0 CJ NE A # 2 4 H DONE 81 M0VH0UR# 0 0 H 8 2 D0NE: RE T 8 3 DI S:M0V A MI N 8 4 ANL A # 0 F H 8 5 M0V DP T R # T AB 8 6 M0VC A A+DPT R 8 7 M0V P 0 A 8 8 ACAL L DEL 1 MS 8 9 M0VA MI N 9 0 S WAP A 91 ANL A # 0 F H 9 2 M0VC A A+DPT R 9 3 M0V P1 A 9 4 ACAL L DE L1 MS 9 5 M0V A H0UR 9 6 ANL A#0 F H 9 7 M0VC A A+DP TR 9 8 M0V P 2A 9 9 ACAL L DE L1 MS 1 0 0 M0V A H0UR 1 01 S WAP A 1 0 2 ANL A# 0F H 1 0 3 M0VC A A+DP TR 1 0 4 MOV P 3A 1 0 5 ACAL L DE L1 MS 1 0 6 RE T 1 0 7 CL 0CK: M0V TL 0 #0 B OH 1 0 8 M0V TH0 # 3 CH 1 0 9 I NC DI DA 1 1 0 RE T I 1 1 1 DEL 1 MS : M0V R 6# 0 2H 1 1 2 DEL 1 : MOV R7# 0 F F H 1 1 3 DJ NZ R 7 $ 1 1 4 DJ NZ R 6 DEL 1 1 1 5 R E T 1 1 6 DE L1 0 MS: M0V R 5#1 0 H 1 1 7 T X1 : MOV R4# 0 F F H 1 1 8 DJ NZ R 4 $ 1 1 9 DJ NZ R 5 T X1 1 2 0 R E T 1 21 DE L 2 0 0 MS: MOV R 3 #1 4 H 1 2 2 T X2 : ACAL L DE Ll 0 MS 1 2 3 DJ NZ R3 T X2 1 2 4 RE T 1 2 5 T AB: DB 0 CO H0F 9 H 0 A4 H 0B 0 H 0 9 9 H 0 9 2H 0 8 2 H, 0 F 8 H 1 2 6 DB 0 8 0 H 0 9 0 H, 0 8 8 H, 0 8 3 H,0 C6 H, 0 A1 H, 0 8 6 H,0 8E H 1 2 7 E ND 编译通过后 。将 S 3 3文件夹 中的 h e x文件烧录 到 8 9 C 5 1芯片 中,将芯 片插入到 S 2型数码管试验板上 。通 电 运行。 可看到四个( 个、 十、 百、 千位 ) 数 码管显示 0 0 0 0 ,同时百位数码管的小 数点每秒闪动一次 ( 作秒点显示 ) 。按 下 3 #键 ( S 9) 。 可调 整个位 、 十位 显示 的 “ 分 ”; 按下 6 #键 ( S1 0) 。 可调 整百 位 、 千位显示的 “ 时” 。 我们对程序进行解释 。 序号 1 ( 程 序解 释 。以下 同 ) :定义 2 5 H 0为秒点 闪烁 的位标志 F L A G。 序号 2 : 定义 2 0 H单元为5 0 ms 计数单 元 DI DA。 序号3 : 定义 2 1 H单元为秒计数单元S 宦 c o 序号 4:定义 2 2 H单元为分计数单 元 MI N。 序号 5 :定义 2 3 H单元为时计数单元 HOUR。 序号 6 : 程序从地址 0 0 0 0 H开始。 序号 7 : 跳转到 MAI N处。 序号 8 : 定时器 T 0中断入口地址 0 0 0 B H。 序号 9 : 跳转到 CL OCK处。 序号 1 0: 主程序从地址 0 0 3 0 H开始。 序号 1 1 : 主 程 序开 始 。 置 定 时器 T O 方 式 1 。 序号 1 2 : 定时器 T 0装入 5 0 ms初值 。 序号 1 3 : 定时器 T 0装入 5 0 ms初值 。 序号 1 4 : 开放 T O中断。 序号 1 5 : 启动定 时器 T 0 。 序号 1 6 : 清除 5 0 ms 计数单元。 序号 1 7 : 开放 总中断。 序 号 1 8 :向 P 3 13送 立 即 数 7 F H。 即 P 3 7为低电平。 序号 1 9 : 读取 P 3口状态至累加器 A 。 序号 2 0:若 A中内容 不为 7 F H。 转 NE X T ; 否则顺序执行。 序号 2 1 : 置 P 3 7为高 电平。 序号 2 2 : 调用走时转换子程序。 序号 2 3 : 调用数码管显示子程 序。 序 号 2 4 : 判秒点 标 志 F L AG, 若 F L A G 为 1 , 转 F L A G S E C; 若 F L A G 为 0 顺 序执 行。 序号 2 5 : 置 P 2 7为高电平。 熄灭秒点。 序号 2 6 : 跳转到 B E GI N处循环执行。 电子制作2 0 0 4年 第4期2 5 维普资讯 序号 2 7 : 置 P 2 _ 7为低 电平 , 点亮秒点 。 序号 2 8 : 跳转到 B E GI N处循环执行 。 序号 2 9 : 调 用按键判断子程序。 序号 3 0 : 跳转到 BE GI N处循环执行 。 序 号 3 1 :按键判断子程序开 始。调用 1 0 ms 延时子程序。 序号 3 2 :若 P 3 0为 0 (即按下 3 # 键】 , 顺 序 执 行 ; 否 则 跳 转 到 HOUR K E Y处。 序号 3 3 : 清除进位 CY 。 序号 3 4 :将分计数单元 MI N送累加器 Ao 序号 3 5 : 累加器 A加 1 。 序号 3 6 : 2 1 0进制调整。 序号 3 7 :若 A不为 6 0 H,跳转到 1 处; 若 A为6 0 H, 则顺序执行。 序号 3 8 : 清除累加器A。 序号 3 9 :调整后的累加 器 A 内容送 回 分计数单元 MI N 。 序号 4 0 : 调用显示子 程序 。 序号 4 1 : 调用 2 0 0 ms延时子程序。 序 号 4 2 :向 P 3 12 1 送 立 即数 7 F H, 即 P 3 7为低 电平。 序号 4 3 :若 P 3 0为 0 ( 即仍按下 3 # 键 ) ,跳 转 到 MI N AD J处 继 续 进 行 “ 分” 调整 ; 否N J ll 序执行。 序号 4 4 : 若 P 3 1为 0顺序执行 ; 否则 跳转到 X 2处。 序号 4 5 : 清除进位 CY 。 序号 4 6 : 将时计数单元 H OU R送累加 器 A 。 序号 4 7 : 累加器 A加 1 。 序号 4 8 : 2 1 0进制调整。 序号 4 9 :若 A不为 2 4 H,跳转到 X 3 处; 若 A为2 4 H。 则顺序执行。 序号 5 O : 清除累加器 A。 序 号 5 1 :调整后的累加 器 A 内容送 回 时计数单元 HOU R 。 序号 5 2 : 调 用显 示子程序。 序号 5 3 : 调 用 2 0 0 ms 延时子程序。 序 号 5 4 :向 P 3口送 立 即数 7 F H 即 P 3 7为低 电平。 序号 5 5 :若 P 3 1为 0 ( 即仍按下 6 # 键 ) ,跳转到 HOU R A D J处继 续进行 “ 时” 调 整; 否则顺序执行 。 序号 5 6 : 置 P 3 7为高电平。 序号 5 7 : 按键 判断子程序返 回。 序号 5 8 : 走 时转换子程序 开始。5 0 ms 计数单元内容送累加器 A 。 序号 5 9 : 若 A为0 A H( 十进制为 1 0) , 顺 序执行 ; 否则跳转 到 F 1处。 序号 6 O : 置位秒点标志 F L A G。 序号 6 1 : 若 A为 1 4 H( 十进制为 2 O) 顺序执行 : 否则跳转 到 D ONE处。 序号 6 2: 清除秒点标志 F L AG。 序号 6 3 : 清除 5 0 ms 计数单元。 序号 6 4 : 将秒计数单元内容送累加器A。 序号 6 5: 累加器加 1 。 序号 6 6 : 2 1 0 进制调整。 序号 6 7 :调整后的累加器 A内容送回1 秒计数单元 S E C。 序号 6 8 : 若 A为 6 0 H, 顺序执行; 否则l 跳转到 D ONE处。 序号 6 9 : 清除秒计数单元S E C。 序号 7 0 : 将分计数单元内容送累加器 A 。 序号 7 1 : 累加器加 1 。 序号 7 2 : 2 1 0进制调整 。 序号 7 3 :调整后的累加器 A内容送 回 分计数单元 MI N 。 序号 7 4 : 若 A为 6 0 H, 顺序执行; 否则 跳转到 D ONE处。 序号 7 5 : 清除分计数单元 MI N 。 I 序号 7 6 :将时计数单元内容送累加 器 A。 序号 7 7 : 累加器加 1 。 序号 7 8 : 2 1 0进制调整 。 序号 7 9 :调整后的累加器 A内容送回 时计数单元 H OU R 。 序号 8 O : 若 A为 2 4 H, 顺序执行; 否则。 E 转至 0 D ONE处。 序号 8 1 : 清除时计数单元 H OUR 。 序号 8 2 : 走时转换子程 序返 回。 序号 8 3 : 数码管显示子程序开始。分计 数单元送 累加器 A 。 序号 8 4 : 屏蔽分的高 4位。 1 序号 8 5 :数据表格首地址送数据指针 DP TR。 序号 8 6 : 根据A的内容查表。 序号 8 7 : 查表内容送 P 0口。 序号 8 8 : 调用 1 ms延时子程序 , 维持j 数码管显示。 序号 8 9 : 分计数单元送累加器 A。 序号 9 O : 交换累加器 A的高 4位 、 低 4 位 。 序号9 1 : 屏蔽分的高 4位。 1 序号9 2 : 根据A的内容查表。 序号 9 3 : 查表 内容送 P 1 13。 序 号 9 4 : 调 用 1 ms延时子 程 序 , 维 持 数码管显示。 : 序号 9 5 : 时计数单元送累加器 A 。 序号 9 6 : 屏蔽时的高 4位。 序号 9 7 : 根据 A的内容查表。 序号 9 8 : 查表内容送 P 2口。 序号 9 9 : 调 用 1 ms延 时子 程序 , 维持 数码管显示。 序号 1 O 0 : 时计数单元送累加器 A 。 序号 1 O 1 :交换累加器 A的高 4位、 低 4位 。 序号 1 O 2 : 屏蔽时的高 4位。 序号 1 O 3 : 根据 A的内容查表。 序号 1 O 4 : 查表 内容送 P 3 13。 序 号 1 O 5 : 调 用 1 ms延 时子程序 , 维持 数码管显示。 序号 1 0 6 : 数码管显示子程序返 回。 序号 1 0 7 : 定时器 T O中断子 程序开始。 重装定 时初值 。 序号 1 O 8 : 重装定 时初值。 序号 1 0 9 : 5 0 ms 计数单元内容加 1 。 序号 1 1 0 : 定 时器 T O中断子程序返 回。 序号 1 1 1 1 1 5 : 1 ms延时子程序。 序号 1 1 6 1 2 O : 1 0 ms延时子程序。 序号 1 2 1 1 2 4 : 2 0 0 ms延时子程序。 序号 1 2 5 - 1 2 6 :数码管显示 0 - F字形 码数据表格。 序号 1 2 7 : 程序结 束。 手把手教你学单片机 讲座至 此已全部载完。 读者朋友如按讲座做完 了全部的 3 3个实验 ,并彻底弄懂理解 了3 3个实验程序的每一条指令,那么 我们可以说你已基本踏进了单片机世 界 的大门 , 并且也已具备 了独立开发 简 单电子产品程序的能力。 只要你继续努 力学习, 完全有可能向更高的单片机开 发能力进军。 配文优惠邮购 ( 每次邮费保价 费 1 2元 ) : K e i l 5 1 Wi n d o ws集成开 发 环境 (已汉化 光盘 , 邮购代 号 : K 1 ) : 4 6元 T OP 8 5 1多功能编程 器( 邮购代 号: B1) : 4 0 0元 。L E D输 出试验板 ( 邮 购代 号 : S 1 ) : 9 0元 。L E D数 码管输 出 试验板 ( 邮购代号 : S 2) : 1 4 0元 。 5 V高 稳 定专用稳压 电源( 邮购代号 : D1 ) : 3 5元 。邮购时只需在 附言栏 中写 明邮 购代号及 数量并附上联 系电话即可: 邮 购地址 : 2 0 1 1 0 3上海 市闵行 区 莲花路 2 1 5 1弄 5 7号 2 0 1 室 联 系人 : 吕超亚 电 话: 0 21 6 4 0 6 6 5 71 1 3 0 4 41 5 2 9 4 7 技术 支持 E ma i l : z x h 2 1 5 1 s o h u c o m _ l 26 电 子 制 作 2oo4 年 第 4 期 维普资讯 实用单 片机 讲座 : 口周兴华 手把手教你学单片机 ( 十四 ) 单片机的键盘接口技术 键盘是单片机不可缺少的输入设 备, 是实现人机对话的纽带。键盘按结 构形式可分为非编码键盘和编码键盘, 前者是用软件方法产生键码, 而后者则 用硬件方法来产生键码。 在单片机中使 用的都是非编码键盘, 因为非编码键盘 结构简单、 成本低廉。非编码键盘的类 型很多, 常用的有独立式键盘、 行列式 键盘等。 独立式键盘 独立式键盘是指将每个按键按一 对一的方式直接连接到 I O输入线上 所构成的键盘 , 如图 1所示。 l o k x 8 K7 L 式的键盘结构简单, 按键的识别容易。 独立式键盘的缺点是需要占用较 多的 I 0 E l 线。当单片机应用系统键盘 中需要的按键比较少或 I 0 E l 线比较 富余时。 可以采用这种类型键盘。 行列式键盘 行列式键盘是用 n条 I 0线作为 行线。 m条 I 0线作为列线组成的键盘。 在行线和列线的每一个交叉点上,设置 一 个按键。这样,键盘中按键的个数是 mx n个。这种形式的键盘结构, 能够有 效地提高单片机系统中 I 0 E l 的利用 率。图2为行列式键盘输入示意图, 列 I P1 _ l KS l 上l K4 I _ _ 1 。 L 1 _ 4 P 1 s 0 o _ 6 j _ _ 4 叫H 5 o o P1 在图 I 中, 键盘接E l 中使用多少根 I 0线, 键盘中就有几个按键。 键盘接1:3 使用了8根 I O 1:3 线 , 该键盘就有8个 按键。这种类型的键盘, 键盘的按键比 较少, 且键盘中各个按键的工作互不干 扰。因此, 用户可以根据实际需要对键 盘中的按键灵活地编码。 最简单的编码方式就是根据 I O 输入1:3 所直接反映的相应接键按下的 状态进行编码, 称按键直接状态码。假 如图 I 中的 K 0键被按下, 则 P 1 1:3的输 入状态是 1 1 1 1 1 1 1 0 , 则 K 0键的直接状 态编码就是 F E H。 对于这样编码的独立 式键盘, C P U可以通过直接读取 I 0 1:3 的状态来获取按键的直接状态编码值, 根据这个值直接进行按键识别。这种形 P J n P1 7 A 。 F E D 线接 P 1 0 P 1 3 , 行线接 P 1 4 P 1 7 。行。 列式键盘适合于按键输入多的情况。 独立式键盘接口的编程模式 在确定了键盘的编程结构后, 就 可以编制键盘接1:3 程序。 键盘接1:3 程序 的功能实际上就是驱动键盘工作, 完成 按键的识别,根据所识别按键的键值, 完成按键子程序的正确散转, 从而完成 单片机应用系统对用户按键动作的预 定义的响应。 由于独立式键盘的每一个接键占 用一条 I 0 E l 线, 每个按键的工作不影 响其它按键 , 因此, 可以直接依据每个 I 0 1:3线的状态来进行子程序散转 , 使 程序编制简练一些。 也可以使用键盘编码值来进行按 键子程序的散转 ,程序更具有通用性。 通用的独立式键盘接E l 程序由键盘管 理程序、 散转表和键盘处理子程序三部 分组成。 独立式键盘接E l 程序各个部分 的原理如下 : 1 键盘管理程序 : 担负键盘工作时 的循环监测 ( 看是否有键被按下 ) 、 键 盘去抖动、 按键识别、 子程序散转 ( 根 据所识别的按键进行转子程序处理 ) 等基本工作。 2 散转表: 支持应用程序根据按键 值进行正确的按键子程序跳转。 3 键盘处理子程序: 负责对具体按 键的系统定义功能执行。 行列式键盘接口的编程模式 行列式键盘具有更加广泛的应用, 可采用计算的方法来求出键值,以得到 按键特征码。现以图2为例加以说明。 1 检测出是否有键按下。方法是 P 1 4 P 1 7输 出 全 0 , 然 后 读 P 1 0 P 1 3的状态, 若为全 1则无键闭合, 否则表示有键闭合。 2 有键闭合后, 调用 1 0 2 0 mS延 时子程序避开按键抖动。 3 确认键已稳定闭合后, 接着判断 为哪一个键闭合?方法是对键盘进行扫 描, 即依次给每一条列线送 0 , 其余各 列都为 1 ,并检测每次扫描的行状态。 每当扫描输出某一列为0时, 相继读入 行线状态。若为全 1 , 表示为0的这列 上没有键闭合, 否则不为全 1 , 表示为0 的这列上有键闭合。 确定了闭合键的位 置后, 就可计算出键值, 即产生键码。 行列式键盘也可采用查表法求得 键值, 这样, 键盘接1:3 程序更具有通用性。 它的基本编程模式与独立式键盘 一 致 。 都是 由键盘管理程序、 散转表和 按键子程序三部分组成。但是。 行列式 ! 一7 6 5 4 3 2 1 O 吼 一 8 一 维普资讯 键盘的按键编码方式与独立式键盘不 一 样, 所以, 其键盘管理程序需完成键l 盘驱动和接键识别两项工作, 而独立式 键盘的管理程序只需要完成按键识别 一 项工作。行列式键盘如按键盘按键的; 直接工作状态进行编码 。 可以使得单片 机系统方便地用键盘工作时端E l 的输i 入输出状态获得按键编码 , 按键检测容f 易。 但直接状态编码的码值的离散性比l 较大 ,若直接用它的值进行子程序跳 转, 在编程时, 不好处理。因此 , 可以用 键盘直接状态扫描码与键盘特征码一 起组成一个键码查询表, 程序中根据得j 到的键盘直接状态扫描码, 用查表法查 询键码查询表, 得到按键特征码 , 程序! 按特征码散转。 所谓的特征码就是根据f 子程序散转的需要, 程序员自己 设定的【 与直接状态扫描码对应的按键特征码。 键 L _q 2 作方式 CP U对键盘的扫描可以采取程序; 控制的随机方式 ,即只有在 CP U空闲 时才去扫描键盘 , 响应操作员的键盘输 入 , 但 CP U在执行应用程序 ( 若应用 程序中没有键扫描程序 ) 的过程中, 不】 能响应键盘输入。 对键盘的扫描也可采 用定时方式 ,即利用单片机内部定时1 器 , 每隔一定时间(如 l O mS) 对键盘! 扫描一次, 这种控制方式, 不管键盘上 有无键闭合, C P U总是定时地关心键 盘状态。在大多数情况下, C P U对键盘 可能进行空扫描。为了提高 C P U的效 率而又能及时响应键盘输入, 可以采用1 中断方式, 即CP U平时不必扫描键盘 , 只要当键盘上有键闭合时就产生中断 请求。向 C P U申请中断, CP U响应键I 盘中断后立即对键盘进行扫描, 识别闭 合键。 并作相应的处理。 下面在 S1 板做一个独立式键盘 输入实验, P 1 E l 作输入, P 2 E l 作输出。 P 1 E l 的 P 1 0输入低电平后, P 2 E l 的【 P 1 0输出低电平, 点亮 1 位发光管; P 1 1:3 的 P 1 1 输入低电平后 , P 2 1: 3 的 P 1 0 、 P 1 1 输出低电平, 点亮 2位发光管; P 1 E l 的 P 1 2输入低电平后 , P 2 E l 的i P 1 0 、 P 1 1 、 P 1 l 2输出低电平 ,点亮 3 位发光管_ P 1 E l 的 P 1 7输入低电 平后 。 P 2 E l 的 P 1 0 、 P 1 1 、 P 1 l 2 、 P 1 3 、 P 1 4 、 P 1 5 、 P 1 6 、 P 1 7输出低电平 , 点 亮 8位发光管 在我的文档中建立一个文件 目录 ( $ 2 6) ,然 后建立一 个 $ 2 6 u v 2的工 程项 目,最后建立源程序文件 ( $ 2 6 a s m J 。 输入下面的程序: 序号: 1 OR G O 0 0 0 H 2 AJ MP MAI N : 3 ORG 0 3 0H 4 MAI N: MOV P 2 # O F F H 一 5 MOVA # O F F H : 6 MOV P1 A 7 MOVA P1 8 CJ NE A。 # O F F H G01 9 AJ MPMAI N 1 0 GO1 :ACAL L DE L 1 1 CJ NE A # O F F H, G02 f 1 2 AJ MPMAI N 1 3 GO2 : MOV DP TR # T AB 1 4 MOVR 0 # O OH : 1 5 L1 : RR C A 1 6 J NC N1 1 1 7 I NC R0 1 8 S J MP L 1 j 1 9 N1 : MOVA R0 2 0 RL C A 1 21 J MPA+ DP T R 2 2 T AB: AJ MP PR O 2 3 AJMP PR1 2 4 AJ MP PR 2 1 2 5 AJMPPR 3 2 6 AJ MP P R 4 2 7 AJ MP PR 5 2 8 AJ MP P R 6 2 9 AJ MP P R7 3 0 PR O: MOV P 2,# 0 FE H 31 ACAL LDE L 3 2 AJ MPMA J N 3 3 P R1 : MOV P2 # 0 F CH 3 4 ACAL LDE L 3 5 AJ MPMAI N 3 6 P R2 : MOV P 2 , # 0 F 8 H : 3 7 ACAL LDE L 3 8 AJ MPMAl N : 3 9 P R3 : MOV P 2 # 0 F 0 H 【 4 0 ACAL LDEL 41 AJ MPMAl N 4 2 PR 4: MOV P 2,# 0E O H 4 3 ACAL LDEL 4 4 AJ MPMAl N 4 5 P Rg : MOV P 2 # 0 OOH 4 6 ACAL LDE L 4 7 AJ MPMAI N 4 8 P R6 : MOV P 2 # 8 0 H 4 9 ACAL LDEL 5 0 J MPMAI N 51 P R7 : MOV P 2 # 0 0H 52 ACAL LDE L 5 3 AJ MPMAI N 5 4 DE L : MOV R7 , # 0 F F H 5 5 DE Ll : MOV R6 # 0 F F H 5 6 DE L 2 : DJ NZ R6 DE 1 _ 2 5 7 DJ NZ R 7 DE Ll 5 8 RET 5 9 END 编译通过后,将 $ 2 6文件夹中的 h e x 文件烧录到 8 9 C 5 1芯片中,将芯 片插入到 S 1型 L E D试验板上,取下 P 1口的短路块 。接上5 V稳压电源, 这 时 P 2 1: 3 外接的 8个 L E D均不亮。 用一 根试验线一端接地 ,另一端依次触碰 P 1 0 - P 1 7 ,会发现 P 2 1: 3 的发光管点 亮情况从 1 个变化到 8个。 下面我们对程序进行分析解释。 序号 1 ( 程序解释 , 以下同 ) : 程序开 始。 序号 2 : 跳转到 MA I N主程序处。 序号3: 主程序从地址 3 0 H开始。 序号 4 :将立即数 F F H传送至 P 2口, 关闭 P 2 1: 3 的 8个发光管。 序号 5 :将立即数 F F H传送至累加器 A。 序号 6 : 累加器的数送 P 1 1 :3( 全 1 ) , 准备读取输入状态。 序号 7 : 读取 P 1 1:3 输入状态。 序号 8 : 若 A不等于 F F H, 说 明有键闭 合, 转 G O1 ; 否则无键闭合, 顺序执行。 序号 9 : 跳转至主程序 MA I N处。 序号 1 0 : 调用延时子程序, 避开按键抖 动干扰。 序号 1 1 :再判键闭合 ,若 A不等于 F F H。 说明有键闭合, 转 GO2 ; 否则无键 闭合。 顺序执行。 序号 1 2 : 跳转至主程序 MA I N处。 序号 1 3 :散转表首地址送 D P T R数据 指针。 序号 1 4 : 设置初始键号 ( 0) 送寄存器 R0 。 序号 1 5 : 累加器 A的内容右移一位, 这 电子 I 作 2 0 Io 年 2 维普资讯 样最低位首先移入进位寄存器 CY (即 从最低位 P 1 0开始寻找闭合键 ) 。 序号 1 6: C Y不等于 1 , 说明有键按下 , 转 N1 。否则顺序执行。 序号 1 7 : 键号加 1 。 序号 1 8 :跳转至 L 1处继续寻找闭合 键。 序号 1 9 : 将键号送累加器中。 序号 2 0 : 键号乘 2 , 修正变址值。 序号 2 1 : 散转形成的键值入口地址表。 序号 2 2 :转 向 P 1 0号键功 能程 序 PR O 。 序号 2 3:转 向 P 1 1号键 功能程 序 P R1 。 序号 2 4 :转向 P 1 _ 2号键功 能程 序 PR 2 。 序号 2 5 :转向 P 1 3号键功 能程 序 P R3 。 序号 2 6 :转 向 P 1 4号键 功能程 序 P R4 。 序号 2 7 :转 向 P 1 5号键功 能程 序 P R5 。 序号 2 8 :转向 P 1 6号 键功 能程 序 P R6 。 序号 2 9:转 向 P 1 _ 7号键 功能程 序 P R7 。 序号 3 0 : P R O功能程序,点亮 P 2 0发 光管。 序号 3 1 : 调用延时子程序, 维持发光管 点亮。 序号 3 2 : 跳转至主程序循环运行。 序号 3 3 : P R 1功能程序, 点亮 P 2 0 、 P 2 1 发光管。 序号 3 4 : 调用延时子程序, 维持发光管 点亮。 序号 3 5 : 跳转至主程序循环运行。 序号 3 6 : P R 2功能程序, 点亮P 2 0 、 P 2 1 、 P 2 _ 2发光管。 序号 3 7 : 调用延时子程序, 维持发光管 点亮。 序号 3 8 : 跳转至主程序循环运行。 序号 3 9 : P R 3功能程序, 点亮 P 2 0 、 P 2 1 、 P 2 2 、 P 2 3发光管。 序号 4 0 : 调用延时子程序, 维持发光管 点亮。 序号 4 1 : 跳转至主程序循环运行。 序号 4 2 : P R 4功能程序 , 点亮 P 2 0 、 P 2 1 、 P 2 2 、 P 2 3 、 P 2 4发光管。 序号 4 3 : 调用延时子程序, 维持发光管 点亮。 序号4 4 : 跳转至主程序循环运行。 序号 4 5 : P R 5功能程序, 点亮 P 2 0 、 P 2 1 、 P 2 2 、 P 2 3 、 P 2 4 、 P 2 5发光管。 序号 4 6 : 调用延时子程序 。 维持发光管 点亮。 序号4 7 : 跳转至主程序循环运行。 序号 4 8 : P R 6功能程序, 点亮P 2 0 、 P 2 1 、 P 2 2 、 P 2 3 、 P 2 4 、 P 2 5 、 P 2 6发光管。 序号 4 9 : 调用延时子程序, 维持发光管 点亮。 序号 5 0 : 跳转至主程序循环运行。 序号 5 1 : P R 7功能程序, 点亮 P 2 0 、 P 2 1 、 P 2 2 、 P 2 3、 P 2 4 、 P 2 5 、 P 2 6 、 P 2 7发 光管。 序号 5 2 : 调用延时子程序, 维持发光管 点亮。 序号 5 3 : 跳转至主程序循环运行。 序号 5 4 5 8 : 延时子程序。 序号 5 9 : 程序结束。 下面在 S 2试验板做一个行列式 键盘输入实验。通电后 P O口的数码管 显示 “ 0 ”, 按下 0号键。 P O口的数码管 显示 “ 0 ”; 按下 1号键。 P O口的数码管 显示 “ 1 ”I 按下9号键, P O口的数 码管显示 “ 9 ”; 按下 、 #键 , P O口的数 码管显示熄灭。 S 2 试验板的电路原理图 刊登在 电子制作) 2 m3 年第 1 期上。 在我的文档中建立一个文件 目录 ( $ 2 7) 。然后建立一个 $ 2 7 u v 2的工 程项目,最后建立源程序文件 ( $ 2 7 a s m) 。 输入下面的程序: 序号: 1 OR G O 0 0 0 H 2 AJ MPMAI N 3 ORG 0 3 0H 4 MAI N MOV P O# OF F H 5 S T ART: MOV P 3# OF H 6 MOVA。P3 7 CJ NE A # O F H, G01 8 MOVA。 R1 9 MOV DPT R # T AB 1 0 MOVC A A+DP TR 1 1 MOVP O A 1 2 ACAL LDEL 1 3 AJ MP S T ART 1 4 GO1 ACAL LDE L 1 5 CJ NE A# OF H GO2 1 6 A J MP S T AR T 1 7 1 8 1 9 2 O 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 41 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 51 5 2 5 3 5 4 5 5 GO2 MOV R 2# ODF H MOV R0 静 o 0 H S T MOV P 3 R2 MOVA P 3 J B ACC 0ONE MOV A 静 o1 H AJ MPL KP ONE J B ACC 1 1 _ v V O MOV A # 0 4 H AJ MP L K P T v v O! J B ACC 2 。 T HR MOV A # 0 7 H A JMP L K P T HR J B ACC 3 NE T MOV A # O AH L KP ADD A RO CJ NE A 静 o BH L KP1 MOV A # o o H L KP1 M0V R1 A AJ MP S T ART NE T I NC R0 CJ NE RO 03 H L 1 MOV R 0 # O OH AJ MPS T L1 : CJ NE R2 , 彝 o DF H, L 2 MOVR2 柏 BF H AJ MPS T L 2 CJ NE R2 o BF H 。 L 3 MOVR2 # 7 F H AJ MPS T L 3: CJ NE R2 , # 7 F H , RE MOV R2 # O DF H REAJMP S T AR T DE L M0V R7 静 ODH DE L1 M0V R6 , # O F F H DE L 2 DJ NZ R6 , DE L 2 DJ NZ R7 DEL l RE T T AB: DB O CO H, O F 9H, 0 A4H, O B OH 9 9 H DB 9 2 H, 8 2 H, O F 8 H, 8 0 H, 9 0H 57 ENU 编译通过后,将 $ 2 7文件夹中的 h e x文件烧录到 8 9 C 5 1 芯片中,将芯 片插入到 S 2型试验板上,通电后 P 0 口的数码管显示 “ 0 ”, 按下 0号键, P o 口的数码管显示 “ 0 ” ; 按下 1 号键, P 0 口的数码管显示“ 1 ”;按下 9号 上r-! 作 ,1 2 期 维普资讯 键, P 0 13的数码管显示 “ 9 ”; 按下 、 # 键, P 0 13的数码管显示熄灭。完全达到 设计目的。 下面我们对程序进行分析解释。 序号 1【 程序解释, 以下同 ) : 程序开 始。 序号2: 跳转到 MAI N主程序处。 序号3: 主程序从地址 3 0 H开始。 序号4: 熄灭 P 0口数码管。 序号5: 置 P 3 13为 0 F H, 准备读取输入 状态 。 序号 6 : 读取 P 3 13输入状态。 序号 7 : 若 A不等于 F F H, 说明有键闭 合, 转 GO1 ; 否则无键闭合, 顺序执行。 序号 8 : 将寄存器 R 1内容送累加器 A 。 上电时, R 1内容为0 0 H。 序号 9 : 数码管的字段码数据表格首地 址送数据指针 D P T R 。 序号 1 0 : 查表获得的数据存累加器 A 。 序号 1 1 : 将累加器 A的内容送 P 0口显 不 。 序号 1 2 : 调用延时子程序 , 维持数码管 点亮。 序号 1 3 : 跳转到 S T AR T处循环执行。 序号 1 4 : 调用延时子程序 , 避开按键抖 动干扰。 序号 1 5 :再判键闭合 ,若 A不等于 F F H。 说明有键闭合, 转 GO 2 ; 否则无键 闭合, 顺序执行。 序号 1 6 : 跳转至主程序 S T A R T处循环 执行。 序号 1 7 : 向寄存器 R 2送立即数 D F H。 序号 1 8 : 向寄存器 R 0送立即数 0 0 H 。 序号 1 9 : R 2内容送 P 3 13, 准备读取最 左列的按键输入。 序号 2 0 :读取 P 3 13输入至累加器 A 中。 序号 2 1 : 1号键没有闭合转 ON E处, 否则顺序执行。 序号 2 2 : 向累加器 A送立即数 0 1 H 。 序号 2 3 : 跳转至 L K P处。 序号 2 4 : 4号键没有闭合转 T WO处, 否则顺序执行。 序号 2 5 : 向累加器 A送立即数0 4 H。 序号 2 6 : 跳转至 L K P处。 序号 2 7 : 7号键没有闭合转 T HR处, 否 则顺序执行。 序号 2 8 : 向累加器 A送立即数 0 7 H 。 序号 2 9 : 跳转至 L K P处。 序号 3 0 : 号键没有闭合转 NE X T处 。 否则顺序执行。 序号 3 1 : 向累加器 A送立即数 0 A H。 序号 3 2 : 将 R 0内容与 A内容相加, 计 算出键值。 结果存 A。 序 号 3 3 :若 A 内容 不 为 0 B H。 转 L K P 1 ; 否则顺序执行。 序号 3 4 : 清除累加器 A 。 序号 3 5 : 累加器 A内容送寄存器 R 1 。 序号 3 6 : 跳转到 S T AR T循环执行。 序号 3 7 : R 0加 1 。 序号 3 8 : 若 R 0内容不为 0 3 H, 转 L 1 。 序号 3 9 : 清除R 0内容。 序号 4 0 : 跳转到S T处进行下一列按键 输入的判断。 序号 4 1 : 若 R 2不等于 D F H, 转 L 2 ; 否 则顺序执行。 序号 4 2 : 向R 2送立即数 B F H 。 序号 4 3 : 跳转到 S T处。 序号 4 4 : 若 R 2不等于 B F H, 转 L 3 ; 否 则顺序执行。 序号 4 5 : 向R 2送立即数7 F H 。 序号 4 6 : 跳转到 S T处。 序号 4 7 : 若 R 2不等于 7 F H, 转 R E ; 否 则顺序执行。 序号 4 8 : 向R 2送立即数 D F H 。 序号 4 9 : 跳转到 S T AR T处循环执行。 序号 5 0 - 5 4 : 延时子程序。 序号 5 5 - 5 6 : 数码管字段数据表。 序号 5 7 : 程序结束。 下来再做两个关于键盘工作方式 的实验。前面已介绍了键盘工作方式, 但许多读者缺少感性认识, 通过这两个 实验可理解 C P U对键盘的程序控制扫 描与定时中断扫描的区别。 在 S1 试验板做一个键盘输入实 验。通电后P O口的8个发光管点亮 1 O 秒钟, 熄灭 1 0秒钟, 反复循环。 用试验线 置 P 3O低电平后, 要等待 P 0 13的发光 管在亮、灭转换期间, C P U才读入 P 3 O 状态,使 P 1 13的8个发光管点亮或熄 灭。 这种 C P U对键盘的程序控制扫描方 式。 有时会因CP U在忙于处理其它事情 而延误或遗漏了对键盘输入的反应。 在我的文档中建立一个文件 目录 ( $ 2 8 J 。然后建立一个 $ 2 8 u v 2的工 程项 目,最后建立源程序文件 【 $ 2 8 a s m ) 。 输入下面的程序: 序号: 1 OR G 0 0 0 0 H 2 AJ MP MAI N 3 ORG 0 3 0 H 4 MAI N MOV P 0 # OO H 5 ACAL L DE L1 0 S 6 A CAL LKE Y 7 MOV P 0, # OF F H 8 ACAL L DEL l 0 S 9 ACAL LKE Y 1 0 AJ MPMAI N 1 1 K EY: J B P 3 0 , RE 1 2 CP L C 1 3 J C NE ) ( r 1 1 4 MOVP1 # O OH 1 5 A JMPNE ) ( 1 2 1 6 NEX T1 : MOV P 1 , # OF F H 1 7 NEX T 2: ACAL L DE LL S 1 8 RE: RE T 1 9 DELl S: MOV R 5,柏 F FH 2 O F1 : MOV R 6,# OF F H 21 F 2: DJ NZ R6 , F 2 2 2 DJ NZ R5 F1 2 3 RE T 2 4 DELl 0 S MOV R 0 , 0 AH 2 5 L OOP ACAL L DEL l S 2 6 DJ NZ R 0, L OOP 2 7 RE T 2 8 END 编译通过后,将 $ 2 8文件夹中的 h e x文件烧录到 8 9 C 5 1 芯片中,将芯 片插入到 S1型试验板上,通电后 P 0 13的 8 个发光管点亮 1 0 秒钟, 熄灭 1 0 秒钟, 反复循环。 用试验线一端置 。 0 ”, 另一端触碰 P 3 0进行试验。试验 中发 现 , 只有连续触碰 P 3 0且要等待 P 0 13 的发光管 1 0秒到后在亮、 灭转换期间, 才能使 P 1口的发光管点亮或熄灭。如 果仅仅短暂地触碰 P 3 0 , 不能使 P 1 13 的发光管状态发生变化。 下面我们对程序进行分析解释。 序号 1 【 程序解释, 以下同 ) : 程序开始。 序号2 : 跳转到 MA I N主程序处。 序号 3 : 主程序从地址 3 0 H开始。 序号 4 : 点亮 P 0 13发光二极管。 序号 5: 调用延时子程序, 维持点亮 P 0 口发光二极管 1 O秒。 序号 6 : 调用键盘扫描子程序。 序号 7 : 熄灭P 0 13发光二极管。 序号 8 : 调用延时子程序 , 维持点亮 P 0 电 子 _ 作 2。 年 _ 2 _ 21 l 维普资讯 口发光二极管 1 0秒。 序号 9 : 调用键盘扫描子程序。 序号 1 0 : 跳转到 MAI N处循环运行。 序号 1 1 : 键盘扫描子程序开始。 若 P 3 0 为高电平 ( 无键闭合 ) 转标号 R E处, 否则顺序执行。 序号 1 2 : 进位位 C Y取反。 序号 1 3 : 若 CY为 1 转 N E X T
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。