① 在單片機中怎樣檢測一個按鍵的擊鍵次數
樓上講得很對,就是先設一個變數,比如a,然後檢測是否有按鍵按下,當有鍵按下時,就跳到相應的程序,執行a++,但是要注意一點,就是在按鍵按下的時候要加個延時函數去抖,在加一個語敬頌句判斷按鍵是否按或稿團下(比如C語言的while語句)衫橘,只有這樣,才能正確判斷按鍵按下的次數。
② 單片機用p1口接8個發光二極體記錄按鍵次數匯編程序
假設按鍵用P2.0,有上拉電阻,低電平吵頃有效;LED用高電平點亮
1、埠初始化
SETB P2.0
MOV P1,#0
2、檢測按鍵變化,每按過一豎滾次,按鍵計數器KEYCOUNT就加1,
;查詢按鍵是否按下
;若已按下,則等待按鍵彈起升纖陸,若未按下則等待按下
;按鍵未彈起就一直等待,否則執行
inc keycount
3、將按鍵計數器的值送往P1口
mov a,keycount
mov P1,a
③ 用單片機控制數碼管顯示按鍵次數
因為你這是在主函數裡面實現的動態顯示啊,當沒有按鍵按下時,不用執行按鍵去抖的20ms時間,所以程序很快就執行完。這時數碼管掃描並不會出現問題。
但是,當有按鍵按下後,要執行20ms的去抖,完成後才往下執行,這20ms的延時,對數碼管動態顯示來說,是很危險的,會出現顯示不正常。
你這個程序,最好改成用定時器中斷掃描,這樣就不會產生類似的問題了。
你這個程序非要這樣寫,那你在按鍵掃描裡面,也應該放上數碼管顯示程序,讓數碼管掃描間隔減小,至少要小於20ms才行。
④ 單片機按鍵計數
就是89C52單片機按鍵次數計數 在LCD1602上顯示 ,每按一次計數一次,這個容易。而顯示每分鍾按多少謹燃好次,是每分鍾統計一次呢?然後按每一分鍾都顯示出來?還是求平均每分鍾按幾次?只顯示一個平均數?統計這個有什段正么用呢?還是為祥鉛了編程故意找點事。
⑤ c51 單片機種統計按鍵次數
1.設置一個狀態變數,如flag,定義flag=0為開狀態,flag=1為關狀態。
2.因為是按鍵(不是開關),所以實際上單片機讀取的應該是脈沖形式的輸入。設按鍵接單片機p01引腳,故慎乎帆可採用以下程序實現按鍵掃描
if(p01==0)//按下按鍵,進入下降沿
{
delay2();//20ms延時去按鍵前抖動
while(p01==0);//等待上升沿到
來,即按鍵彈起
flag=~flag;//flag取反,實現狀態切換
}
void
delay2()//20ms延時子程序
{
unsigned
char
i,k;
for(i=0;i<100;i++)
for(k=0;k<100;k++);
}
註:根據按鍵的具體接法,若按下按鍵向頃早單片機輸入低寬雹電平,則採用以上程序;若按下按鍵向單片機輸入高電平,則將兩處p01==0均改為p01==1。
⑥ 51單片機 獨立按鍵按下去 再放開才算按鍵一次 計算按鍵次數 程序應該怎麼寫
你好!
因為按鍵操作涉及寄存器配置和按鍵防抖,因此寫了你也不一定用得上。而且你這個的邏輯比較簡單,建議自己寫。主要注意幾個地方就可以了:
按鍵I/O口電平的配置:要結合硬體電路確認按鍵是低電平觸發還是高電平觸發。在程序中設置正確的I/O口電平。
I/O口的輸入輸出狀態的配置:I/O口作為按鍵輸入必須是准雙向模式或輸入模式,這個不同單片機配置寄存器方正型式不同但大同小異。
按鍵防抖:在按鍵按下時有時會有短暫的接觸不良,因此會多次判斷按鍵按下和斷開,因此一般在按鍵按下或斷開時增加幾十毫秒的防抖處理虛清鍵,具體就是連續多個循環判斷按鍵是否是一個狀態,如果狀態不變,再進行下一步差巧處理。
⑦ 單片機中怎樣精確判斷鍵被按下的次數
設置一個變數i,當按下一次按鍵就加1,旁梁寬這樣就可以了。
你說的精確,其實是要准確判渣頃斷按鍵是否按下,兩個方法
,一個硬體消抖,另一個軟體消抖,運亮一般用軟體消抖,即延時+等待按鍵釋放。
⑧ 《單片機應用技術》期末考試 數碼管顯示按鍵次數
數碼管顯示按鍵次數
通過按下按蘆源鍵在數碼管上顯示按下陪讓態的次數,進行1-10次的計數,當按下第十次的時候,歸零。
一滑凳,結構圖
二,程序
#include "reg52.h"
sbit C1 = P2^7;
sbit C2 = P2^6;
sbit C3 = P2^5;
sbit C4 = P2^4;
sbit SW1 = P3^4;
sbit SW2 = P3^3;
unsigned char SMGNoDot_CA[10] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
unsigned char s1=0, s2=0;
void DelaySMG(unsigned char t)
{
while(t--);
}
void DisPlaySMG_Bit(unsigned char pos, unsigned char dat)
{
P0 = 0xff;
switch(pos)
{
case 1:
C1 = 1; C2 = 0; C3 = 0; C4 = 0;
break;
case 2:
C1 = 0; C2 = 1; C3 = 0; C4 = 0;
break;
case 3:
C1 = 0; C2 = 0; C3 = 1; C4 = 0;
break;
case 4:
C1 = 0; C2 = 0; C3 = 0; C4 = 1;
break;
}
P0 = dat;
}
void DisPlaySMG()
{
DisPlaySMG_Bit(1, SMGNoDot_CA[s1]);
DelaySMG(100);
DisPlaySMG_Bit(2, 0xbf);
DelaySMG(100);
DisPlaySMG_Bit(3, 0xbf);
DelaySMG(100);
DisPlaySMG_Bit(4, SMGNoDot_CA[s2]);
DelaySMG(100);
}
void Scan_Keys()
{
if(SW1 == 0)
{
DelaySMG(200);
if(SW1 == 0)
{
while(SW1 == 0)
{
DisPlaySMG();
}
s1++;
if(s1 == 10)
{
s1 = 0;
}
}
}
if(SW2 == 0)
{
DelaySMG(200);
if(SW2 == 0)
{
while(SW2 == 0)
{
DisPlaySMG();
}
s2++;
if(s2 == 10)
{
s2 = 0;
}
}
}
}
void main()
{
while(1)
{
DisPlaySMG();
Scan_Keys();
}
}
三,流程圖
⑨ 單片機中怎麼樣實現按鍵按下計數
主函數
void main (void)
{
unsigned char num=0;
KEY_ADD=1; //按鍵輸入埠電平置高
KEY_DEC=1;
while (1) //主循環
{
if(!KEY_ADD) //如果檢測到低電平,說明按鍵按下
{
DelayMs(10); //延時去抖,一般10-20ms
if(!KEY_ADD) //再次確認按鍵是否按下,沒有按下則退出
{
while(!KEY_ADD);//如果確認按下按鍵等待按鍵釋放,沒有釋放則一直等待
{
if(num<9) //加操作
num++;
}
}
}
if(!KEY_DEC) //如果檢測到低電平,說明按鍵按下
{
DelayMs(10); //延時去抖,一般10-20ms
if(!KEY_DEC) //再次確認按鍵是否按下,沒有按下則退出
{
while(!KEY_DEC);//如果確認按下按鍵等待按鍵釋放,沒有釋放則一直等待
{
if(num>0) //減操作
num--;
}
}
}
//主循環中添加其他需要一直工作的程序
}
}