1.按键输入电路
用开关给单片机输入的信号称为开关量。开关有断开和闭合两种状态,因此用开关给单片机输入的开关量有“1”和“0”两种。
实际上,逻辑“1”的电平为1.9~5.5V,逻辑“0”的电平为-0.5~0.9V,如果电压为0.9~1.9V中的某个值,则无法判别“1”或“0”。
图3-15所示方式2是1种常用的开关输入电路。在理想状态下,当按下开关S2时,给单片机输入一个“0”(低电平);当S2断开时,则给单片机输入一个“1”(高电平),其中10kΩ电阻为上拉电阻。
方式3为简易按键方案,Proteus仿真中使用较多。
方式4是使用了三态缓冲电路的一种方案,该方案触发更加稳定,但增加了硬件成本,在信号要求较高的场合使用较多。
方式1是一种典型的错误,将I/O接口直接连接电源是严重错误,会损坏单片机内部的场效应晶体管,同时如果按钮按下,会造成电源与地的直接连通,对电源造成较大损害。因此杜绝使用此方式。
2.键盘简单操作
开关可以给单片机输入信号,但单个开关实现的输入功能少,因此需采用多按键来解决问题,这就需要键盘。键盘是由多个按键组成的,在使用时,它需要与键盘输入电路组合在一起。单片机常用的键盘输入电路有:独立式键盘输入电路和矩阵式键盘输入电路。这里先介绍独立式键盘输入电路。
独立式键盘输入电路如图3-16所示。该键盘采用了8只按键S0~S7,它们分别接到单片机的P1.0~P1.7引脚。当按下某只按键时,相应的引脚为低电平;按键弹起时,引脚为高电平。
图3-15 简单的开关输入电路
图3-16 独立式键盘输入电路
为了让单片机能识别按下了哪只按键,需要编写程序,再将程序汇编后写入单片机,在程序的控制下,单片机就能识别按下了哪只按键,并执行相应的操作。两个按键的程序结构如下:
如果按键较多,则需要进行按键扫描,按键程序的编写思路是:(www.xing528.com)
1)进行按键扫描,检测是否有按键按下。
2)其次进行读键码,确认哪个按键被按下。如果确认有按键按下,则依次检测P1.0~P1.7端口的电平,当检测到某端口为低电平时,表明该端口所接的按键被按下,则去执行按下该按键所对应的子程序。
3)再次进行按键处理,执行相应按键对应的子程序。相应子程序功能实现后,需等待按键弹起后,才能继续进行按键扫描。小提示
如果按键较少,按键程序的编写可以省去按键扫描的过程。读者可以在例3-10中0~9循环的基础上加上两个按键变为加减计数器。
【例3-11】如图3-16所示,每按下一次按键,对应的小灯亮灭交替一次。
本程序虽然简单,但它演示了单片机独立键盘编程的基本思路,程序并不实用,比如本程序中按键扫描耗费了大量的时间,比如实际工作中遇到按键抖动造成的按键误触发问题,这些问题读者可尝试解决。
独立式键盘配置灵活,软件结构简单,但每个按键必须占用一根接口线,在按键数量较多时,将占用较多接口线,因此,独立式按键常用于按键数量不多的场合。
3.一键多功能识别
本实例中,只需要两个按键,但是每个按键都有多种功能,这种按键我们称之功能键。例如每按下一次按键S1,流水灯的方式都会转换一次,本实例有n种流水灯方式,按键S1的功能就有n种。那么,如何实现这种功能键的编程呢?
在我们生活中,我们每个人都有一张身份证,系统很容易通过这张身份证判断这个人的姓名、年龄、户口、房产等资料。每个人的身份证号码都是独一无二的。同样,对于要通过一个按键来识别每种不同的功能,我们给每个不同的功能模块用不同的身份证号码(ID),这样,每按下一次按键,身份证号码的值是不相同的,所以单片机就很容易识别不同功能的身份了。
图3-17是一张一个按键四种功能的简易流程图。参照此流程图读者可尝试编辑本实例的流程图。
图3-17 一键多功能识别示例流程图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。