❶ 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--);
}
可下載到單片機驗證。
❷ 51單片機,用兩個按鍵分別控制兩個led,一個亮/滅,另一個閃爍/滅,為什麼我按下了第二個燈不閃呢
你的led1=~led1;這個語句沒有循環,所以只會反轉一次。要麼加循環,要麼再寫一個閃爍函數。
voidled_filcker(usignedcharx)
{
while(x)
{
led1=~led1;
x--:
}
}
如果你是想,按一下,松開也會閃爍,再按一下熄滅。你得定義一個變數來表示按鍵的按下。
#include<reg52.h>
#define uchar unsigned char
bit stop=1;
sbit k5=P1^4;
void delay(uchar xms)
{
while(xms--);
}
void main()
{
if(k5==0)
{
delay(1000);
if(k5==0)
{
while(k5==0)
{
if(stop)
<<<<<<<<<<<<<<<此處執行你的語句
else
stop=~stop:
}
}
}
}
❸ 求兩個獨立開關控制點亮一個led燈的原理圖
1. 雙控開關基礎電路圖當K1扳到1位置的時候,k2扳到3位置,電路接通,電燈亮,此時,再扳動任何一個開關,都能使電燈熄滅。這屬於兩地開關控制
❹ c51單片機:兩個獨立按鍵控制一個led,k1按下松開led閃爍,k2按下松開led滅
#include"reg52.h"
typedefunsignedintu16;
typedefunsignedcharu8;
sbitled=P2^0;//把所要控制的led燈定義為p2.0這個口
sbitk1=P2^1;
sbitk2=P2^2;
voiddelay(u16i)
{
while(i--);
}//一個延時程序
voidmain()
{
if(k1==1)
while(1)
{
led=1;
delay(50000);//大約延時450ms
led=0;
if(k2==1)
break;
}
led=0;
}
思路很簡單,就是用檢測的方法去掃描相應的按鍵是否被觸發,然後執行相應的子程序。