全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实用单 片机 讲座 : 口周兴华 手把手教你学单片机 ( 十四 ) 单片机的键盘接口技术 键盘是单片机不可缺少的输入设 备, 是实现人机对话的纽带。键盘按结 构形式可分为非编码键盘和编码键盘, 前者是用软件方法产生键码, 而后者则 用硬件方法来产生键码。 在单片机中使 用的都是非编码键盘, 因为非编码键盘 结构简单、 成本低廉。非编码键盘的类 型很多, 常用的有独立式键盘、 行列式 键盘等。 独立式键盘 独立式键盘是指将每个按键按一 对一的方式直接连接到 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 , 否则顺 序执行。 序号 1 4 : P 1 E l 置全 0,点亮 8个发光 管。 序号 1 5: 跳转至 N E X T 2 。 序号 1 6 : P 1口置全 1 ,熄灭 8个发光 管。 序号 1 7 : 调用 1 秒延时子程序, 维持发 光管熄灭或点亮。 序号 1 8 : 子程序返回。 序号 1 9 - 2 3 : 1 秒延时子程序。 序号 2 4 - 2 7 : 1 0秒延时子程序。 序号 2 8 : 程序结束。 下来在 S 1试验板做一个定时中 断键盘输入实验。通电后 P 0口的8个 发光管点亮 2 5秒钟, 熄灭 2 5秒钟, 反 复循环。 用试验线置 P 3 0低电平后, P 1 El的 8个发光管状态马上发生变化 ( 点亮或熄灭 ) 。 这种 C P U对键盘的定 时中断扫描方式, 只要定时时间足够短 ( 几十 mS) , 就不会因 C P U在忙于处 理其它事情而延误或遗漏了对键盘输 入的反应 。 在我的文档中建立一个文件 目录 ( S 2 9) 。然后建立一个 S 2 9 u v 2的工程 项目。 最后建立源程序文件( S 2 9 a s m) 。 输入下面的程序: 序号: 1 OR G 0 0 0 0 H 2 AJ MPMAl N 3 ORG 0 0 0 BH 4 AJ MPCT C0 5 ORG 0 0 3 0 H 6 MAl N MOV TMOD。# 0 0 H 7 MOV TL 0 # ( ) F F H 8 MOV TH0 #0 F F H 9 SE T B E A 1 0 SE T B E T O 1 1 SE T BT R0 1 2 GOON MOV P 0 # 0 0H 1 3 ACAL L DEL 2 5 S 1 4 MOV P 0 # ( ) F F H 1 5 ACAL L DEL 2 5 S 1 6 AJ MPGOON 1 7 CT C0 1 MOV TL 0 。 # 0 F F H 1 8 MOV TH0 。 # 0 F F H 1 9 J B P 30, RE 2 0 CL RTR 0 21 CP L C 2 2 J C NE X T 2 3 MOV P1 , # 0 0H 2 4 AJ MP NE X T1 2 5 NE X T: MOV P1 , # 0 F F H 2 6 NE X T1 : ACAL L DEL l S 2 7 SE TB TR 0 2 8 RE: RE T I 2 9 D E L L S : M O V R 5 , # 0 F F H 3 0 F 1 : MOVR 6, # 0 F F H 31 F 2 : DJ NZR 6, F 2 3 2 DJ NZR 5, F 1 3 3 RE T 3 4 DEL 2 5 S! MOV R 0, 0 AH 3 5 L OOP ACAL L DE L1 S 3 6 DJ N Z R 0, L OOP 3 7 RE T 3 8 E ND 编译通过后,将$ 2 9文件夹中的 h e x文件烧录到 8 9 C5 1芯片中。将芯 片插入到 S 1型试验板上,通电后 P o El的 8个发光管点亮 2 5秒钟, 熄灭 2 5 秒钟, 反复循环。用试验线一端置 0 , 另一端触碰 P 3 0进行试验。 试验发现, 只要一触碰 P 3 0 , P 1 El的发光管状态 马上发生变化 ( 点亮或熄灭 ) ,说 明 CP U很快就对键盘输入进行反应 , 这 样就不会延误或遗漏了每一次的键盘 输入事件。有些读者会问, 上一个实验 和这一个实验的延时子程序完全一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年小型店面租赁协议
- 2024年度安置房买卖合同协议书填写指南
- 2024灯具产品购销合同范本
- 2024《快速投资建设合同》
- 2024电气安装劳务合同
- 2024装修施工监理合同范本
- 2024年度云计算服务采购与租赁合同
- 2024年土方与泥浆运输协议
- 2024企业项目合作开发合同详细内容
- 2024北京市房屋租赁合同经纪机构居间成交版范本
- 《PLC应用技术(西门子S7-1200)第二版》全套教学课件
- 泰康保险在线测评真题
- 小学语文阅读校本课程设计方案
- DB3301-T 1139-2024 地理标志产品 千岛湖鲢鳙
- 2024-2030年中国陶瓷珠市场发展趋势及投资可行性价值评估报告
- 7.比较不同的土壤课件教科版科学四年级下册
- 2024小学数学义务教育新课程标准(2022版)必考题库附含答案
- 仿古亭施工方案
- 云南省八年级《信息技术》上册教案:第2课 探究因特网
- 幼儿园大班数学《6的组成与分解》课件
- 消化内镜护士进修汇报
评论
0/150
提交评论