當前位置:首頁 » 編程語言 » 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的下一個燈變成開起