请选择 进入手机版 | 继续访问电脑版

普中开源电子分享网

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

51开发板A2,独立按键的连续扫描问题

[复制链接]

2

主题

2

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2023-1-5 12:42:53 | 显示全部楼层 |阅读模式
        当使用独立按键的连续扫描时,这个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;
        }
}



回复

使用道具 举报

1

主题

2

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2023-2-10 17:15:45 | 显示全部楼层
因为key=key_scan(1);  “1”的模式为连续扫描,括号内写成“0”才是单次扫描,才会按一次实现一次亮灭反转。你的程序处于在连续扫描模式,在该模式下,程序功能为按键按下灯光反转,所以按下时led会不断反转,高频闪,显示为一直亮,但亮度较低,而且在松开时,灯的状态就会出现随机的两种状态。
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2024-3-29 21:59 , Processed in 0.093221 second(s), 31 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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