單片機c語言按鍵
❶ 單片機的c語言,編寫了一個鍵盤的按鍵函數
首先是按鍵需要防抖
其次,要檢測按鍵是否放開。
如果是瞬間跳幾下就加防抖
按下鍵就跳,判斷鍵盤改變
❷ 單片機C語言按鍵控制LED燈
其實是一樣的,也沒什麼哪個規范這一說,這個看個人習慣了
首先if(SW13==0)是判斷此引腳是否為0 (按內鍵按下)容
然後一個delay用於按鍵防抖動
沒被注釋的那部分是靠if在次判斷是否為0按下按下後執行LED_ON函數使LED亮
然後通過while判斷按鍵是否松開,如果松開的話就繼續執行LED_OFF將LED關閉
而注釋掉的那段是依靠while函數直接判斷按鍵是否處於按下狀態
是的話就循環執行LED_ON函數直至判斷按鍵松開(SW13=1)後在繼續執行到LED_OFF函數使LED 關閉
不過這兩種寫法的有個共同缺點就是按鍵判斷是while死循環,如果你這個按鍵按下後,單片機就只是在判斷這個條件成立與否,期間不在進行其他工作
❸ 51單片機c語言程序 4個獨立按鍵,分別控制4個數碼管,每個獨立按鍵按下
是要畫模擬圖嗎?數碼管和按鍵,可以隨便接嗎?
❹ 單片機按鍵C語言問題
設置一個標志位啊,按鍵按下是種狀態讓機器轉,松開是一種狀態機器停止,
❺ 單片機C語言按鍵開關程序
#include<reg52.h>
#defineuintunsignedint
#defineucharunsignedchar
voiddelay_ms(uint);
sbitled0=P0^0;
sbitled1=P0^1;
sbitkey1=P3^2;
sbitkey2=P3^3;
voidmain()
{
uchari=0;
ucharj=0;
while(1)
{
if(key1==0)//按鍵
{
delay_ms(10);
if(key1==0)
{
i++;
i=i%2;
switch(i)
{
case0:led0=1;break;//關小燈
case1:led0=0;break;//開小燈
default:break;
}
}
while(!key1);
}
if(key2==0)//按鍵2
{
delay_ms(10);
if(key2==0)
{
j++;
j=j%2;
switch(j)
{
case0:led1=1;break;//關小燈
case1:led1=0;break;//開小燈
default:break;
}
}
while(!key2);
}
}
}
voiddelay_ms(uintz)//延時子程序
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
❻ C語言實現單片機按鍵
單片機斷電不能保存RAM中的數據,節電模式才可以
❼ 如何用C語言定義一個單片機的引腳為按鍵
比如sbit
key1=p2^1;//這就是定義2.1這個引腳是按鍵模式了。
❽ 單片機C語言,一個按鍵控制三個流水燈
void main()
{
int i=0; //設置參考變數
//初始化
p1.0=1;
p1.1=0;
p1.2=0;
//進入按鍵操作
while(1)
{
if(p2.2==0)
{
i++;
if(i==1)
{
p1.0=0;
p1.1=1;
p1.2=0;
delay();//延時,由於不知道你用的單片機型號,這個需要你自己設定了。
}
if(i==2)
{
p1.2=1;
p1.0=0;
p1.1=0;
delay();//延時,由於不知道你用的單片機型號,這個需要你自己設定了。
}
if(i==3)
{
p1.0=1;
p1.1=0;
p1.2=0;
delay();//延時,由於不知道你用的單片機型號,這個需要你自己設定了。
i=0;//參考變數歸0
}
}
}
}
❾ 單片機 c語言 一個按鍵按一下加一 一個按鍵按一下減一 一個按鍵an'yi'x切換
#include<reg51.h>
sbit key1=P2^5;
sbit key2=P2^6;
sbit key3=P2^7;
main()
{
bit flag=0;
unsigned char a;
while(1)
{
if(key1==0)
{
while(key1==0);
if(flag==0)a++;
else a--;
P0=a;
}
if(key2==0)
{
while(key2==0);
if(flag==0)a--;
else a++;
P0=a;
}
if(key3==0){while(key1==0);flag=~flag;}
}
}
❿ 51單片機 c語言 按鍵和數碼管顯示
#include<reg51.h>
unsignedcharled[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
voidled_display(unsignedcharnum);
unsignedcharkey_scan();
sbitled1=P2^0;
sbitled2=P2^1;
voidmain()
{
unsignedcharled_key;
P1=0;
while(1)
{
led_key=key_scan();
led_display(led_key);
}
}
voidled_display(unsignedcharnum)
{
unsignedcharten,single;
intdelay;
ten=num/10;
single=num%10;
delay=100;
for(delay=200;delay>0;delay--)
{
P0=led[ten];
led1=0;
led1=1;
P0=led[single];
led2=0;
led2=1;
}
}
/////////////////////////////////////////
unsignedcharkey_scan(void)
{
unsignedchartemp,key;
P1=0xfe;
temp=P1&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case0xe0:key=1;
break;
case0xd0:key=2;
break;
case0xb0:key=3;
break;
case0x70:key=4;
}
returnkey;
}
P1=0xfd;
temp=P1&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case0xe0:key=5;
break;
case0xd0:key=6;
break;
case0xb0:key=7;
break;
case0x70:key=8;
}
returnkey;
}
P1=0xfb;
temp=P1&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case0xe0:key=9;
break;
case0xd0:key=10;
break;
case0xb0:key=11;
break;
case0x70:key=12;
}
returnkey;
}
P1=0xf7;
temp=P1&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case0xe0:key=13;
break;
case0xd0:key=14;
break;
case0xb0:key=15;
break;
case0x70:key=16;
}
returnkey;
}
}
你好!很高興為您解答!我有歡迎點贊!!以上傳附件!!