当前位置:首页 » 编程语言 » C语言按键单次触发
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

C语言按键单次触发

发布时间: 2022-08-12 21:25:38

Ⅰ 各位大神,大家好:用51单片机c语言,STC89c52。怎么实现一个按键,按一次

这个可以通过定时器来实现,比如当按键时间小于2秒时,按一次加1,当超过2秒时,没50毫秒加1实现连加功能。例程如下:
#include<reg51.h>
unsigned int a;
unsigned char times;
sbit key=P1^0;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
times++;
if(times>40)
{

Ⅱ c语言按键控制程序

if(keypress==true)检测有键按下 {delay_us(50); 延迟50us,软件滤波防抖动 if(keypress==true) 检测有键被按下 key_value=P1;提取键值 {switch(key_value) 识别是那个键被按下了 case 0x01: XXX;break; case 0x02:XXX;BREAK;进入对应工步或者动作即可。 ...... } } }

Ⅲ c语言键盘按键触发怎么表示

可以用FlexibleButton表示。

FlexibleButton 是一个基于标准 C 语言的小巧灵活的按键处理库,支持单击、连击、短按、长按、自动消抖,可以自由设置组合按键,可用于中断和低功耗场景。

该按键库解耦了具体的按键硬件结构,理论上支持轻触按键与自锁按键,并可以无限扩展按键数量。另外,FlexibleButton 使用扫描的方式一次性读取所有所有的按键状态,然后通过事件回调机制上报按键事件。

核心的按键扫描代码仅有三行,没错,就是经典的 三行按键扫描算法。使用 C 语言标准库 API 编写,也使得该按键库可以无缝兼容任意的处理器平台,并且支持任意 OS 和 non-OS(裸机编程)。

快速体验:

FlexibleButton 库中提供了一个测试例程 ./examples/demo_rtt_iotboard.c,该例程基于 RT-Thread OS 进行测试,硬件平台选择了 RT-Thread IoT Board Pandora v2.51 开发板。

当然你可以选择使用其他的 OS,或者使用裸机测试,只需要移除 OS 相关的特性即可。

如果你使用自己的硬件平台,只需要将 FlexibleButton 库源码和例程加入你既有的工程下即可。

DEMO 程序说明:

该示例程序可以直接在 RT-Thread stm32l475-atk-pandora BSP 中运行,可以在该 BSP 目录下,使用 menuconfig 获取本软件包。

Ⅳ 如何用C语言写一个按键按一次数值就加一的程式呀

#include <stdio.h>
#include <stdlib.h>

void main()
{
char p[4];
int n=0;
while ( 1 ){
p[0] = getch(); // 即时监视按键
if (p[0] == 0x1b) break; // 如果 Esc 则退出
if (p[0] >= '0' && p[0] <= '9') n++; // 是数字则累加1
}
printf("\n Number of digits =%d",n);
}

Ⅳ 51单片机C语言按键被重复执行

程序有些啰嗦,
voidmain()
{
while(1)key();//调用按键服务函数
}
voidkey()
{
if(S1==0)testone();
elseif(S2==0)testhold();
elseif(S3==0)noteup();
elseif(S4==0)notedown();
}

Ⅵ 如何用C语言实现按键功能

主要就是按键检测,防抖呗。
首先给出检测按键代码:(我这个事4*4键盘。具体你要根据实际情况编写)
uchar TestKey()
{
uchar cord_h,cord_l;
P6=0x0f;
cord_h=P6&0x0f;
if(cord_h!=0x0f)
{
Delay_Xms(1);
if(cord_h!=0x0f)
{
cord_h=P6&0x0f;
P6=cord_h|0xf0;
cord_l=P6&0xf0;
return(cord_h+cord_l);
}
}return(0xff);
}

--------------------------------------
然后你在Main函数里编写循环,检测按键然后做你想做的事情。。。
while(1)
{
key=TestKey();//调用键盘扫描,
switch(key)
{
case 0x7e:P4=0xa1;break;//0 按下相应的键显示相对应的码值
case 0x7d:Show1Menu();break;//1
case 0x7b:P4=0x83;break;//2
case 0x77:P4=0x88;break;//3
case 0xbe:P4=0x99;break;//4
case 0xbd:P4=0x90;break;//5
case 0xbb:P4=0x82;break;//6
case 0xb7:P4=0xb0;break;//7
case 0xde:P4=0xc0;break;//8
case 0xdd:P4=0x80;break;//9
case 0xdb:P4=0x92;break;//a
case 0xd7:P4=0xa4;break;//b
case 0xee:P4=0xc6;break;//c
case 0xed:P4=0xf8;break;//d
case 0xeb:P4=0x99;break;//e
case 0xe7:P4=0xf9;break;//f
}
}

Ⅶ c语言怎样判断键盘按键的按下、释放


C语言判断键盘按下和释放,是通过检测该键的状态来实现的。如果是单一的一个按键,那么直接检测该键是“1”还是“0”,就可以确定是按下还是释放。如果是矩阵键盘,那么需要发送扫描码,再检测输入值,来判断键盘中键的状态。以下举例说明:

bitkeychk()//单一按键检测

{

if(P1.0==0)//如果键按下

{

delay();//延时去抖

if(P1.0==0)return(1);//返回键状态


}

return(0);

}

unsignedcharkbscan(void)//矩阵扫描按键检测

{

unsignedcharsccode,recode;

P1=0x0f;//发0扫描,列线输入

if((P2&0x0f)!=0x0f)//有键按下

{

delay(20);//延时去抖动

if((P1&0x0f)!=0x0f)

{

sccode=0xef;//逐行扫描初值

while((sccode&0x01)!=0)

{

P1=sccode;

if((P1&0x0f)!=0x0f)

{

recode=(P1&0x0f)|0xf0;

while((P1&0x0f)!=0x0f);//等待键抬起

return((~sccode)+(~recode));

}

else

sccode=(sccode<<1)|0x01;

}

}

}

return0;//无键按下,返回0

}

Ⅷ 急求:我编的c语言控制程序,如何更改触发方式(按键判断改为高低电平判断),而保持原程序执行结果。

  • 新建工程

    首先新建工程,并加以简单配置,可以参考我的分享:《IAR如何建立工程》,如下为硬件电路图:

  • PICTL

    PICTL可以控制Px口中断触发信号:上升沿触发、下降沿触发。由于按键在未按下时处于高电平,按下后为低电平,松开后又为高电平,所以会产生下降沿触发信号,配置为下降沿触发即可:

    PICTL |= BIT0; //falling edge

  • IEN1

    除了配置引脚,还需要开启端口引脚中断使能,如下所示开启PO口中断使能:

    IEN1 |= BIT5; //P0 interrupt

  • PxIFG

    在开启中断前需要先清除中断标志,以免误入中断造成系统混乱。

    P0IFG &= ~BIT4;

  • 系统中断使能

    学习51都知道,在任何中断操作时,都需要开启系统中断:

    EA = 1; //system interrupt open

  • 中断函数书写

    #pragma vector = P0INT_VECTOR

    __interrupt void P0_isr(void)

    {

    wg_waitUs(10);

    P0IFG &= ~BIT4;

    P0IF &= ~BIT4;

    P1_0 = ~P1_0; //led1 trigger

    }

    其中wg_waitUs()是延时函数,起到按键消抖作用。

  • 代码框架

    void wg_ledInit(void)

    {

    P1DIR |= BIT0;

    P1 |= BIT0;

    }

    void wg_btnInit(void)

    {

    P0IEN |= BIT4; // P0.4 button input

    PICTL |= BIT0; //falling edge

    IEN1 |= BIT5; //P0 interrupt

    P0IFG &= ~BIT4;

    EA = 1; //system interrupt open

    }

    void wg_waitUs(uint16 ration)

    {

    while (ration--)

    {

    asm("NOP");

    asm("NOP");

    asm("NOP");

    asm("NOP");

    asm("NOP");

    asm("NOP");

    asm("NOP");

    asm("NOP");

    }

    }

    void main(void)

    {

    wg_ledInit();

    wg_btnInit();

    //loop

    for(;;)

    {

    ;//

    }

    }

    #pragma vector = P0INT_VECTOR

    __interrupt void P0_isr(void)

    {

    wg_waitUs(10);

    P0IFG &= ~BIT4;

    P0IF &= ~BIT4;

    P1_0 = ~P1_0; //led1 trigger

    }

Ⅸ C语言中单按键控制流水灯亮灭

enum{
按着,
松开,
};
std::vector<int> light,
把你的灯仿佛light 然后判断当前的状况,每次触发按着的时候就让 light当前的状态变成关灯,light的下一个灯变成开起