单片机按键扫描程序 状态机方法

发布者:EtherealGaze最新更新时间:2015-02-10 来源: 51hei关键字:单片机  按键扫描程序  状态机 手机看文章 扫描二维码
随时随地手机看文章

#define key_input                PIND.7                        // 按键输入口
#define key_state_0        0
#define key_state_1        1
#define key_state_2        2

char read_key(void)
{
                static char key_state = 0;
                char key_press, key_return = 0;

                key_press = key_input;                                // 读按键I/O电平
                switch (key_state)
                {
                        case key_state_0:                                // 按键初始态
                                if (!key_press) key_state = key_state_1;        // 键被按下,状态转换到键确认态
                                break;
                        case key_state_1:                                // 按键确认态
                                if (!key_press)
                                {
                                        key_return = 1;                        // 按键仍按下,按键确认输出为“1”
                                        key_state = key_state_2;        // 状态转换到键释放态
                                }
                                else
                                        key_state = key_state_0;        // 按键已抬起,转换到按键初始态
                                break;
                        case key_state_2:
                                if (key_press) key_state = key_state_0;        //按键已释放,转换到按键初始态
                                break;
                }       
            return key_return;
}

 

 

另外一个原则就是设计的中断服务函数执行时间应该尽量的短。这样假如系统中使用多个中断的话,就是不采用中断嵌套的方式,也能够保证系统能够及时响应各个中断的请求。

所以我喜欢在定时中断中只使用一个标志变量,这样中断服务函数执行时间是最快的,就不会阻塞其它中断的及时响应,而在主程序中判断标志变量,然后再去扫描按键。尽管此时扫描的间隔已经不是严格意义上的10ms,或多或少都有一些延误,而且延误也是不确定的,但都不会影响按键扫描的正确性(一个按键的过程至少在300ms以上)。

设定一个定时器中断,每隔10MS 扫描一次按键。,读取值。。如果多个按键,又有多余的定时器,可以试试这个方法,效率高了。搞STM32 刚好。 cool.

关键字:单片机  按键扫描程序  状态机 引用地址:单片机按键扫描程序 状态机方法

上一篇:单片机接收PT2272无线接收模块问题
下一篇:带中断MSP430G2553控制程序和错误处理

推荐阅读最新更新时间:2024-03-16 13:53

基于单片机和PC机的温度监测系统设计
本文介绍了基于单片机和PC机的温度监测系统的设计,温度传感器采用DS18B20。下位机采用AT89S52单片机,可以显示温度和超限报警。PC机作为上住机设定上下限报警温度,接收单片机的温度数据,处理后实时显示温度和绘制温度曲线,还实现了超限报警和保存数据功能。上位机利用Matlab强大的数值计算、图形显示和串口操作功能,具有友好人机交互界面,实现了温度动态监测。温度是一个重要的物理量,在工农业生产和日常生活中,经常需要对环境温度进行监测。本文设计了一个温度监测系统,温度传感器采用DS18B20,下位机采用AT89S52单片机,实现温度测量、显示、超限报警等功能,上位机采用PC机,利用Matlab设计了友好人机交互界面,实现温度
[单片机]
基于<font color='red'>单片机</font>和PC机的温度监测系统设计
基于单片机IAP技术的LED显示屏控制系统
LED显示屏由于其具有耗电少、使用寿命长、成本低、亮度高、故障少、视角大、可视距离远等特点,已经成为新一代的信息传播媒体工具。LED与LCD相比较最突出的特点是,亮度高、成本低且屏幕尺寸可根据现场情况用标准LED单元板拼制。按安装位置可分为室外、半室外和室内;按颜色可分为单色、双基色和彩色;按发光二极管点距可分为φ5.0、φ3.75及φ3.0等。本文以市场上常见的室内双色LED单元板为控制对象,说明基于单片机IAP技术的LED显示屏控制系统工作原理以及数据组织方法。 1 双色LED单元板硬件组成及工作原理 常见的室内双色LED单元板电路框图如图1(a)所示。其中行扫描电路由2片74HC138(3-8译码器)构成的4-16译码器加
[单片机]
基于<font color='red'>单片机</font>IAP技术的LED显示屏控制系统
微芯推出nanoWatt XLP低功耗8位PIC单片机系列
Microchip Technology Inc.(美国微芯科技公司)今天宣布,推出采用nanoWatt XLP技术的全新8位PIC单片机(MCU)系列,可以实现极低的休眠电流。高性能、低功耗的PIC18F13K22、PIC18LF13K22、PIC18F14K22和PIC18LF14K22(PIC18F1XK22)MCU采用20引脚封装,能在1.8V至5.5V电压下工作,具备高达16 KB的闪存程序存储器。这些器件配备了包括支持mTouch容性触摸传感在内的增强型外设集,非常适合各种通用应用。 采用nanoWatt XLP技术,PIC18LF1XK22 MCU在电压为1.8V时,休眠电流的典型值可低至34 n
[单片机]
微芯推出nanoWatt XLP低功耗8位PIC<font color='red'>单片机</font>系列
基于PIC单片机构成的环境温湿度实时测控装置设计
环境条件中的温湿度指标是许多工作场合的重要参数,不论是仓库管理、图书保存还是工业测量与计量检定,都需要符合操作规定的温湿度环境条件。而温湿度也是最不易保障的指标,针对这一情况,研制可靠且实用的温湿度控制器显得非常重要。本文介绍的温湿度实时控制装置可在0~50℃和20%~98%RH(相对湿度)的范围内任意设定温湿度值,其附加的通信接口可方便地实现与计算机的实时通信,而且便于功能的扩展,可保证温度、湿度满足设计指标。此外,该装置还可自动控制多个设备的多点时间控制电路,因而具有更广泛的应用前景。该装置可实现的功能如下: ●在0~50℃和20%~98%RH间可任意设定温湿度控制点; ●可以实时监测环境温湿度的变化情况,并记录、存储
[单片机]
基于PIC<font color='red'>单片机</font>构成的环境温湿度实时测控装置设计
基于STM32F103C8T6 MCU的STM32 Blue Pill Board接口
在本教程中,我将介绍如何将DHT11湿度和温度传感器与基于STM32F103C8T6 MCU的STM32 Blue Pill Board接口。DHT11传感器的值由STM32读取,并显示在I2C LCD显示屏上。 介绍 传感器是很小的设备,可以弥合原始模拟世界与MCU的数字世界之间的鸿沟。传感器可以非常简单,例如非常著名的LM35温度传感器,也可以是一些复杂的数学单元,例如MPU6050陀螺仪和加速度计组合传感器。 简单或复杂,传感器是许多消费,汽车,机器人和工业应用中的关键部分,如果不集成适当的传感器就无法完成某些应用。 让我们从工业应用程序扩展到日常项目和业余爱好者。气象站是一个非常普遍且受欢迎的项目,无论是物联网
[单片机]
51单片机定时器/计数器的结构和原理
  定时器/计数器简称定时器,其作用主要包括产生各种时标间隔、记录外部事件的数量等,是微机中最常用、最基本的部件之一。803l单片机有2个16位的定时器/计数器:定时器0(T0)和定时器1(T1)。   T0由2个定时寄存器TH0和TL0构成,T1则由TH1和TL1构成,它们都分别映射在特殊功能寄存器中,从而可以通过对特殊功能寄存器中这些寄存器的读写来实现对这两个定时器的操作。作定时器时,每一个机器周期定时寄存器自动加l,所以定时器也可看作是计量机器周期的计数器。由于每个机器周期为12个时钟振荡周期,所以定时的分辨率是时钟振荡频率的1/12。作计数器时,只要在单片机外部引脚T0(或T1)有从1到0电平的负跳变,计数器就自动加1。计
[单片机]
51<font color='red'>单片机</font>定时器/计数器的结构和原理
基于89C51单片机的喷油校泵台调速系统设计
1 引言 燃油喷射系统的性能直接影响柴油机的工作过程和性能指标,是柴油机改善排放、降低油耗和提高性能的关键部分。传统的内燃机车柴油喷油校泵台主要用于喷油泵的磨合及性能试验,其驱动部分采用晶闸管电磁转差离合器无级调速系统,控制和显示喷油泵的主轴转速。由于采用分离元件,测试灵敏度低,设定调整不方便且故障率高。目前,国外喷油校泵台采用微机控制及数显系统。为此,按国际标准采用89C51单片机设计了一种新型的校泵台调速系统,能够实时控制主轴转速测试和调节,并将相关测量数据传输给上位PC机进行显示,从而提高测试灵敏度。 2 系统结构设计 该系统设计采用转速单闭环凋速系统,如图1所示。驱动电路由晶闸管和电机构成,而控制电路则由转速给定
[单片机]
基于89C51<font color='red'>单片机</font>的喷油校泵台调速系统设计
基于MCS-51单片机的IEEE-488接口设计
1 概 述 智能仪器程控接口电路的设计,首先是根据仪器的功能确定该仪器的接口功能。文中所涉及的仪器是以MCS-51系列单片机作为内部控制器的高速数据采集装置,由于A/D转换器既要向计算机输送采集结果,又要接受计算机对其工作条件的控制,因此,在程控接口电路设计时,设置了六种接口功能:源挂钩功能(选用SH1功能子集)、受者挂钩功能(选用AH1功能子集)、讲功能(选用T5功能子集)、听功能(选用L4功能子集)、远地/本地功能(选用RL功能子集)和器件触发功能(选用DT1功能子集)。 2 接 口 功 能 (IF) 设 计 如图1所示是该仪器的原理框图,其中接口功能电路由时序转换与信号控制电路、MC68488和四片M
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved