導航:首頁 > 操作系統 > 單片機按鍵加一

單片機按鍵加一

發布時間:2023-07-19 20:28:24

單片機 按鍵(採用獨立式按鍵)按下一次,讓液晶第一位顯示的數碼加1,顯示範圍0~9

程序清單如下:

#include < reg51.h >// 51單片機頭文件

#define uchar unsigned char // 宏定義,用uchar替代無符號字元型

#define uint unsigned int // 宏定義,用uint 替代無符號整數型

sbit Key = P2 ^ 7;

uchar Count = 0;

uchar code DataChar[10] = // 定義數碼管的段碼 '0'~'9'、'-'、' ' 'P'

{

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

};//延時N毫秒

void DelayNms( uint N ) // 利用x、y作簡單的自減運算,消耗單片機指令周期,達到延時的目的

{

uint x,y;

for( x=N; x>0; x-- )

for( y=110; y>0; y-- );

}

//數碼管顯示 // 顯示方式為動態掃描,視覺暫留原理

void Display( uchar Num ) // *p指向Main函數中的數組ShowNum的首地址

{

P0 = DataChar[ Num ]; // 向P0賦段碼值

DelayNms(2); // 短暫的延時

P0 = 0x00; // 讓數碼管熄滅,否則會造成數字重疊

}

void main( void )

{

while(1)

{

if( Key == 0 )

{

DelayNms(30);

if( Key == 0 )

{

Count += 1;

Count = (Count>9)? 0 : Count;

}

while( !Key );

}

Display( Count );

}

}

Ⅱ c51單片機按鍵加1,保持

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。

Ⅲ 單片機C語言如何實現按鍵按一下的時候加一,長按的時候連加。

這個可以通過定時器來實現,比如當按鍵時間小於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)
{

a++;
printf("%d",a);

}

}

main()
{
TMOD=0x21;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=0xfd;
TL1=0xfd;
TR0=1;
TR1=1;
ET0=1;
EA=1;
times=0;
a=0;
while(1)
{
if(key==0)

{

a++;

printf("%d",a);

while(key==0);

times=0;

}

}

}

Ⅳ 單片機按鍵按一次就加一

按鍵相對是個低速任務。你按的再快,一秒可以按十次嗎?什麼?你可以。。那你就是作弊了。因為哪怕你反應的過來。按鍵可不行。所以。這個本質你需要牢牢抓住。那麼你可以選擇一秒之內只檢測幾次按鍵。把幾乎是連續在使用的機器時間碎片化。比如在一個碎片里只查一次按鍵。是的,你現在就是這么做的。只是循環太快。碎片太多。按鍵的抖動你都查到了。所以你需要的僅僅是慢下來。極限就是剛剛說的查10次。算算,這是一個100ms的定時。明白定時器的真正用途了嗎?如果你實際這么實驗了你會發現這的確有效。不會加個成百上千了。接下來你需要設置一個邏輯讓按鍵檢測只對下降沿起作用。最好的辦法就是和前次的狀態比較。如果上次的狀態為高而此次狀態為低。那麼這就是個下降沿。於是你需要一個寄存器保存上一次的狀態。並每次比較後更新。原來這寄存器是這么用的。。實際實驗後發現這么干已經可以保證基本每次長按只會加1。但是短按似乎會丟失。那是因為。100ms實在是長了些。電平保持100ms有時是太難了。所以,你可以適當提高頻率。比如提高10倍。以10ms為周期。基本能解決大多數問題。

Ⅳ 單片機按一下加一,加到20的程序

假設P0 P1口各接一個數碼管,p2.0接按鍵,程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key=P2^0;
uchar num=0;
//共陰數碼管七段碼
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};
void Delay1ms(uint i) //1ms延時程序
{
uint j;
for(;i>0;i--)
{
for(j=0;j<164;j++)
{;}
}
}
void main(void )//主程序
{
while(1)
{
if(key==0)//判斷按鍵是否按下
{
Delay1ms(10);//延時消抖
if(key==0)
{
while(key==0);;//等待按鍵抬起
num++;
if(num==20)num=0;
}
}
P0=table[num%10];
P1=table[num/10];
}
}

Ⅵ 單片機c語言按鍵每按一次加一一直到加到100程序怎麼寫求高手指點。

給你參考
//12M晶振。2位共陽數碼管,P0為段碼,P2.0、P2.1位控

#include <reg51.h>
#define uchar unsigned char

sbit P20=P2^0;
sbit P21=P2^1;
sbit KEY=P2^2;
uchar ge,shi;
uchar code tab[ ]={0xC0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90,};

void delay_ms(unsigned int ms) //1ms延時
{
uchar a;
while(ms--)
for(a=123;a>0;a--);
}

void display();

void main()
{
while(1)
{
display();
while(!KEY)
{
display();
if(KEY)
ge++;
}
if(ge==10)
{
ge=0;
shi++;
}
if(shi==100)
{
shi=0;
}
}
}

void display( )
{
P20=1;
P0=tab[ge];
delay_ms(5);
P20=0;
P21=1;
P0=tab[shi];
delay_ms(5);
P21=0;
}

Ⅶ 單片機按鍵加一、減一

利用外部中斷實現按鍵按一下數碼管數字加1,實現00-99的循環,另一個按鍵實現清零,不管數碼管數字是多少,該按鍵按下數碼管顯示00

閱讀全文

與單片機按鍵加一相關的資料

熱點內容
租個伺服器開個私服需要什麼 瀏覽:270
圖片換成pdf格式 瀏覽:659
javamidi編程 瀏覽:831
android60demo 瀏覽:65
頭條演算法怎麼復習 瀏覽:512
燈光控制通道可以編程設置嗎 瀏覽:781
webpack命令行 瀏覽:805
卸載雲伺服器操作系統 瀏覽:29
java文件移動文件夾 瀏覽:449
針織公斤足稱演算法 瀏覽:457
電腦下載的圖片從文件夾重新編組 瀏覽:645
安卓源碼編譯引導失敗 瀏覽:676
蘋果怎麼添加自定義app文件夾 瀏覽:930
橙牛app怎麼找客服 瀏覽:307
php對象魔術方法 瀏覽:487
OBV能量潮幅圖指標源碼 瀏覽:915
編程15個好習慣 瀏覽:676
電腦u盤文件夾顯示屏幕保護程序 瀏覽:802
我的世界伺服器版本怎麼下載 瀏覽:600
c代碼加密工具 瀏覽:359