浅谈单片机系统中的按键编程
- 格式:doc
- 大小:64.00 KB
- 文档页数:9
单片机键盘输入编程电路设计
输入电路的设计
1、电路的结构
本文的电路设计主要是用于实现单片机键盘输入编程的功能,所以电路的结构从上到下分为三部分,分别是:
(1)键盘输入部分:由上排按键及下排按键,两排按键组成。
(2)电源部分:由DC电源组成。
(3)输出部分:由多路复用器(一般称为MUX),控制部分组成,多路复用器可以将键盘输入的按键信号转变为单片机可以识别的数据位,控制部分是连接单片机的部分,可以与单片机连接,以实现键盘输入指令的操作。
2、基本电路
本文设计的电路主要由以下电路组件构成:
(1)DC电源:由7805,5V的DC电源模块组成,用于给键盘、多路复用器和控制部分提供电源。
(2)键盘输入部分:由上排按键及下排按键组成,每行按键由四列电路器件组成,四列电路器件的抽头线连接在一起,以实现按键的控制,当按键按下时,输入信号为低电平,反之,当按键处于松开状态时,输入信号为高电平。
(3)多路复用器:多路复用器主要用于将键盘输入的多个按键信号转换为单片机可以识别的数据,该多路复用器的信号输入端接收键盘上每行按键输入的信号。
单片机中的按键输入技术与应用1. 引言单片机作为现代电子设备不可或缺的一部分,广泛应用于各个领域,如家用电器、通信设备、医疗设备等。
而按键输入作为用户与单片机之间的主要交互方式,对于用户体验和功能设计起到至关重要的作用。
本文将介绍单片机中的按键输入技术与应用。
2. 按键输入技术概述按键输入技术是通过按下按钮或按键,将机械运动转化为电信号输入到单片机中的过程。
在单片机中,常用的按键输入技术有矩阵按键、串行按键和编码器按键。
2.1 矩阵按键矩阵按键是按键排列成矩阵的方式,通过按键的行列连接,将按键和单片机进行连接。
单片机通过扫描按键的行和列,获取按键的状态。
矩阵按键的优点是可以通过少量的引脚实现多个按键,缺点是扫描速度较慢,适用于按键数量较小的场景。
2.2 串行按键串行按键是将多个按键连接在同一个引脚上的方式,通过按下不同的按键,改变引脚上的电压状态,单片机通过读取引脚上的电压状态判断按键的状态。
串行按键的优点是线路简单,适用于按键数量较少的场景,缺点是无法同时检测多个按键。
2.3 编码器按键编码器按键是通过旋转编码器来改变引脚上的电压状态,单片机通过读取引脚上的电压状态判断编码器的旋转方向和速度。
编码器按键的优点是可以实现精确的旋转控制,适用于需要精细调节的场景,缺点是线路复杂,成本较高。
3. 按键输入应用实例在单片机的应用中,按键输入技术被广泛应用于各个领域。
3.1 家用电器在家用电器中,按键输入常用于控制开关、调节参数等功能。
例如,电视遥控器通过按键输入实现频道切换、音量调节等功能;空调面板通过按键输入实现温度调节、模式切换等功能。
3.2 通信设备在通信设备中,按键输入常用于拨号、发送短信等功能。
手机键盘通过按键输入实现电话号码的输入;对讲机通过按键输入实现频道切换、通话等功能。
3.3 医疗设备在医疗设备中,按键输入常用于设备的控制和参数调节。
例如,血压计通过按键输入实现启动测量、查看测量结果等功能;输液泵通过按键输入实现流量调节、报警设置等功能。
单片机按键程序设计单片机按键的基本原理其实并不复杂。
通常,按键就是一个简单的开关,当按键按下时,电路接通,对应的引脚电平发生变化;当按键松开时,电路断开,引脚电平恢复到初始状态。
在程序设计中,我们需要不断检测引脚的电平变化,从而判断按键是否被按下。
在实际的按键程序设计中,有多种方式可以实现按键检测。
其中一种常见的方法是查询法。
这种方法是通过不断地读取按键对应的引脚状态来判断按键是否被按下。
以下是一个简单的查询法示例代码:```cinclude <reg51h> //包含 51 单片机的头文件sbit key = P1^0; //定义按键连接的引脚void main(){while(1) //无限循环{if(key == 0) //如果按键按下,引脚为低电平{//执行按键按下的操作//比如点亮一个 LED 灯P2 = 0xfe;while(key == 0);//等待按键松开}}}```上述代码中,我们首先定义了按键连接的引脚`key`,然后在主函数的无限循环中不断检测按键引脚的状态。
当检测到按键按下时,执行相应的操作,并通过`while(key == 0)`等待按键松开。
除了查询法,还有中断法可以用于按键检测。
中断法的优点是能够及时响应按键动作,不会因为程序的其他操作而导致按键响应延迟。
```cinclude <reg51h> //包含 51 单片机的头文件sbit key = P1^0; //定义按键连接的引脚void int0_init()//中断初始化函数{IT0 = 1; //下降沿触发中断EX0 = 1; //使能外部中断 0EA = 1; //开总中断}void int0() interrupt 0 //外部中断 0 服务函数{//执行按键按下的操作//比如点亮一个 LED 灯P2 = 0xfe;}void main(){int0_init();//初始化中断while(1);//无限循环,保持程序运行}```在上述代码中,我们首先在`int0_init` 函数中对中断进行了初始化设置,然后在`int0` 函数中编写了按键按下时的处理代码。
单片机按键电路工作原理1 单片机按键电路简介单片机按键电路,是指在单片机系统中,通过按键来输入信号,并且控制相应的操作。
按键电路一般由按键开关、电阻、电容、滤波电路等组成,实现信号输入、去抖动等功能。
本文将介绍单片机按键电路的工作原理。
2 单片机按键电路原理当按键按下时,按键被连接的引脚会将电平拉低。
当单片机检测到这个引脚的电平由高变低,即被称为下降沿触发,此时单片机开始执行相应的操作。
按键引脚的电平由于存在去抖动电路和滤波电路的干扰,会在刚刚触发时产生一些波动,这种波动会导致按键信号被误检测。
因此,按键电路中必须加入去抖动和滤波功能,来保证信号的稳定和正确。
3 去抖动电路去抖动电路是为了解决按键被弹起时,由于按键内部接触的不良,会引起按键触点反复接触的问题。
常用去抖动电路有RC电路和较新的狗屎水晶(CS)电路。
RC电路的原理是将一个大电容和一个小电阻放在按键两端,当按键被按下时,大电容被充电,当按键弹起时,电容放电时间远远大于按键反弹的时间,达到去抖的效果。
RC电路的缺点是,当按键触点老化时,会导致电容充电电路变差,去抖效果受到影响。
狗屎水晶(CS)电路的原理是使用一个晶体管控制一个电阻和一个电容的充放电过程,根据晶体管的最小电压放大系数来控制电容充电时间,从而达到去抖的效果,CS电路有一个很大的优点,就是它是数字化的,因此精度高,不受长期使用而导致松脱等因素的影响。
4 滤波电路滤波电路一般是为了消除信号中的杂波和抖动,使信号更加稳定。
常用的滤波电路有LC滤波电路和RC滤波电路。
LC滤波电路是通过一个电感和一个电容组成的,它的原理是在输入信号中移除高频杂波和电磁干扰,并从输入信号中提取出的低频信号,以保证输入信号质量。
RC滤波电路是由一个电阻和一个电容组成的,它的原理是在输入信号中移除杂波和抖动,以保证输入信号没有误检测。
5 实际应用在实际应用中,单片机按键电路的原理和应用可以推广到各种电路控制中。
单片机按键程序设计及电路设计
在单片机应用系统中,按键主要有两种形式:1、直接按键;2、矩阵编码键盘。
直接按键的每个按键都单独接到单片机的一个I/O 口上,直接按键则
通过判断按键端口的电位即可识别按键操作;而矩阵键盘通过行列交叉按键编
码进行识别。
下面我们以S51 增强型单片机实验板的直接按键来学习单片机轻触按键在单片机系统中的应用。
S51 增强型单片机实验板的4 个轻触按键原理图
图1S51 增强型单片机轻触按键原理图
一、按键时序分析
通常所用的按键为轻触机械开关,正常情况下按键的接点是断开的,当我
们按压按钮时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳
定地接通,在断开时也不会一下子断开。
因而机械触点在闭合及断开的瞬间均
伴随有一连串的抖动,按键的时序如下图2 所示,抖动时间的长短由按键的机械特性及操作人员按键动作决定,一般为5ms~20ms;按键稳定闭合时间的长短是由操作人员的按键按压时间长短决定的,一般为零点几秒至数秒不等。
轻触按键操作时序示意图
图2
从上面图2 中我们可以看到,一次完整的击键过程,包含以下5 个阶段:1. 等待阶段:此时按键尚未按下,处于空闲阶段。
2. 前沿(闭合)抖动阶段:此时按键刚刚按下,但按键信号还处于抖动状态,这个时间一般为
5~20ms。
为了确保按键操作不会误动作,此时必须有个前沿消抖动延时。
3. 键稳定阶段:此时抖动已经结束,一个有效的按键动作已经产生。
系统应该在。
单⽚机按键处理⽅式(⼀)——典型的按键处理⽅式前⾔ 按键处理是学习单⽚机的必修课之⼀。
⼀次按键的过程,并⾮是⼀个理想的有⼀定宽度的电平脉冲,⽽是在按下、弹起过程中存在抖动,只有在中间阶段电平信号是稳定的。
⼀次典型的按键过程是酱紫的: 在抖动过程中,电平信号⾼低反复变化,如果你的按键检测是检测下降沿或上升沿或者是⽤外部中断检测按键,都可能在抖动时重复检测到多次按键。
这就是在未消抖的按⼀次键显⽰值加1的程序中,出现按⼀次键显⽰值+2、+3甚⾄加更多的原因。
对于按键消抖,常⽤的有硬件消抖和软件消抖。
本⽂是我个⼈对按键处理的⼀些常见⽅法的总结,由于我本⼈不太懂硬件,所以这⾥只讨论独⽴按键的软件消抖实现。
⽔平有限,如有错误请不吝指正。
硬件环境 本⽂代码均在单⽚机STC90C516RD+、晶振12.0MHz硬件环境下试验通过。
带消抖的简单的按键处理 最简单的消抖处理就是在⾸次检测到电平变化后加⼀个延时,等待抖动停⽌后再次检测电平信号。
这也是⼤多数单⽚机教程讲述的消抖⽅式。
但在实际应⽤中基本不⽤这种⽅式,原因后⾯讲,先看代码://⽅法⼀:带消抖的简单的按键处理#include <reg52.h>#define GPIO_KEY P1 //8个独⽴按键IO⼝#define GPIO_LED P0 //8个LED灯,⽤于显⽰键值unsigned char ScanKey();void DelayXms(unsigned char x);void main(){unsigned char key;GPIO_LED = 0x00; //初始化LEDwhile (1){key = ScanKey(); //读取键值// if (0xff != key) //若有键按下,则更新LED的状态GPIO_LED = ~key; //点亮LED}}unsigned char ScanKey(){unsigned char keyValue = 0xff; //赋初值,0xff表⽰没有键按下GPIO_KEY = 0xff; //给按键IO⼝置位if (0xff != GPIO_KEY) //检查按键IO⼝的电平,如有键按下则不为0xff{DelayXms(15); //延时15ms,滤掉抖动。
单片机控制多个按键的方法在很多嵌入式系统中,通常会用到按键进行输入。
单个按键的控制可能相对简单,但是如果需要控制多个按键,就需要用到一些特殊的控制方法。
常用的按键控制方法主要有以下几个方面:1、轮询法:采用逐个扫描的方式来检测按键状态。
2、中断法:接入外部中断口,当按键被按下时,会触发中断,系统会响应中断并执行相应的程序。
3、计时器法:通过计时器的方式来检测按键状态,利用定时器可以定时检测按键的状态。
如果需要控制多个按键,就需要采用一些特殊的控制方法:1、矩阵按键法:将多个按键以矩阵的方式进行排列,通过某种方法对行和列进行扫描,以检测按键的状态。
三、常用的按键检测程序以下是一个常用的按键检测程序,可以用于单片机控制多个按键:void key_scan(void){unsigned char read_date, key1, key2, key3, key4;// 初始化按键控制端口为输入模式P3M0 = 0x00;P3M1 = 0x00;// 所有按键端口均拉高,等待按键输入P3 = 0xff;// 等待按键输入Delay_ms(20);// 读取P3端口状态// 获得按键1状态key1 = read_date & 0x01;// 获得按键2状态key2 = read_date & 0x02;// 获得按键3状态key3 = read_date & 0x04;// 获得按键4状态key4 = read_date & 0x08;// 判断按键1是否被按下if (key1 == 0){// 按键1被按下,执行相应的操作 }// 判断按键2是否被按下if (key2 == 0){// 按键2被按下,执行相应的操作 }// 判断按键3是否被按下if (key3 == 0){// 按键3被按下,执行相应的操作 }// 判断按键4是否被按下{// 按键4被按下,执行相应的操作}}四、总结单片机控制多个按键的方法,需要采用特殊的控制方法,例如矩阵按键法和编码按键法等。
单片机2个按键互锁c语言程序,单片机按键点动互锁程序源程序如何编写一个单片机按键点动互锁的C语言程序?单片机按键点动互锁是一种常见的应用场景,通过编写相关的C语言程序可以实现按键的互锁功能。
在这篇文章中,我将一步一步地回答如何编写这样一个程序。
首先,我们需要了解一些基本概念和原理。
单片机是一种集成电路,可以实现各种功能。
按键是一种输入设备,通常用于接收用户的输入信号。
点动是指按下按钮后立即释放按钮。
互锁是指两个或多个按键之间的相互作用,在某一个按键按下的同时,其他按键是不能按下的。
接下来,我们就可以开始编写程序了。
第一步,我们需要定义端口和引脚的初始状态。
在单片机中,端口是一组相邻的IO引脚,我们可以将某个引脚设为输入或输出。
在这个程序中,我们需要将两个按键连接到单片机的两个不同的引脚上,并将这两个引脚设为输入。
C#include <reg51.h>sbit button1 = P1^0;sbit button2 = P1^1;其中,sbit关键字用于定义一个特殊的数据类型,表示单片机的一个引脚。
第二步,我们需要实现一个延时函数,用于保证按键被稳定地读取。
由于单片机的执行速度非常快,如果没有延时函数,可能会导致按键抖动。
Cvoid delay(unsigned int k){unsigned int i, j;for(i = 0; i < k; i++)for(j = 0; j < 123; j++);}第三步,我们需要编写一个函数用于检测按键的状态。
在这个函数中,我们将使用一个while循环来检测按键是否被按下。
Cunsigned char button_pressed(){while(1){if(button1 == 0){delay(10); 延时10msif(button1 == 0){while(button1 == 0); 等待按键释放return 1; 返回按键1被按下的状态}}if(button2 == 0){delay(10); 延时10msif(button2 == 0){while(button2 == 0); 等待按键释放return 2; 返回按键2被按下的状态}}}}在这个函数中,我们首先检测按键1的状态,如果按键1被按下,延时一段时间后再次检测按键1的状态,如果按键1仍然被按下,则返回按键1被按下的状态。