❶ 51單片機怎麼用匯編實現流水燈循環點亮,要求亮1秒熄滅,等待一秒後下一個才點亮
嘿嘿 俺可以幫你噢
1 給你一個演算法:
可以利用定時計數器0 定時50毫秒 允許中斷 再設置一個軟體計數器(初始值為20)
每當定時器定時時間到即50毫秒 計入中斷服務程序後 軟體計數器減1
等於0時 表示1秒鍾到( 要重新給軟體計數器送初值) 同時根據用戶標志FAL1=1 則
顯示內容左移 同時顯示 並將用戶標志FAL1取反
否則 顯示全滅 並將用戶標志FAL1取反。具體指導,可以參見右上角的網路私信。
呵呵 滿意就選滿意回答
❷ 求實現51單片機按下按鈕LED燈亮1秒後熄滅
外部中斷的優先順序是高於定時器中斷的。首先是觸發外部中斷嘛,在外部中斷程序裡面開定時器中斷,定時器設置為50ms,這個直接裝初值大概46000(晶振12m)的樣子,具體你自己算一下。然後在調用定時器中斷程序裡面肯定是要有個標志位的,這個標志位會累加n個定時器時間直到8s,然後在這個定時器中斷程序裡面不斷檢測3.2口電平就行了,如果變回高電平就把燈在點亮(比如在這句直接將flag賦到設定的技術最大值)就行了。最好用下降沿觸發,低電平觸發容易出問題總感覺,可能你程序邏輯是完全正確的,但是模擬或者實物的時候會出問題。
❸ 51單片機控制led燈亮兩秒滅一秒 用單片機編程,不用c語言。用中斷和循環兩種,謝謝
您好,這樣:
P0=0x00;
if(a==20)
{
a=0;
P0=0x01;
}
如果你是要實現一秒鍾亮,一秒鍾滅,你可以這樣
D=0x00;
while(1)
{
if(a==20)
{
a=0;
D=~D;
}
}其中D是led對應的一個io口(一定要先定義D)
❹ 求實現51單片機按下按鈕LED燈亮1秒後熄滅
要實現51單片機按下按鈕LED燈亮1秒後熄滅,這很簡單,檢測到按下按鈕後點亮LED燈並開始計時,1秒到就滅燈。用定時器定時並用中斷方式,計中斷次數,定時×次數=1秒即可。
❺ 51單片機定時器定時 2秒燈亮 3秒燈滅,如此循環
如果想實現無限循環那就採用死循環方式,可以無限的循環如while(1){};然後設定定時器定時時間為1s(此值需要根據單片機確定是否可以設定這么大),其次,設定一個變數對時間進行計數,根據計數情況做出相應的改變,程序可以這樣設定:
unsigned
char
gucledstatus
=
0x00;
//全局變數,表示燈當前的狀態
0為滅,1為亮
volatile
unsigned
int
gustimecnt;
//全局變數對時間計數
int
main()
{
//增加定時器初始化並開放中斷
while(1)
{
if(gucledstatus
==
0x01)
//當前為亮狀態
{
if(gustimecnt
>=
7200)
//兩個小時時間到
{
gustimecnt
=
0x00;
//清零
gucledstatus
=
0x00;
//燈為滅狀態
//此處加程序代碼,控制燈為滅的狀態
}
else
{
//此處加程序代碼,控制燈為亮的狀態,此處會重復執行,可以進行控制
}
}
else
if(gucledstatus
==
0x00)
//燈為滅的狀態
{
if(gustimecnt
>=
3600)
//1個小時
{
gustimecnt
=
0x00;
gucledstatus
=
0x01;
//亮狀態
//增加程序代碼,控制燈亮
}
else
{
//增加程序代碼,控制燈滅,此處會重復執行,可以進行控制
}
}
}
return
0;
}
在中斷函數中,對gustimecnt進行遞增即可!
❻ 用定時器實現51單片機上LED燈每隔兩秒亮暗閃爍
你用的是幾個燈啊?比如說8個燈吧,用p0口,
就是直接講p0口與led直接相連就行了啊,注意led的另一端要接在一起,共地或者高電平都可以,但是為了保護led,最好在每個小燈上串上一個電阻(若單片機採用的是5v電壓,電阻可選用500歐左右的就可以了),以減小通過led的電流。剩餘的就是單片機的最小系統了,沒什麼好說的吧,就是晶振,復位而已。
程序嘛,也很簡單啊,你說用定時器,每個兩秒如果單純用一個定時器的話肯定不夠用的,要結合循環判斷語句,比如你採用12m的晶振,並且將定時中斷時間定為50ms,那麼設置一個變數,每20次就是一秒了,所以40次就是兩秒。這樣的話,每個40次就讓led的狀態(用0和1表示亮與滅)改變就可以了。main函數中應該設置一個死循環函數,可用while(1),讓單片機不斷的循環工作。
❼ 51單片機 定時器問題 (LED小燈 每隔一秒亮滅一次)
TF0 初始值為0。
TR0 = 1; //啟動計數器0
啟動後,TH0TL0就會自動加一。
如下:
B800
B801
B802
……
當加到0000時,TF0就自動為1。