矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 3485|回复: 11

请教单片机高手,按键消隐电路,按键按下,数字一直变

[复制链接]
     
发表于 2019-7-24 09:50:13 | 显示全部楼层 |阅读模式
  请教单片机高手,按教程上的例子,做了一下按键程序,里面加了消隐程序。
  可是为什么运行后,按键按下后,数字一直在跑?从程序上分析,不应该这样的。

#include<reg52.h>

unsigned char code ledchar[16]={ 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};
sbit key=P2^7;

sbit a0=P2^2;
sbit a1=P2^3;
sbit a2=P2^4;

void delay();

void main()
{
bit keybuf=1;//按键值暂存,临时保存按键的扫描值
bit backup=1;//按键值备份
unsigned char cnt=0;
a0=1;
a1=1;
a2=1;//只让一位数码管显示
P0=~ledchar[cnt];

while(1)
  {
   keybuf=key;
   if (keybuf != backup);//按键有变化
   {
    delay();
        if (keybuf == key)
    {
          if (backup == 0)         //如果前次值为 0,则说明当前是弹起动作
          {
           cnt++;
           if (cnt>=10)
            {
                cnt=0;
                }
           P0=~ledchar[cnt];
           }
          backup=keybuf;
         }
         
  }
}
}

void delay()
{
unsigned int i=8000;
while(i--);
     
发表于 2019-7-24 11:02:43 | 显示全部楼层
本帖最后由 壹法拉 于 2019-7-24 11:12 编辑

看别人的程序很累啊;也要检查电路;
回复 支持 反对

使用道具 举报

     
发表于 2019-7-24 11:19:24 | 显示全部楼层
程序写的太烂,看不懂,还是重新给你写一个吧

444444ccc.png
回复 支持 反对

使用道具 举报

     
发表于 2019-7-24 11:23:00 | 显示全部楼层

事实上很多单片机有 "下降沿" 触发的中断,根本用不着这样写.

不要抱着老旧的51不放...
回复 支持 反对

使用道具 举报

     
发表于 2019-7-24 12:14:49 | 显示全部楼层
教科书式的按键程序,建议用状态机。
回复 支持 反对

使用道具 举报

     
发表于 2019-7-24 13:27:02 | 显示全部楼层
C52就有几个外中断,使用外中断就很简单了。楼主的这个办法,单片机干不了别的什么了。
回复 支持 反对

使用道具 举报

     
发表于 2019-7-24 15:53:39 来自手机 | 显示全部楼层
if (keybuf != backup);//按键有变化


把分号去掉
写程序要细心哦,楼主
回复 支持 反对

使用道具 举报

     
发表于 2019-7-24 17:03:35 | 显示全部楼层
我用时间序列+滤波算法,任你再多按键,几行代码+滚筒队列,按周期调用,快速执行,不耽误CPU时间,得出状态(通断或长按),事件(按下或松开)。
回复 支持 反对

使用道具 举报

     
发表于 2019-7-24 19:02:36 来自手机 | 显示全部楼层
李雨萌 发表于 2019-7-24 15:53
if (keybuf != backup);//按键有变化



哈哈哈!搞了半天原来是大家来找茬!
回复 支持 反对

使用道具 举报

     
发表于 2019-7-24 19:31:49 | 显示全部楼层
无敌吴刚 发表于 2019-7-24 19:02
哈哈哈!搞了半天原来是大家来找茬!

是啊,写程序可不就是这样,写来写去能把自己写乐了
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-7-24 19:48:04 | 显示全部楼层
谢谢各位,坛中果然高手如云
就是上面大家说的问题,基本功不扎实,谢谢了
回复 支持 反对

使用道具 举报

     
发表于 2019-7-24 21:28:57 来自手机 | 显示全部楼层
李雨萌 发表于 2019-7-24 19:31
是啊,写程序可不就是这样,写来写去能把自己写乐了

还是你眼尖和细心!要是我必须在IDE上才容易找出这样的问题。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-30 07:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表