普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 1584|回复: 1

51单片机A2,独立按键连续扫描

[复制链接]

2

主题

2

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2023-1-5 12:47:59 | 显示全部楼层 |阅读模式
1金钱
按照官方b站学习视频。当使用独立按键的连续扫描时,这个LED灯,在按键连续按下时,有时会持续亮松开按键灭;有时松开按键还是一直亮,多操作几次才会灭。请问这是什么原因啊?


#include "reg52.h"

typedef unsigned char u8;
typedef unsigned int u16;

sbit KEY1=P3^1;
sbit KEY2=P3^0;
sbit KEY3=P3^2;
sbit KEY4=P3^3;
sbit LED1=P2^0;

u8 gsmg_code[17]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7C,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//共阴0~F
#define lcd P0

void Timedelay(u8 count_us)
{
        while(count_us--);
}

u8 key_scan(u8 mode)
{
        static u8 key=1;
        if(mode) key=1;
        if(key==1&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0))
        {
                Timedelay(1000);//这里按键采用机械键盘,需要消抖,通过延时滤过这段时间5~10ms
                key=0;
                 if(KEY1==0) return 1;
                else if(KEY2==0) return 2;
                else if(KEY3==0) return 3;
                else if(KEY4==0) return 4;
        }
        else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1)
                key=1;
        return 0;
}


void main()
{      
        u8 key=0,i=0;
        while(1)
        {
                key=key_scan(1);      
                if(key==1) LED1=!LED1;
        }
}


我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励10 金钱 , 目前已有1人回答

回复

使用道具 举报

0

主题

1

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2023-1-5 20:00:19 | 显示全部楼层
你仔细想想,这个程序的原理。这个程序是相当于去碰运气一样运行到检测而你的手还在按着,你这种情况就是程序运行到检测按键的时候你手刚好不在按了,这是没办法的;要想解决用中断去吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-27 11:37 , Processed in 0.091591 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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