关于单片机按键问题性能提升总结

最近看了一本书《8051单片机创新教程》,这本书比大学课本写得好,在大学的课本中,我们常见的按键扫描程序如下:

unsinged char KeyScan(void)
{
 unsigned char KeyValue=0;
 if(KEY_IO != 0xFF) //检测到有按键按下
 {
 DelayNms(20); //延时 20 毫秒(严重影响单片机的运行效率)
 if(KEY_IO != 0xFF)//确认按键按下
 {
  switch(KEY_IO)
  {
  case 0xFE: KeyValue=1;break;
  case 0xFD: KeyValue=2;break;
  default : KeyValue=0;break;
  }
 }
 }
 return KeyValue;
}

在现实中,论坛上看到以下代码,我们不妨这样,没有用延时,运行效率大大提高!单片机实时性能显著提高!

//读取按键
uchar read_key()
{
  static int Key_on_off = 0 ;//按键自锁变量
  uchar num , temp ;
  num = P2 ;
  num &= 0xf0 ; //将低四位清0
  if(num != 0xf0)
  {
   if(Key_on_off == 0)
  {
   Key_on_off = 1 ;
  switch(num)
  {
  //返回按键的编码
  case 0xe0 : temp = 1 ; break ;
  case 0xd0 : temp = 2 ; break ;
  case 0xb0 : temp = 3 ; break ;
  case 0x70 : temp = 4 ; break ;
  }
  }
  }
  else
   Key_on_off = 0 ;
 return temp ;
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • 使用UART与PC通信实现msp430g2553单片机超声波测距示例

    适用于msp430g2553单片机  使用到了hc-sr04超声测距模块,使用UART与PC通信. 复制代码 代码如下: #include <msp430.h>long current_time;//最近一次测得时间/*MyPro*/#define LED_1 BIT0                      #define SW_2 BIT3                       #define TA1_1 BIT2                      //TA0.1 HC-S

  • android实现手机与单片机蓝牙模块通信

    本文实例为大家分享了android实现手机与单片机蓝牙模块通信的具体代码,供大家参考,具体内容如下 我是参考原博客的内容去写的,由于原博客写的不全,少了关键的几个类,然后我就凭借自己扎实的功底补出来了,现在蓝牙工作正常,能发能收!在看这边文章之前你要先了解一下蓝牙的工作状态,我的代码里面可能解释的不是很详细,但是我自己是能看懂的! package com.example.fsl.bluetooth; import android.app.Activity; import android.blue

  • c#实现51单片机频率计的代码分享(数字频率计设计)

    复制代码 代码如下: #include <reg51.h>#define uchar unsigned char#define uint unsigned int#define ulong unsigned long //按键sbit button=P1^7;//LEDsbit led2=P3^5;sbit led3=P3^7;//数码管位选sbit c0 = P3^0;sbit c1 = P3^1;sbit c2 = P3^2;sbit c3 = P3^3;//数码管段码uchar code

  • Android单片机与蓝牙模块通信实例代码

    啦啦毕业了,毕业前要写毕业设计,需要写一个简单的蓝牙APP进行交互,通过参考网上资料,问题顺利搞定,下面小编把具体实现思路分享给大家,供大家参考. 1.Android蓝牙编程 蓝牙3.0及以下版本编程需要使用UUID,UUID是通用唯一识别码(Universally Unique Identifier),这是一个软件构建的标准,也是被开源基金会组织应用在分布式计算环境领域的一部分.在蓝牙3.0及下一版本中,UUID被用于唯一标识一个服务,比如文件传输服务,串口服务.打印机服务等,如下: #蓝牙串

  • Android Socket 线程连接openwrt与arduino单片机串口双向通信的实例解析

    废话不多说了,直接给大家贴代码了,具体代码如下所示: package zcd.netanything; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import android.app.Fragment; import android.content.BroadcastReceiver; import and

  • Android与单片机通信常用数据转换方法总结

    Android与单片机通信常用数据转换方法 1.  将GB2312转化为中文,如BAFAC2DCB2B7→胡萝卜,两个字节合成一个文字 public static String stringToGbk(String string) throws Exception { byte[] bytes = new byte[string.length() / 2]; for (int j = 0; j < bytes.length; j++) { byte high = Byte.parseByte(s

  • C语言宏定义结合全局变量的方法实现单片机串口透传模式

    何谓透传? 根据百度百科给出的定义如下: 透传,即透明传输(pass-through),指的是在通讯中不管传输的业务内容如何,只负责将传输的内容由源地址传输到目的地址,而不对业务数据内容做任何改变. 在现实单片机产品开发过程中,如果存在多个串口,在调试打印某个模块信息的时候,大多数人的做法是将所有模块的TX.RX.GND引出来,分别接到不同的调试口去,通过PC终端去将这些信息分别打印出来.这样子做难免会弄错,甚至非常繁琐,万一不小心还会接错导致模块烧坏. 于是,透传模式的出现就是为了解决这样的问

  • 关于单片机按键问题性能提升总结

    最近看了一本书<8051单片机创新教程>,这本书比大学课本写得好,在大学的课本中,我们常见的按键扫描程序如下: unsinged char KeyScan(void) { unsigned char KeyValue=0; if(KEY_IO != 0xFF) //检测到有按键按下 { DelayNms(20); //延时 20 毫秒(严重影响单片机的运行效率) if(KEY_IO != 0xFF)//确认按键按下 { switch(KEY_IO) { case 0xFE: KeyValue=

  • python 性能提升的几种方法

    关于python 性能提升的一些方案. 一.函数调用优化(空间跨度,避免访问内存) 程序的优化核心点在于尽量减少操作跨度,包括代码执行时间上的跨度以及内存中空间跨度. 1.大数据求和,使用sum a = range(100000) %timeit -n 10 sum(a) 10 loops, best of 3: 3.15 ms per loop %%timeit ...: s = 0 ...: for i in a: ...: s += i ...: 100 loops, best of 3:

  • Nginx开启一个参数就能让你的WEB性能提升3倍的方法

    一.遇到的一些问题 记得 2008 年做性能测试的时候,新进7台 lenovo 4核4G 服务器用于性能测试. 当时资源紧张,这7台服务器都装了双系统(Win2003/CentOS5)空闲时用于做测试机(压测的Agent). 当时给Nginx做了一系列测试,印象很深的是:在这批机器上,Nginx状态页面的压测. 短连接的话最佳QPS约4万,长连接的话最高QPS约13万. 大概3年后,那批 lenovo 服务器已经没人瞧得上了,只能做肉鸡. 然而,一次不经意的测试,发现再牛的服务器,短连接最佳QP

  • php使用yield对性能提升的测试实例分析

    本文实例讲述了php使用yield对性能提升的测试.分享给大家供大家参考,具体如下: 生成器提供了一种更容易的方法来实现简单的对象迭代,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低.生成器允许你在 foreach 代码块中写代码来迭代一组数据而不需要在内存中创建一个数组, 那会使你的内存达到上限,或者会占据可观的处理时间.相反,你可以写一个生成器函数,就像一个普通的自定义函数一样, 和普通函数只返回一次不同的是, 生成器可以根据需要 yield 多次,以便生成需要迭代

  • Spring Boot 2.2 正式发布,大幅性能提升 + Java 13 支持

    之前 Spring Boot 2.2没能按时发布,是由于 Spring Framework 5.2 的发布受阻而推迟.这次随着 Spring Framework 5.2.0 成功发布之后,Spring Boot 2.2 也紧跟其后,发布了第一个版本:2.2.0.下面就来一起来看看这个版本都更新了些什么值得我们关注的内容. 组件版本更新 这些Spring框架组件更新了依赖版本: Spring AMQP 2.2 Spring Batch 4.2 Spring Data Moore Spring Fr

  • php7性能提升的原因详解

    为什么PHP7的性能可以提高这么多? 1. JIT 2. Zval的改变 3. 内部类型zend_string 4. PHP数组的变化(HashTable和Zend Array) 5. 函数调用机制(Function Calling Convention) 6. 通过宏定义和内联函数(inline),让编译器提前完成部分工作 为什么PHP7的在实际的业务性能提高才30%左右? 实际的业务不一定有很复杂的计算逻辑 实际的业务会用到Redis 和MYSQL,网络和IO的瓶颈 影响了PHP7的整体性能

  • MongoDB创建一个索引而性能提升1000倍示例代码

    MongoDB 创建索引的语法 1.为普通字段添加索引,并且为索引命名 db.集合名.createIndex( {"字段名": 1 },{"name":'idx_字段名'}) 说明: (1)索引命名规范:idx_<构成索引的字段名>.如果字段名字过长,可采用字段缩写. (2)字段值后面的 1 代表升序:如是 -1 代表 降序. 2.为内嵌字段添加索引 db.集合名.createIndex({"字段名.内嵌字段名":1},{"

  • JavaScript 性能提升之路(推荐)

    在平时工作做项目的过程中我们有时候会遇到页面加载很久才加载出来的情况,这样严重影响了用户的体验效果.虽然说有时候可能是因为网络问题,但有些时候确实是前端代码没有足够优化导致的.所以通过查阅相关资料并实践后,总结出如下知识点来提升性能.有什么写得不对的地方还希望各路大神指出并加以指点. 1.数据访问 1.将所有script标签放在尽可能接近body标签底部的位置,尽可能减少对整个页面下载的影响. 2.尽量少用全局变量.因为变量在作用域链中的位置越深,访问的时间就越长.局部变量位于作用域链中的第一个

  • 详解盒子端CSS动画性能提升

    流畅动画的标准 理论上说,FPS 越高,动画会越流畅,目前大多数设备的屏幕刷新率为 60 次/秒,所以通常来讲 FPS 为 60frame/s 时动画效果最好,也就是每帧的消耗时间为 16.67ms. 直观感受,不同帧率的体验 帧率能够达到 50 - 60 FPS 的动画将会相当流畅,让人倍感舒适: 帧率在 30 - 50 FPS 之间的动画,因各人敏感程度不同,舒适度因人而异: 帧率在 30 FPS 以下的动画,让人感觉到明显的卡顿和不适感: 帧率波动很大的动画,亦会使人感觉到卡顿. 盒子端动

  • log4j2异步打印性能提升方式

    目录 log4j2异步打印性能提升 分析原因 解决方案 log4j2性能提升点 理解为以下三点 log4j2异步打印性能提升 压测结果发现,log4j升级成log4j2之后对系统性能影响并不大,更改打印日志方式(同步修改成异步打印) 压测结果发现TPS在开始阶段提升较快,当压力上来之后,TPS下降迅速,不如同步的数据(log4j2用的版本是2.3) 分析原因 获取压测是堆栈日志如下: 发现线程都在跑LockSupport.parkNanos也就是unsafe.park(false, 1);(pr

随机推荐