A. 單片機用c語言,按鈕控制一個LED燈,要求按下松開,LED亮,按下松開,LED暗!循環
1、首先打開桌面上的keil軟體,在進行對51單片機進行編程時最常用的就是keil軟體。
B. 想用c語言寫一個按鍵控制小燈閃爍的程序,就是按一下閃爍,再按就熄滅
具體是怎麼個不行法。
像你這種按鍵程序
因為單片機速度非常快,在你按一下按鍵時,單片機已經循環了很多次程序。
因此這樣就會導致,當你按下時,其實k一直==0 一直在執行動作。
所以這種按鍵需要判斷按鍵是第一次按下(由彈起狀態下按下)。而不是一直按著導致的動作。
方法:建一個變數保存上一次按鍵的值
charLastKey;
LastKey=1;
while(1)
{
if(k==0&&LastKey==1)//按下,且上一次檢測按鍵時是彈起狀態
{//這樣才能保證每次按下時只執行一次,
//而不是一直在執行
Delay1ms(20);
if(k==0)//確定是第一次按下,執行動作
{
if((n%2)==0)
{
LedFlash();
}
else
{
P0=0xFF;
}
n++;
}
}
LastKey=k;//保存按鍵狀態
}
C. 誰知道怎麼用C語言讓按鈕控制燈泡亮啊給個例子……
給你個迅昌最簡單的例子,假設P1.0接燈,P1.0為畝亮扒0時燈亮,為1時燈滅。P2.0接按鍵,為0時表示按鍵按下。程序如下:
#include<reg52.h>
sbit a=P1^0;
sbit b=P2^0;
void main()
{while(b);
a=0;
}
這是鍵並最簡單的,按鍵按下燈就亮了。用的是獨立按鍵,一次控制有效。
D. 獨立鍵盤用一個按鍵,控制一個燈的亮滅,用C語言怎麼寫程序
sbit KEY = P0^1;
sbit LED = P0^2;
int keyscan(void)
{
bit keyval=0;
if(KEY)
{
delay(30);//延時消抖
if(KEY)
{
keyval = ~keyval; //值取反
if(keyval )
{
LED = 1;//led亮
}
else
{
LED = 0;//led滅
}
}
}
}
E. 51單片機怎麼用c語言寫一個按鈕控制一個led的閃爍,按一下開始閃爍,再按就滅掉
bit flash;//閃爍標志位
sbit led=P0^0;
sbit P01=P0^1;
sbit P02=P0^2;
void main()
{
P01=P02=0;
flash=0;
led=0;
while(1)
{
scankey();
ledflash();
}
}
void scankey()//鍵盤掃描
{
P01=1;//行線給1
if(P02)//如果P02也是1則說明接通
{
delay(10);//去抖動10MS
if(P02)//再次確定按鍵按下
{
while(P02){flash=flash}//按住按鍵的動作
flash=~flash;//按鍵按下後執行動作
}
}
}
void ledflash()
{
if(flash)
{
led=1;//點亮
delay(100);//延時100MS
led=0;//熄滅
}
else led=0;
}
void delay(unsigned int i)
{自己根據單片機頻率寫個1MS帶形參的演示程序}
這個程序是現寫的。。應該能執行,有些細節沒有寫,自己修改下,只是個大框而已(比如函數聲明,定義埠什麼的)
F. 單片機 用C語言怎麼編寫用一個按鈕,控制一盞燈的亮與滅的程序
讀取連接按鍵的IO口,判斷是否為低電平,如果是,延時(十毫秒左右可以),再次讀取IO口,判斷是否為低電平,如果是則表示有有效的按鍵按下,接著用while判斷等待按鍵釋放,然後讓連接led的IO口電平取反以控制其亮滅(是強電的燈可以通過此處控制繼電器的合、閉來控制燈的亮滅)。參考程序:if(key==0){delayms(10);if(key==10){while(key==0);//等待按鍵釋放,IO口恢復高電平led=!led;//按鍵控製程序}}
G. 51單片機的按鍵控制小燈亮滅的問題(程序類型:c語言)怎麼解決
#include
#define uint unsigned int
sbit LED = P1^0;
sbit KEY1 = P1^2;
void delay(uint);
void main(void)
{
LED = 1; //初始化LED熄滅
KEY1 = 1; //賦值KEY1高電平
while(1)
{
if(!KEY1) //檢測到按鍵脊蔽按下
{
LED = ~LED; /*LED取反,此時LED = 0,燈亮。當鬆手時,KEY1 = 1,不滿足if語句不
進入循環,LED繼續保持當前狀態即LED = 0,如果再次按下按鍵,此時檢測到KEY1 = 0,進入旁頌循
環,LED取反得到LED = 0,燈亮。*/
delay(500); /*此處延遲,保櫻啟州證連續兩次按鍵動作處在程序的延時過程中,不進行其他程序從而不會影響小燈。*/
}
}
}
void delay(uint z) //延時函數
{
uint x, y;
for(x=85; x>0; x--)
for(y=z; y>0; y--);
}
可下載到單片機驗證。
H. 單片機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死循環,如果你這個按鍵按下後,單片機就只是在判斷這個條件成立與否,期間不在孝歷進行其他工作