1. 51單片機按鍵控制
#include<reg52.h>
sbit key=你接按鈕的埠;
sbit led=你接LED的埠;
void delay(unsigned int ms)
{
unsigned int x,y;
for(x=ms;x>0:x--)
for(y=100;y>0;y--);
}
void main()
{
while(1)
{
if(key==0)//判斷鍵是否按下
{
delay(10);//10ms延遲
if(key==0)//消抖
{
led=1;//如果共陽極led=0;
delay(500);
led=0;
}
}
}
}
2. 如何用單片機一個按鈕開關控制3個燈3種效果。流水。閃爍。還有一直亮。用keil編程。
下面是用C51編寫的簡單程序:
#include <reg51.h>
#include <intrins.h>
sbit io_Key = P1 ^ 1;
sbit led1 = P1 ^ 2;
sbit led2 = P1 ^ 3;
sbit led3 = P1 ^ 4;
unsigned char ucCount = 0;
bit flag05s = 0;
//---------------------------------
void delay125us(void) //@12.000MHz
{
unsigned char i;
i = 60;
while (--i);
}
void Timer0Init(void) //10毫秒@12MHz
{
TMOD &= 0xF0; //設置定時器模式
TMOD |= 0x01; //設置定時器模式
TL0 = 0xF0; //設置定時初值
TH0 = 0xD8; //設置定時初值
TR0 = 1; //開定時器0
ET0 = 1; //開定時器0中斷
EA = 1; //開總中斷
}
//T0中斷用來計數器溢出
void zd0(void) interrupt 1
{
TL0 = 0xF0; //設置定時初值
TH0 = 0xD8; //設置定時初值
if(++ucCount >= 50)
{
ucCount = 0;
flag05s = 1; //g_flag05s = isYes定時0.52秒到,用於測量周期延時
}
}
void main(void)
{
unsigned char CountTemp = 0, ucState = 0;
Timer0Init();
while(1)
{
//-------------------------------
//簡單的按鍵檢測程序:
io_Key = 1;
_nop_();
if( io_Key == 0 )
{
CountTemp = 0;
do
{
delay125us();
if( io_Key != 0 ) break;
} while(++CountTemp > 160); // 延時20ms去抖動
if(CountTemp > 160)//如果按鍵時間有效,改變狀態
{
switch(ucState)
{
case(0):
{
ucState = 1;
led1 = 0;
led2 = 0;
led3 = 0;
}
break;
case(1):
{
ucState = 2;
led1 = 0;
led2 = 0;
led3 = 0;
}
break;
case(2):
{
ucState = 0;
led1 = 0;
led2 = 1;
led3 = 1;
}
break;
}
while(io_Key == 0); //等待按鍵釋放
}
}
//------------------------------
//每0.5秒改變一下LED狀態
if(flag05s == 1)
{
flag05s = 0;
switch(ucState)
{
case(0):
{
led1 = !led1;
led2 = !led2;
led3 = !led3;
}
break;
case(1):
{
bit ledTemp = led1;
led1 = led2;
led2 = led3;
led3 = ledTemp;
}
break;
//LED常亮可以忽略改變LED狀態
/*
case(2):
{
led1 = 0;
led2 = 0;
led3 = 0;
}
break;
*/
}
}
}
}
//-----------------------------------------------
//上面程序中有很多地方可以優化,這里只是給出一個參考供學習。
3. 51單片機如何用一個按鍵控制一段程序的運行與停止
1、創建項目文件。
6、當按下一個按鍵時,關閉燈,整個程序運行,再按一次,程序停止。
4. 單片機一個按鍵控制一個程序
你把幾種方式寫成幾個子程序,然後主程序調用按鍵檢測,根據檢測到的鍵值調用對應的子函數即可
5. C51單片機編程,按鍵控制流水燈
#include "reg51.h"
unsigned char led[]={0xfe,0xfd,0xfb,0xf7}; //LED燈的花樣數據
void delay(unsigned char time){ //延時函數
unsigned int j=15000;
for(;time>0;time--)
for(;j>0;j--);
}
void main(){
bit dir=0,run=0; //標志位定義及初始化
char i;
while(1){
switch (P0 & 0x0f){ //讀取鍵值
case 0x0e:run=1;break; //K1動作,設run=1
case 0x0d:run=0,dir=0;break; // K2動作,設run=dir=0
case 0x0b:dir=1;break; //K3動作,設dir=1
case 0x07:dir=0;break; //K4動作,設dir=0
}
if (run) //若run=dir=1,自上而下流動
if(dir)
for(i=0;i<=3;i++){
P2=led[i];
delay(200);
}
else
for(i=3;i>=0;i--){ //run=1,dir=0,自下而上流動
P2=led[i];
delay(200);
}
else P2=0xff; //若run=0,全部燈滅
}
}
6. 怎樣用單片機編程。兩個獨立按鍵,控制數碼管的加減
這個很容易嘛,你先設置一個寄存器,然後一直掃描兩個按鍵(假設K1按下為加,K2按下為減),假設檢測到K1被按下,寄存器就加1,如果檢測到K2被按下,寄存器就減1;然後再調用顯示函數就OK了。、 ORG 0000H
LJMP START
ORG 0030H
START:
MOV R2, #1
LOOP:
CALL DISP
JB P1.6, NEXT
CALL DL10MS
JB P1.6, NEXT
JNB P1.6, $
DJNZ R2, NEXT
MOV R2, #10
NEXT:
JB P1.7, LOOP
CALL DL10MS
JB P1.7, LOOP
JNB P1.7, $
INC R2
CJNE R2, #11, LOOP
JMP START
;----------------------------------------
DISP:
MOV A, R2
DEC A
MOV DPTR, #TAB
MOVC A, @A + DPTR
MOV P2, A
RET
DL10MS:
MOV R6, #20
DJNZ R7, $
DJNZ R6, $ - 2
RET
;----------------------------------------
TAB:
DB 0C0H, 0F9H, 0A4H, 0B0H, 99H
DB 92H, 82H, 0F8H, 80H, 90H
;----------------------------------------
END
7. 單片機 用C語言怎麼編寫用一個按鈕,控制一盞燈的亮與滅的程序
讀取連接按鍵的IO口,判斷是否為低電平,如果是,延時(十毫秒左右可以),再次讀取IO口,判斷是否為低電平,如果是則表示有有效的按鍵按下,接著用while判斷等待按鍵釋放,然後讓連接led的IO口電平取反以控制其亮滅(是強電的燈可以通過此處控制繼電器的合、閉來控制燈的亮滅)。參考程序:if(key==0){delayms(10);if(key==10){while(key==0);//等待按鍵釋放,IO口恢復高電平led=!led;//按鍵控製程序}}
8. 單片機通過按鈕控制一個LED小燈的亮滅,請問這個程序怎麼寫
led應該是一個變數,是代表led燈 亮或者滅的一個變數。 當你按下開關後,s1==0,就執行 led=!led 這條語句。 led=!led
的意思就是取反的意思,即原來led燈亮的話 執行該條語句後就變成滅;原來滅的話 執行該條語句後
就變成亮。按鍵按下就打控制燈的io取反就可以了。如:if(key1==1){while(key1==1); //
等待按鍵放開led1=~led1;}
9. 單片機用C語言編程,有兩個按鈕開關,控制八個LED燈,要求實現兩種不同的功能,求功能和C語言程序
給你個沒有按鍵的,按鍵程序自己加上就行了
#include <reg51.h>
void main()
{
unsigned int i = 0; //定義循環變數i,用於軟體延時
unsigned char cnt = 0; //定義計數變數cnt,用於移位控制
while (1) //主循環,程序無限循環執行該循環體語句
{
P0 = ~(0x01 << cnt); //P0等於1左移cnt位,控制8個LED
for (i=0; i<20000; i++); //軟體延時
cnt++; //移位計數變數自加1
if (cnt >= 8) //移位計數超過7後,再重新從0開始
{
cnt = 0;
}
}
}
10. 51單片機如何控制按鈕。
什麼單片機按鍵原理都差不多的,准確來說不是控制,而是識別。識別到按下就行