導航:首頁 > 操作系統 > 51單片機控制開關程序

51單片機控制開關程序

發布時間:2025-08-17 17:38:03

❶ 如何用單片機一個按鈕開關控制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;
*/

}

}

}

}
//-----------------------------------------------
//上面程序中有很多地方可以優化,這里只是給出一個參考供學習。

❷ 51單片機如何用一個定時器當多個延時電路用, 就是按下開關一,燈泡亮三秒。 按下開關二,燈泡亮五秒。

使用單片機的定時器來實現不同的延時效果,是一個常見的技術應用。具體來說,可以通過配置定時器產生一個秒周期的時間基準,然後利用計數器來累計時間。這個計數器可以設置為從1開始計數到任意數值,比如10000或者1000000,也可以實現循環計數,即計數到100後重新從1開始。在按下開關一的時候,我們記錄下當前的計數器值作為K1,同時點亮燈泡;當計數器值達到K1+3時,燈泡會熄滅。

同樣的方法可以應用於開關二的延時控制。按下開關二時,同樣記錄下當前的計數器值作為K2,然後點亮燈泡;當計數器值達到K2+5時,燈泡會熄滅。這樣,通過調整K1和K2的值,可以實現不同延時時間的需求。

值得注意的是,這種方法的關鍵在於定時器的配置和計數器的使用。首先,需要設置定時器的定時周期,使其能夠產生秒級別的基準時間。然後,通過軟體編程的方式,實現對計數器的初始化和計數操作。當計數器達到預設值時,觸發相應的輸出控制邏輯,實現燈泡的點亮和熄滅。

這種實現方式不僅靈活,而且能夠有效地利用單片機的資源。通過調整定時器的配置和計數器的數值,可以輕松實現多種延時效果,滿足不同的應用需求。這對於開發需要多種延時控制功能的項目來說,是一種非常實用的技術手段。

總之,利用單片機的定時器來實現延時控制是一種高效且靈活的方法。通過合理配置定時器和計數器,可以方便地實現不同延時時間的需求,滿足各種應用場景的要求。

❸ 51單片機如何用一個按鍵控制一段程序的運行與停止

1、創建項目文件。

6、當按下一個按鍵時,關閉燈,整個程序運行,再按一次,程序停止。

❹ 51單片機C語言程序

//你原來的b2,b2都是死循環,這是不行的,只有主函數才可以死循環。
//你的主函數結構也有問題。
//為你增加了一個按鍵檢測的函數。
//下列程序通過了實驗測試。
//b1輸出的周期大約0.9s。
//b2輸出的周期大約0.6s。

//K為觸動開關,reg為紅燈,bice為綠燈,b1、b2 各為一個方波,
//按第一次觸動開關時紅燈亮寬態、b1輸出,
//按第二次綠燈亮、為b2輸出,
//按第三次都關閉.

#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uint a;
void b1();
void b2();
sbit t = P1^0;
sbit k = P3^5;
sbit reg = P3^3;
sbit bice = P3^2;

void delay(uchar z)
{
uint x,y;
for(x = z; x > 0; x--) for(y = 110; y > 0; y--);
}

bit key()
{
bit kkk;
kkk = k; //讀入按鍵.
if(kkk == 1) return 0;//沒有按下.
delay(5); //延時.
if(k == kkk) return 1;//兩次相等.
return 0;
}

void main()
{
while(1) {
P3 = 0xff;
while(!key()); //靜等按下第一次.
reg = 0;
bice = 1;
while(!key()) b1(); //沒有按下第二宴碰次就循環等待.
reg = 1;
bice = 0;
while(!key()) b2(); //沒有按下第三慎祥源次就循環等待.
}
}

void b1()
{
P1 = 0xfe; a = 50000; while(a--);
P1 = 0xff; a = 50000; while(a--);
}
void b2()
{
P1 = 0xfe; a = 30000; while(a--);
P1 = 0xff; a = 30000; while(a--);
}

❺ 用51單片機讀取撥碼開關的C程序,兩個8421撥碼開關

假如DIP開關接P1,共8位,檢測後通過串口發送出去。
#include<reg51.h>
main()
{
TMOD=0x20;
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
TR1=1;
TI=0;
while(1)
{
if(P1!=0xff)
{
SBUF=P1;
while(!TI);
TI=0;
}
}
}

❻ 用51單片機的輸出的模擬信號,即0,1怎麼控制電動機的開關,電動機的電

首先,51單片老顫機的輸出的0,1,不叫模擬信號,叫數字信號,或脈沖信號。

這很簡單的。

用指含陸單片機一個引腳控制一個三極體,唯頃三極體控制一個繼電器,再由繼電器控制電機。

如下圖

閱讀全文

與51單片機控制開關程序相關的資料

熱點內容
什麼伺服器最好看 瀏覽:482
c語言中怎麼選擇編譯宏 瀏覽:79
單片機簡稱 瀏覽:895
python游戲軟體開發 瀏覽:646
編譯php擴展為dll 瀏覽:208
中國美pdf 瀏覽:402
RBC銀行app如何使用 瀏覽:828
解壓神探游戲 瀏覽:829
無加密文檔粘貼內容要密碼 瀏覽:617
程序員買車險 瀏覽:621
解壓視頻美國隊長 瀏覽:926
單車伺服器怎麼使用 瀏覽:147
安卓怎樣打開定位伺服器地址 瀏覽:163
elgamal加密演算法實現 瀏覽:949
python讀懂全球最大百科 瀏覽:384
相位差單片機測量 瀏覽:665
java中的finally 瀏覽:582
命令行加路由 瀏覽:900
招行app如何看到自己的卡號 瀏覽:59
51單片機控制開關程序 瀏覽:523