//按下

#include <reg52.h>
sbit ADDR0=P1^0;
sbit ADDR1=P1^1;
sbit ADDR2=P1^2;
sbit ADDR3=P1^3;
sbit ENLED=P1^4;
sbit KEY1=P2^4;
sbit KEY2=P2^5;
sbit KEY3=P2^6;
sbit KEY4=P2^7;

unsigned char LedChar[]={//数码管
   0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
   0x80,0x90
};
void delay()//延时
{
   unsigned int i=1000;
    while(i--);
}
void main()
{
 bit keybuf=1;//按键值暂存
 bit backup=1;//键值备份
 unsigned char cnt=0;//按键计数
 ENLED=0;
 ADDR3=1;
 ADDR2=0;
 ADDR1=0;
 ADDR0=0;
 P2=0xF7;
 P0=LedChar[cnt];//初始显示0

while(1)//按下时执行一次循环,弹起在执行一次循环
 {
    keybuf=KEY4; 把当前值扫描暂存
    if(keybuf !=backup) //当前值与前一次值不同说明按键有动作
    {
       delay();
    if(keybuf==KEY4) //判断按键值发没发生改变。防止抖动
    {
    if(backup==1)//如果前次值位1,说明当前动作是按下
   {
           cnt++;//按键次数加1
     if(cnt>=10)
     {
        cnt=0;
     }
     P0=LedChar[cnt];
   }
    }
    backup=keybuf;   //更新备份,下一次作比较
    }
 }
}

//弹起

#include <reg52.h>
sbit ADDR0=P1^0;
sbit ADDR1=P1^1;
sbit ADDR2=P1^2;
sbit ADDR3=P1^3;
sbit ENLED=P1^4;
sbit KEY1=P2^4;
sbit KEY2=P2^5;
sbit KEY3=P2^6;
sbit KEY4=P2^7;

unsigned char LedChar[]={
   0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
   0x80,0x90
};
void delay()
{
   unsigned int i=1000;
    while(i--);
}
void main()
{
    bit keybuf=1;
 bit backup=1;
 unsigned char cnt=0;
 ENLED=0;
 ADDR3=1;
 ADDR2=0;
 ADDR1=0;
 ADDR0=0;
 P2=0xF7;
 P0=LedChar[cnt];

while(1)
 {
    keybuf=KEY4;
    if(keybuf !=backup) 
    {
       delay();
    if(keybuf==KEY4)
    {
      if(backup==0)//只是这里改为0
   {
           cnt++;
     if(cnt>=10)
     {
        cnt=0;
     }
     P0=LedChar[cnt];
   }
    }
    backup=keybuf;  
    }
 }
}

转载于:https://www.cnblogs.com/wangjinshan/p/7454999.html

按键弹起数字增加和按下增加相关推荐

  1. 数字逻辑综合工具-DC-04 ——怎样增加时序约束(Timing Constraints)

    数字逻辑综合工具-DC-04 --怎样增加时序约束(Timing Constraints) 逻辑综合的过程为:转化 优化 映射 另外还有环境约束和面积约束 时序有三个大的方面 input logic ...

  2. Linux下增加swap分区

    Linux 下增加swap分区 环境:Linux EL4 +  Oracle 10g 1.检查当前的分区情况 (使用free -m或cat /proc/swaps ): [root@db2 root] ...

  3. Keil uVision4 for ARM 下增加支持C51,C5x

    原文链接:http://blog.csdn.net/skertone/article/details/7046447 第一步编辑 TOOLS.ini 找到Keil安装目录, 用记事本修改 TOOLS. ...

  4. Ubuntu下增加Python的PATH环境变量

    Ubuntu下增加Python的PATH环境变量 1. Ubuntu专有方式 编辑 /etc/ld.so.conf 文件,如果以下语句不存在,则加入: include /etc/ld.so.conf. ...

  5. 如何在计算机中增加硬盘分区,win10系统电脑下增加新磁盘分区的操作方法

    有关win10系统电脑下增加新磁盘分区的操作方法想必大家有所耳闻.但是能够对win10系统电脑下增加新磁盘分区进行实际操作的人却不多.其实解决win10系统电脑下增加新磁盘分区的问题也不是难事,小编这 ...

  6. 20220316在MT6739的android10下增加VT设备tty1

    20220316在MT6739的android10下增加VT设备tty1 2022/3/16 16:08 1.完整编译MT6739的android10: time(./oneCmdMake 9186T ...

  7. 20220310在MT6739的android8.1下增加VT设备tty1

    20220310在MT6739的android8.1下增加VT设备tty1 2022/3/10 10:21 需求:鸿蒙(Openharmony3.1 beta)下需要使用MT6739的设备节点:/de ...

  8. linux下增加swap分区,LINUX新建和增加SWAP分区

    我们都知道在安装Linux系统时在分区时可以分配swap分区,而系统安装后(在运行中)如何建立或调整swap分区呢? 在装完Linux系统之后,建立Swap分区有两种方法. 1.新建磁盘分区作为swa ...

  9. 20220322在MT6739的android8.1下增加ll命令

    20220322在MT6739的android8.1下增加ll命令 2022/3/22 17:11 1.增加: X:\mt6739_android8.1\external\mksh\mkshrc # ...

  10. ADB 按键名、按键代码数字、按键说明对照表

    文章目录 按 对照表 按 keyevent事件有一张对应的表,可以直接发送对应的按键代码数字,也可以使用对应的按键名,例如模拟按下Back键有如下两种用法: echo 方法一: adb shell i ...

最新文章

  1. 一步一步实现扫雷游戏(C语言实现)(三)
  2. pat天梯赛L2-025. 分而治之
  3. mysql memory leak_解决memory leak问题
  4. SQL语言实现金额小写转大写完整案例代码
  5. linux 多个秘钥,linux管理多个ssh公钥密钥
  6. live-server 箭头函数
  7. 语义分割论文阅读:FCN、PSPNet、DDRNet、BiseNet、BiseNetV2、deeplabv3
  8. Hive 之 排序和reduce设置
  9. Linux C函数之文件及目录函数
  10. VMWare 认证软件存在SSRF漏洞,可用于访问用户数据
  11. ios textView显示不全
  12. 复杂,软件的大敌![转]
  13. ROST情感分析的语法规则_基于「木兰」编译器,八行代码实现 quot;对于...中的quot;语法
  14. ovito :qt.qpa.plugin: Could not load the Qt platform plugin “xcb“ in ““ even though it was found.
  15. 数学建模:线性规划—奶制品的生产销售计划模型 (Python 求解)
  16. DataStory创始人兼CEO徐亚波博士获年度青年创业榜样奖项
  17. itunes未能连接到iphone软件更新服务器,iTunes无法联系iphone软件更新服务器 不可连接解决方法...
  18. 支持IPv6 DNS64 / NAT64网络
  19. Java 安全编程详解
  20. 微信小程序JS字符串操作方法汇总

热门文章

  1. oracle sql试题
  2. valgrind检测内存泄露
  3. UCenter密码算法规则和生成方法
  4. [软件更新]迅雷(Thunder)5.9.2.927版本发布
  5. 个人数据常用备份策略
  6. golang cover协程异常
  7. Protobuf3详细介绍
  8. 用c语言ipv6组播,闲谈IPv6-组播和广播
  9. pandas创建series三种方法
  10. (day 001 - 进制转换) 405. 数字转换为十六进制数