微处理器程序设计技术

上传人:宝路 文档编号:48239870 上传时间:2018-07-12 格式:PPT 页数:86 大小:1.57MB
返回 下载 相关 举报
微处理器程序设计技术_第1页
第1页 / 共86页
微处理器程序设计技术_第2页
第2页 / 共86页
微处理器程序设计技术_第3页
第3页 / 共86页
微处理器程序设计技术_第4页
第4页 / 共86页
微处理器程序设计技术_第5页
第5页 / 共86页
点击查看更多>>
资源描述

《微处理器程序设计技术》由会员分享,可在线阅读,更多相关《微处理器程序设计技术(86页珍藏版)》请在金锄头文库上搜索。

1、键盘输入接口与状态机编程 摘自1、 通用I/O数字输入接口设计 假如把一个单片机嵌入式系统比做一个人 的话,那么单片机就相当于人的心脏和大 脑,而输入接口就好似人的感官系统,用 于获取外部世界的变化、状态等各种信息 ,并把这些信息输送进人的大脑。嵌入式 系统的人机交互通道、前向通道、数据交 换和通信通道的各种功能都是由单片机的 输入接口及相应的外围接口电路实现的。o对于一个电子系统来讲,外部现实世界各种 类型和形态的变化和状态都需要一个变换器 将其转换成电信号,而且这个电信号有时还 需要经过处理,使其成为能被MCU容易识别 和处理的数字逻辑信号,这是因为单片机常 用的输入接口通常都是数字接口(

2、A/D接口 ,模拟比较器除外,他们属于模拟输入口, 而是在芯片内部将模拟信号转换成数字信号 的)o上述的“变换器”和“转换处理”从专业的角度讲 就是“传感器技术”和“信号调理电路”。因此, 一个单片机嵌入式系统的设计和开发人员要 具备这些专业知识和技能,不仅要熟悉一些 常用传感器的特性和应用,以及相关的信号 调理、转换、接口电路,还要跟踪国际上新 技术的发展,将新型传感器器件和新型电路 元器件应用于系统设计中。o采用新型传感器器件和新型电路元器件,可 以大大提高嵌入式系统设计的效率,简化系 统的硬件结构和软件设计难度,缩短开发周 期,提高系统的性能和可靠性。o根据系统外围电路输入的电信号形式,

3、可以 把输入信号分为以下几种形式:1.1.1 I/O输入接口硬件设计要点 (1) 模拟信号和数字信号。传感器将某个外部参数(如温度、转速) 的变化转换成电信号。如果传感器输出电信 号的幅度变化特征代表了外部参数的变化, 如电压的升高下降(电流增大减小)表示温 度高低的变化,那么这个传感器就是模拟传 感器,它产生是模拟信号。由于MCU是数字 化的,因此模拟信号要转换成数字信号才能 由MCU处理。转换电路称为模数转换“A/D” 。A/D变换是嵌入式系统重要的外围接口电 路之一,用途广泛。在系统硬件设计中可以 选取专用的A/D变换芯片作为模拟传感器和 单片机之间的接口,也可以选取片内带A/D 转换功

4、能的单片机以简化硬件电路的设计。(2) 电压信号和电流信号 o单片机I/O接口的逻辑是数字电平逻辑,既 以电压的高和低电平作为逻辑“1”和“0”,因 此进入单片机的信号要求是电压信号。一些 传感器的输出是电流信号,甚至是微小的电 流,那么在进入单片机前还需要将电流信号 放大、并把电流转换成电压的信号调理电路 。o在一些长远距离的应用中,考虑到电压信号 的抗干扰能力差,长线衰减等因素,往往在 一端把电压信号变成电流信号,在长线中传 送电流,而在另一端再把电流信号再转换成 电压信号,这样大大提高了信号传输的可靠 性,如RS-485通信等。另外,为了防止外 部强电信号对嵌入式系统的冲击而使用的光 电

5、隔离技术,也采用电流/电压变换方法。(3) 单次信号和连续信号o间隔时间较长单次产生的脉冲信号,以及较 长时间保持电平不变化的信号称为单次信号 。常见的单次信号一般是由按键、限位开关 等人为动作或机械器件产生的信号。而连续 信号一般指连续的脉冲信号,如计数脉冲信 号,数据通信传输等。o单次信号要注意信号的纯净和抗干扰,如消 除按键的抖动,外部的干扰等。在图中,外 部状态开关与系统之间采用电流传输方式, 在系统入口串接磁阻线圈。当外部开关闭合 后,回路中有大电流通过,光电器件导通输 出“0”;o而在开关断开后,回路中无电流流通,光电 器件不会导通输出“1”。空间的电磁信号会 在传输线上产生高频的

6、干扰信号,磁阻线圈 则对高频信号起到阻碍作用,使电流不能突 变。o另外空间电磁干扰往往能产生较高的干扰电 压,但不会产生大的干扰电流(“状态1”-“状态2”,最后返回到“状态 0”的。并且在整个过程中,按键的输出 信号仅在“状态1”时给出了唯一的一次确 认按键闭合的信号“1”(其它状态均输出 “0”)。o所以上面状态机所表示的按键系统,不仅克 服了按键抖动的问题,同时也确保在一次按 键整个的过程中,系统只输出一次按键闭合 信号(“1”)。换句话讲,不管按键被按下 的时间保持多长,在这个按键的整个过程中 都只给出了一次确认的输出,因此在这个设 计中,按键没有“连发”功能,它是一个最简 单和基本的

7、按键。o一旦有了正确的状态转换图,就可以根据状 态转换图编写软件了。在软件中实现状态机 的方法和程序结构通常使用多分支结构(IF -ELSEIF-ELSE、CASE等)实现。下面基 于状态机方式编写的简单按键接口函数 read_key()。o该简单按键接口函数read_key()在整个系 统程序中应每隔10ms调用执行一次,每次 执行时将先读取与按键连接的I/O的电平到 变量key_press中,然后进入用switch结构 构成的状态机。oswitch结构中的case语句分别实现了3个不 同状态的处理判别过程,在每个状态中将根 据状态的不同,以及key_press的值(状态 机的输入)确定输出

8、值(key_return), 和确定下一次按键的状态值(key_state) 。o函数read_key()的返回参数提供上层程序使 用。返回值为0时,表示按键无动作;而返回 1表示有一次按键闭合动作,需要进入按键处 理程序做相应的键处理。o在函数read_key()中定义了3个局部变量, 其中key_press和key_return为一般普通 的局部变量,每次函数执行时,key_press 中保存着刚检测的按键值。key_return为 函数的返回值,总是先初始化为0,只有在 状态1中重新置1,作为表示按键确认的标志 返回。o变量key_state非常重要,它保存着按键的 状态值,该变量的值在

9、函数调用结束后不能 消失,必须保留原值,因此在程序中定义为 “局部静态变量”,用static声明。如果使用 的语言环境不支持static类型的局部变量, 则应将key_state定义为全局变量。单按键的实时时钟秒校时设置设计(一)1)硬件电路o在前面的章节中曾几次给出了简易实时时钟 的设计例子,但都没有加入按键,不能实现 时钟校时的设置。下面结合上面的按键接口 的设计,实现对时钟的校时设置。在该例子 中,只是实现了秒单元的校时设置,其重点 是让读者体会和实践按键输入接口和处理的 实现。o时钟系统的硬件电路在I/O口PD7上连接一 个按键K1,该按键的功能为秒加1,既每按 下一次,秒加1,到60

10、秒时分加1,秒回到 为0。2) 软件设计 以下是采用一个简单按键实现秒单元的校 时设置系统的程序。程序中,给出了采用一 个简单按键实现时钟校时(仅秒位)设置功 能的基本设计,时钟本身的计时显示方法用 秒闪烁表示(每秒种LED数码管的小数点段 闪烁一次)。oT/C0的工作于CTC方式,每2ms产生中断 。在T/CO中断服务中增加了10ms到的标 志变量key_stime_ok,作为按键状态机的 时间触发序列信号。在主程序中,每隔 10ms调用read_key()按键接口程序,当 函数返回值为1时,说明产生了一次按键操 作过程,秒位加1,然后进行时间调整。三、基于状态机分析的简单按键设计(二 )o

11、在上面的例子中,对秒的校时设置操作还是 不方便,例如,如果将秒从00设置为59, 需要按键59次。如果将按键设计成一个具有 “连发”功能的系统,就能很好的解决这个问 题。o现在考虑这样的一个按键系统:当按键按下 后在1秒内释放了,此时秒计时加1,而当按 键按下后在1秒内没有释放,那么以后每隔 0.5秒,秒计时就会自动加上10,直到按键 释放为止。这样的按键系统就具备了一种“ 连发”功能,其中时间也成为系统的一个输 入参数了。具有 “连发”功能的按键系统状态转换图o在图中,按键系统输出“1”表示按键在1秒内 释放了,输出“2”表示按键产生一次“连发” 的效果。下面是基于状态机方式编写的带“ 连发

12、”功能按键接口函数read_key_n()。 。o函数read_key_n()与前面的read_key() 结构非常类似,设计为每隔10ms被调用执 行一次,在构成状态机的switch结构中使用 了局部静态变量key_time作为按键时间计 数器,记录按键按下的时间值。o函数read_key_n()的返回参数提供上层程 序使用。返回值为0时,表示按键无动作; 返回1表示一次按键的“单发”(1s)动作 ;返回2表示一次按键的“连发”动作,提供 按键处理程序做相应的键处理。单按键的实时时钟秒校时设置设计(二)o主程序中,每隔10ms调用read_key_n() 按键接口程序,并根据其返回值对秒位的时 间进行加1或加10的处理。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号