㈠ 求一單片機c語言程序:兩個按鍵控制兩個led,按鍵按住不放led閃爍,鬆手led熄滅
一個按鍵時程序如下:
while(1)
{
if(key==0)//按鍵按下
{ delayms(20);//延時消抖
if(key==0)//再次判斷按鍵是否按下
{
while(key==0)//按鍵沒有抬起
{ led=!led; delayms(200);}//LED閃爍
}
}
else led=0;
}
㈡ 如何用C語言定義一個單片機的引腳為按鍵
比如sbit
key1=p2^1;//這就是定義2.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;
}
}
}
㈣ 怎麼用C語言/C51程序實現單片機按鍵長按開機與長按關機
1.
首先需要硬體支持,也就是單片機某個引腳可以控制斷電和維持上電
2.
按鍵的的作用也可以給單片機供電,並且還要有個專門的引腳檢測按鍵狀態。
3.
軟體:首先是長按判斷。這個最好用按鍵掃描。就是檢測按鍵按下時候,定時器計時,如果松開就立即清零。在設置一個功能函數檢測定時值,大於兩秒後,就表示長按。
4.
按鍵按下單片機供電開始計時,如果達到長按標准,就輸出引腳控制持續供電,這時候按鍵鬆了也不會斷電。
5.
運行期間,按鍵再次按下並符合長按,那木引腳輸出停止供電,這時候如果按鍵松開,那就徹底沒電關機。
㈤ 單片機 用C語言怎麼編寫用一個按鈕,控制一盞燈的亮與滅的程序
讀取連接按鍵的IO口,判斷是否為低電平,如果是,延時(十毫秒左右可以),再次讀取IO口,判斷是否為低電平,如果是則表示有有效的按鍵按下,接著用while判斷等待按鍵釋放,然後讓連接led的IO口電平取反以控制其亮滅(是強電的燈可以通過此處控制繼電器的合、閉來控制燈的亮滅)。參考程序:if(key==0){delayms(10);if(key==10){while(key==0);//等待按鍵釋放,IO口恢復高電平led=!led;//按鍵控製程序}}
㈥ 單片機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死循環,如果你這個按鍵按下後,單片機就只是在判斷這個條件成立與否,期間不在進行其他工作
㈦ C語言實現單片機按鍵
這個是曾經一個天才級的年輕人寫的語句
#define
reset()
((void
(code
*)
(void))
0x0000)
()
你在要復位的的時候,添加reset();就可以實現軟體復位了
㈧ 單片機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)//按鍵1
{
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語言編了個流水燈,用按鍵怎麼實現它暫停。
實現流水燈的方式有很多種(中斷,定時器,延時等等),看用哪種方式,最簡單的是延時做流水燈,那麼在死循環裡面增加按鍵檢測,判斷出有按鍵按下來時,再進入死循環,程序不往下走就可以暫停,再按跌出死循環。
#include //51系列單片機定義文件
#define uchar unsigned char //定義無符號字元
#define uint unsigned int //定義無符號整數
void delay(uint); //聲明延時函數
void main(void)
{
uint i;
uchar temp;
uint Flag1=0; 按鍵標志位
uint Flag2=0;
while(1)
{
Flag1 = keyscan();
if(Flag1==1)(Flag2=~Flag2); //如果一旦檢測到一次按鍵掃描就把標志位2 打開;再次就關閉;
if(Flag2==1)// 如果標志位打開就開始流水燈
{
temp=0x01;
for(i=0;i<8;i++) //8個流水燈逐個閃動
{
P1=~temp;
delay(100); //調用延時函數
temp<<=1;
}
}
(9)單片機c語言按鍵擴展閱讀:
單片機編程就是硬體是單片機,基於單片機進行的程序開發,在有周圍外設支持的情況下,用軟體來控制的部分通過單片機編程來實現。單片機能識別的語言是硬體語言即匯編,因此編程就是圍繞匯編來實現,有直接用匯編程序來編寫的,但是較難調試的編寫,特別是一上規模就更不易實現,因此常用高級語言來寫然後通過編譯器轉化成匯編。
㈩ 51單片機C語言編程如何實現長按按鍵實現數值的累加
這個可以用定時器來做,比如檢查某鍵,按鍵時間超過2秒後一個變數開始累加知道鍵釋放為止。實現方法如下:
#include<reg51.h>
#define
uint
unsigned
int
#define
uchar
unsigned
char
uint
v=0,time=0;
sbit
key=P1^0;
void
t0isr()
interrupt
1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
if((key==0)&&(time>40)v++;
//如果按鍵時間超過2秒且鍵未釋放,變數+1
if(key==1)time=0;
//如果鍵釋放,時間復位
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}