独立按键及矩阵键盘控制LED灯.ppt_第1页
独立按键及矩阵键盘控制LED灯.ppt_第2页
独立按键及矩阵键盘控制LED灯.ppt_第3页
独立按键及矩阵键盘控制LED灯.ppt_第4页
独立按键及矩阵键盘控制LED灯.ppt_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

8个共阴极的数码管 动态显示0 7 ORG0000HMOVR0 00H 给R0赋值0MOVDPTR TAB 把TAB表的首地址给DPTRMOVR4 0FEH 给R4赋值0FEMOVA R4 A为0FE也就是11111110PUSHACC 将A入栈DLO MOVA R0MOVCA A DPTR 查TAB表MOVP0 A 把查的值给数码管的8个段POPACC 将之前的A出栈MOVP1 A 将A的值给P1也就是给P111111110是那个为0的管亮LCALLQF 调用取反子程序PUSHACC 将A入栈INCR0 R0值加1LCALLDELAY 调用延时程序 CJNER0 08H DLO 判断是否查完一便表没查完再跳到DLOMOVR4 0FEH 查完了重新给A赋值MOVA R4PUSHACC 再将A入栈MOVR0 00H 给R0清0SJMPDLO 跳到DLO再显示DELAY MOVR1 18LP1 MOVR2 200LP2 MOVR3 126DJNZR3 DJNZR2 LP2DJNZR1 LP1RETTAB DB3fH 06H 5bH 4fH 66H 6dH 7dh 07hQF RLA 左移RETEND 0 99的显示 Org0LjmpmainOrg0100hMain MOVR0 00H 给R0赋值0MOVDPTR TAB MOVR3 0 给R3赋值0M1 MOVR4 0 给R4赋值0GW MOVR2 10YS MOVA R4 A为0MOVCA A DPTRMOVP0 A 显示个位的数据CLRP1 1LCALLDLMOVP0 0SETBP1 1MOVA R3MOVCA A DPTRMOVP0 A 显示十位的数据 CLRP1 0LCALLDLMOVP0 0SETBP1 0DJNZR2 YSINCR4CJNER4 10 GWINCR3CJNER3 10 M1SJMPMAINDL MOVR7 10D1 MOVR6 200D2 DJNZR6 d2DJNZR7 d1RETTAB DB3fH 06H 05bH 4fH 66H 6dH 7dH 07H 7fH 6fH a bitequ20h 数码管个位数存放内存位置b bitequ21h 数码管十位数存放内存位置tempequ22h 计数器数值存放内存位置org0star movtemp 0 初始化计数器 从0开始stlop acalldisplay 调用显示子程序inctemp 对计数器加1mova tempcjnea 100 next 判断计数器是否满100 movtemp 0 满100就清零重新开始next ljmpstlop 不满就循环执行 显示子程序display mova temp 将temp中的十六进制数转换成10进制movb 10 10进制 10 10进制divabmovb bit a 十位在amova bit b 个位在bmovdptr numtab 指定查表启始地址movr0 4 dpl1 movr1 250 dplop mova a bit 取个位数MOVCA A DPTR 查个位数的7段代码movp0 a 送出个位的7段代码clrp1 7 开个位显示acalld1ms 显示162微秒setbp1 7 关闭个位显示 防止鬼影mova b bit 取十位数MOVCA A DPTR 查十位数的7段代码movp0 a 送出十位的7段代码clrp1 6 开十位显示acalld1ms 显示162微秒setbp1 6 关闭十位显示 防止鬼影djnzr1 dplop 循环执行250次djnzr0 dpl1 循环执行250X4 1000次Ret 2 2X80 162微秒 延时按12MHZ计算D1MS MOVR7 80DJNZR7 RET共阴数码管的显示代码numtab DB3fH 06H 05bH 4fH 66H 6dH 7dH 07H 7fH 6fH 键盘接口 键盘是单片机应用系统中使用最广泛的一种数据输入设备 键盘是一组按键的组合 键通常是一种常开型按钮开关 常态下键的两个触点处于断开状态 按下键时它们才闭合 短路 第三章电子时钟设计 非编码键盘按组成结构又可分为独立式键盘和矩阵式键盘 独立式键盘的工作过程与矩阵式键盘类似 无论是硬件结构还是软件设计都比较简单 通常 按键按照接口原理键盘有编码和非编码两种 编码键盘通过硬件电路产生被按按键的键码和一个选通脉冲 选通脉冲可作为CPU的中断请求信号 这种键盘使用方便 所需程序简单 但硬件电路复杂 常不被单片机采用 按键按照结构原理可分为两类 一类是触点式开关按键 如机械式开关 导电橡胶式开关等 另一类是无触点开关按键 如电气式按键 磁感应按键等 前者造价低 后者寿命长 目前 微机系统中最常见的是触点式开关按键 一个完善的键盘控制程序应具备以下功能 1 检测有无按键按下 并采取硬件或软件措施 消除键盘按键机械触点抖动的影响 2 有可靠的逻辑处理办法 每次只处理一个按键 其间对任何按键的操作对系统不产生影响 且无论一次按键时间有多长 系统仅执行一次按键功能程序 3 准确输出按键值 或键号 以满足跳转指令要求 特点 每个按键占用一条I O线 当按键数量较多时 I O口利用率不高 但程序编制简单 适用于所需按键较少的场合 特点 电路连接复杂 但提高了I O口利用率 软件编程较复杂 适用于需使用大量按键的场合 独立式按键的软件结构独立式按键软件常采用查询式结构 先逐位查询每根I O口线的输入状态 如某一根I O口线输入为低电平 则可确认该I O口线所对应的按键已按下 然后 再转向该键的功能处理程序 矩阵式键盘的结构及原理矩阵式键盘由行线和列线组成 按键位于行 列线的交叉点上 其结构如下图所示 由图可知 一个4 4的行 列结构可以构成一个含有16个按键的键盘 显然 在按键数量较多时 矩阵式键盘较之独立式按键键盘要节省很多I O口 矩阵式键盘中 行 列线分别连接到按键开关的两端 行线通过上拉电阻接到 5V上 当无键按下时 行线处于高电平状态 当有键按下时 行 列线将导通 此时 行线电平将由与此行线相连的列线电平决定 这是识别按键是否按下的关键 然而 矩阵键盘中的行线 列线和多个键相连 各按键按下与否均影响该键所在行线和列线的电平 各按键间将相互影响 因此 必须将行线 列线信号配合起来作适当处理 才能确定闭合键的位置 扫描法和线反转法 0123eedebe7e4567edddbd7d89ABebdbbb7bCDEFe7d7b777 键盘控制流程 单片机对矩阵式键盘接口处理的一般过程如图所示 键扫描 消抖 求键码 等待释放 按键处理 图3 4键盘处理流程框图 1 键扫描 键扫描就是要判断有无键按下 当扫描到有键按下时再进行下一步处理 否则退出键盘处理程序 独立式键盘扫描只需读取IO口状态 而矩阵式键盘描通常有两种实现方法 逐行扫描法和线反转法 1 逐行扫描法 依次从第一至最末行线上发出低电平信号 如果该行线所连接的键没有按下的话 则列线所接的端口得到的是全 1 信号 如果有键按下的话 则得到非全 1 信号 0111 1111 1011 1110 1101 1111 1110 1111 设第2行第4列键按下 行线输出 列线输入 0111 1111 1011 1110 1101 1111 1110 1111 2 线反转法 线反转法也是识别闭合键的一种常用方法 该法比行扫描速度快 但在硬件上要求行线与列线外接上拉电阻 先将行线作为输出线 列线作为输入线 行线输出全 0 信号 读入列线的值 那么在闭合键所在的列线上的值必为0 然后从列线输出全 0 信号 再读取行线的输入值 闭合键所在的行线值必为0 这样 当一个键被按下时 必定可读到一对唯一的行列值 再由这一对行列值可以求出闭合键所在的位置 0000 1110 0000 1011 设第2行第4列键按下 列值 1110 行值 1011 由于按键按下时的机械动作 在按键被按下或松开的瞬间 其输出电压会产生波动 称为键的抖动 2 消抖 为确保每按一次键单片机只进行一次处理 使键盘可靠地工作 必须消除按键抖动 消抖方法有硬件消抖和软件延时两种 图3 5键闭合及断开时的抖动 1 硬件消抖法 就是在键盘中附加去抖动电路 从根上消除抖动产生的可能性 右图所示电路实际上是由R S触发器构成的单脉冲电路 当按钮开关按下时Q端输出低电平 当开关松开时Q端恢复高电平 即输出一个负脉冲 以此消除抖动 图3 6硬件去抖动电路 2 软件消抖法 键按下的时间与操作者的按键动作有关 约为十分之几到几秒不等 而键抖动时间与按键的机械特性有关 一般为5 10ms不等 软件消抖法即是采用延时 一般延时10 20ms 的方法 以避开按键的抖动 即在按键已稳定地闭合或断开时才读出其状态 图3 7软件消抖法延时区间示意图 3 计算键码 键码是每个按键的标识 被按键确定下来之后 接下来的工作是计算闭合键的键码 然后才能根据键码进行对应的操作 为编程方便 键码通常都是以键的排列顺序安排 按照从左到右 从上向下的顺序编排 键码可根据行号列号以查表求得 也可通过计算得到 我们将结合实例加以介绍 4 等待释放 等待释放是为了保证键的一次闭合仅进行一次处理 求得键码后 然后通过不断进行键扫描 如有键按下 则继续扫描 否则认为键已释放 5 按键处理 根据系统功能要求 利用单片机控制完成特定操作 键盘接口的控制方式 在单片机的运行过程中 何时进行键盘扫描和处理 可有下列三种情况 1 查询方式 单片机通过调用键盘扫描子程序 查询有无键按下 2 定时扫描方式 每隔一定时间执行一次键盘扫描子程序 3 中断方式 每当有键闭合时才向CPU发出中断请求 中断服务时进行键盘扫描和处理 开关输入的连接方法 当需要使用的开关数量较少时 一般直接使用独立式按键输入 每个开关占用一个端口 其优点是编程简单 缺点是占用端口资源多 当需要的开关数量较多 CPU端口不够用时 使用矩阵式输入 其优点是占用端口资源少 缺点是编程比较复杂 本任务中使用独立式按键输入方法 图3 8所示为一个独立式按键输入的常用连接方法 当按键按下时CPU端口为 0 当按键松开时CPU端口为 1 通过程序读取端口状态就能知道开关的状态 硬件知识 1 硬件电路原理图 图3 8独立式按键输入 端口在上拉电阻的作用下保持为高电平按键按下端口为低电平状态 输入逻辑 0 输入逻辑 1 2 模拟开关灯 参考程序如下 ORG0000HL1 JBP3 2 L2 如果P3 2的状态为1 1号键未按 则跳转到L2CLRP0 0 1号键按下 P0 0清0 输出低电平 LED发光SJMPL1L2 JBP3 3 L1 如果P3 3的状态为1 2号键未按 则跳转到L1SETBP0 0 2号键按下 P0 0置1 输出高电平 LED熄灭SJMPL1END 按下1号键时 P3 2 0 程序从L1顺序执行 P0 0被清0 输出低电平 LED发光 1号键未按下 程序跳转到L2 检测2号键 即P3 3的状态 如果P3 3的状态为1 2号键未按 则跳转到L1 完成一个循环 如果P3 3的状态为0 2号键被按下 程序从L2顺序执行 P0 0置1 输出高电平 LED熄灭 最后执行SJMPL1 回到开始处继续执行 3 按键控制任意LED灯点亮 参考程序如下 ORG0000H 定位伪指令 指定下一条指令的地址 第一条指令必须放在0000HL1 MOVA P3 把P3口的状态读入累加器A中RLA A中的内容循环左移RLAMOVP0 A 把A中的数据送到P0口 控制P0口输出电平 控制LED亮灭SJMPL1 返回L1 循环执行程序END 结束伪指令在以上的这段程序中 加了两条RLA指令 实现了两次左移 这样P3 2 P3 3 P3 4 P3 5分别控制P0 4 P0 5 P0 6 P0 7引脚连接的LED灯 由于P0口的排列顺序问题 在实验板上看起来灯是右移了 if语句if语句是C51中的一个基本条件选择语句 它通常有三种格式 1 if 表达式 语句 2 if 表达式 语句1 else 语句2 3 if 表达式1 语句1 elseif 表达式2 语句2 elseif 表达式3 语句3 elseif 表达式n 1 语句n 1 else 语句n 例 if语句的用法 1 if x y printf x d y d n x y 执行上面语句时 如果x不等于y 则输出x的值和y的值 2 if x y max x elsemax y 执行上面语句时 如x大于y成立 则把x送给最大值变量max 如x大于y不成立 则把y送给最大值变量max 使max变量得到x y中的大数 3 if score 90 printf YourresultisanA n elseif score 80 printf YourresultisanB n elseif score 70 printf YourresultisanC n elseif score 60 printf YourresultisanD n elseprintf YourresultisanE n 执行上面语句后 能够根据分数score分别打出A B C D E五个等级 if语句通过嵌套可以实现多分支结构 但结构复杂 switch是C51中提供的专门处理多分支结构的多分支选择语句 它的格式如下 switch 表达式 case常量表达式1 语句1 break case常量表达式2 语句2 break case常量表达式n 语句n break default 语句n 1 说明如下 1 switch后面括号内的表达式 可以是整型或字符型表达式 2 当该表达式的值与某一 case 后面的常量表达式的值相等时 就执行该 case 后面的语句 然后遇到break语句退出switch语句 若表达式的值与所有case后的常量表达式的值都不相同 则执行default后面的语句 然后退出switch结构 3 每一个case常量表达式的值必须不同否则会出现自相矛盾的现象 4 case语句和default语句的出现次序对执行过程没有影响 5 每个case语句后面可以有 break 也可以没有 有break语句 执行到break则退出switch结构 若没有 则会顺次执行后面的语句 直到遇到break或结束 例 switch case语句的用法 对学生成绩划分为A D 对应不同的百分制分数 要求根据不同的等级打印出它的对应百分数 可以通过下面的switch case语句实现 switch grade case A printf 90 100 n break case B printf 80 90 n break case C printf 70 80 n break case D printf 60 70 n break case E printf 60 n break default printf error n 8 1 2键盘接口的控制方式 在单片机的运行过程中 何时进行键盘扫描和处理 可有下列三种情况 1 查询方式 单片机通过调用键盘扫描子程序 查询有无键按下 2 定时扫描方式 每隔一定时间执行一次键盘扫描子程序 3 中断方式 每当有键闭合时才向CPU发出中断请求 中断服务时进行键盘扫描和处理 5 1 2键盘接口和键输入软件中应解决的几个问题1 消除键抖动 if语句if语句是C51中的一个基本条件选择语句 它通常有三种格式 1 if 表达式 语句 2 if 表达式 语句1 else 语句2 3 if 表达式1 语句1 elseif 表达式2 语句2 elseif 表达式3 语句3 elseif 表达式n 1 语句n 1 else 语句n 例 if语句的用法 1 if x y printf x d y d n x y 执行上面语句时 如果x不等于y 则输出x的值和y的值 2 if x y max x elsemax y 执行上面语句时 如x大于y成立 则把x送给最大值变量max 如x大于y不成立 则把y送给最大值变量max 使max变量得到x y中的大数 3 if score 90 printf YourresultisanA n elseif score 80 printf YourresultisanB n elseif score 70 printf YourresultisanC n elseif score 60 printf YourresultisanD n elseprintf YourresultisanE n 执行上面语句后 能够根据分数score分别打出A B C D E五个等级 例 switch case语句的用法 对学生成绩划分为A D 对应不同的百分

温馨提示

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

评论

0/150

提交评论