導航:首頁 > 操作系統 > 51單片機自動流水燈製作

51單片機自動流水燈製作

發布時間:2023-03-24 12:21:03

❶ 如何用單片機做流水燈

因為電路用單片機控制,所以電路非常簡潔。其電路原理圖見下圖,印製板圖如下圖所示。

電路的核心部分是AT89C2051單片機,前面提到它有Pl和P3兩組I/O口,我們這里只用到Pl口,共8個引腳。圖中Cl、R9組成典型的上電復位(即在加電時單片機復位)電路,XTAL、C2、C3與AT89C2051片內振盪電路組成時鍾振盪器。值得注意的是,C2、C3的容量不能與圖中數值偏差太大,否則可能引起不起振或振盪不穩定。XTAL的頻率可以在4-20MHz之間,不過,頻率的變化會導致程序運行速度的變化,這樣就需要調整延時子函數的參數。事實上,不調整參數亦可,只是此時延遲時間不再是1秒,其延遲時間會隨著XTAL頻率的降低而增加。

二、軟體部分

本程序包含兩個函數,一個是主函數,另一個是延時子函數。源程序如下(為了便於講解,我們為每行程序加上了編號):

程序各行作用如下:

00行:把AT89C2051的頭文件「AT89x051.H」包含進來。

01行:聲明Delay()延時子函數,該函數有一個無符號整型參數k,同時函數前面的void表明函數不返回函數值。

02行:延時子函數的開始,同時聲明兩個無符號整型變數i和j。

不過請注意,這里沒有象上期的程序一樣,把表示函數開始的「{」單獨成行,而是把下一行寫在一起了。事實上,寫C程序的時候,可以把多行寫作一行,C編譯器只要遇到分號就認為是一行語句的結束。

當然,我們不能因為C程序有這個特點,就隨意把多行合作一行書寫,實際書寫C程序的時候,還是要養成良好的程序書寫習慣,按照約定俗成的原則來書寫。

03行:聲明for()循環。這個循環的初始條件是i=0,終止條件是i<k,循環計數是每循環一次,用手計數的變數i加1。因此,這個循環的循環次數就是k次。這樣,只要改變k的值(即改變Delay()延時子函數的參數k的值),就可以很容易地控制循環次數,從而獲得不同的延時時間。

04行:聲明嵌套在03循環中的一個新的for()循環,這個循環與上一個循環相似,其循環次數是120次。本循環與上一個循環嵌套後,使得總的循環次數達120×k次。

05行:第一個分號,表示L條空語句,佔用一個機器時間,以實現延時的目的。後面的兩個「}」中,第一個「}」是04行for()循環的結束標志,程序遇到它時,將自動返回04行,使用於循環計數的變數j加1,同時判斷j是否小於120,如果否,則轉入05行;第二個是03行for()循環的結束標志,程序遇到它則會返回03行

❷ 很簡的51單片機C語言流水燈程序

1、51單片機C語言實現循環8個流水燈左移三次,後右移三次。
常式:
#include<reg51.h> //51單片機頭文件
#include <intrins.h> //包含有左右循環移位子函數的庫
#define uint unsigned int //宏定義
#define uchar unsigned char //宏定義
sbit beep=P2^3;
void delay(uint z) //延時函數,z的取值為這個函數的延時ms數,如delay(200);大約延時200ms.
{ //delay(500);大約延時500ms.
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main() //主函數
{
uchar a,i,j;
while(1) //大循環
{
a=0xfe; //賦初值
for(j=0;j<3;j++) for(i=0;i<8;i++) //左移三次
{
P1=a; //點亮小燈
beep=0; //開啟蜂鳴器
delay(50); //延時50毫秒
beep=1; //關閉蜂鳴器
delay(50); //再延時50毫秒
a=_crol_(a,1); //將a變數循環左移一位
}
a=0x7f;
for(j=0;j<3;j++) for(i=0;i<8;i++) //右移三次
{
P1=a; //點亮小燈
beep=0; //開啟蜂鳴器
delay(50); //延時50毫秒
beep=1; //關閉蜂鳴器
delay(50); //再延時50毫秒
a=_cror_(a,1); //將a變數循環右移一位
}
}
}
2、51單片機是對所有兼容Intel
8031指令系統的單片機的統稱。該系列單片機的始祖是Intel的8031單片機,後來隨著Flash
rom技術的發展,8031單片機取得了長足的進展,成為應用最廣泛的8位單片機之一,其代表型號是ATMEL公司的AT89系列,它廣泛應用於工業測控系統之中。很多公司都有51系列的兼容機型推出,今後很長的一段時間內將佔有大量市場。51單片機是基礎入門的一個單片機,還是應用最廣泛的一種。

❸ 51單片機,想做個自動流水燈,需要什麼元器件詳細說明

單片機一塊,電池二節,led小燈若干,電阻若干,晶振一個,電容2個,麵包板一塊,導線若干,這些就可以了

❹ 51單片機流水燈安裝與調試的過程

利用實驗室提供的單片機實驗開發板的最小系統電路模塊、流水燈電路模塊,以及Protues模擬軟體搭建電路,實現I/O口循環流水燈演示效果。
LED流水燈控制電路如圖2-1所示,八個LED燈D0-D7(可選擇LED-RED)陽極接到+5V,陰極通過300歐姆電阻分別接到單片機的P1.0-P1.7八個IO口上。I/O口循環流水燈效果實現流程如圖2-2所示,依次從第一盞燈開始,分別點亮每一盞燈,中間調用延時子函數便可使得流水燈的效果清晰可見。點亮LED燈的具體實現方法與上節相同,只需讓相應的IO口輸出低電平即可,程序實現代碼已給出。按照上節給出的項目開發流程,從模擬電路搭建到程序編寫,再到模擬調試以及最後的實物調試完成循環流水燈的實現。

❺ 用51單片機設計一個可儲存狀態狀態流水燈系統

你好:
我現在手機沒法給你圖。但是你的要求還是很簡單的,我給你說幾個要點。
1.你先編寫能按鍵切換樣式的程序,這個簡單吧。
2.把1中的程序改一下,使按鍵按下後將一個變數賦值,再使用switch case語句對值進行選擇判斷,當為…的時候使LED呈現什麼樣式。
3.加入儲存代碼,在調用鍵盤函數後或在鍵盤函數內對變數賦值之後就把變數保存,然後開機時在while之前寫一個讀取代碼並賦值給同一個變數。
有不懂的地方隨時回復我。
希望我的回答能幫助到你。

❻ c51單片機中如何用匯編語言編寫流水燈

51單片機用匯編語言編寫流水燈程序,就是控制多個LED
,使其在特定時間間隔內,只有一個LED
發光,其他熄滅,用這種方式順序移動點亮LED的位置,就形成了流水燈的效果。以下是程序:
;假設晶振12MHZ,P1控制8個LED低電平亮
;啟動入口========================
ORG
0000H
;復位啟動
AJMP
START
;
ORG
001BH
;T1中斷
AJMP
T1INT
;
;定義變數========================
YSJS
EQU
30H;延時計數器
LED
EQU
31H;LED控制緩沖器
;主程序==========================
START:
MOV
LED,#0FEH
;初始化數據
MOV
YSJS,#0
;
;
MOV
TMOD,#10H
;定時器1工作於方式1,16位定時器
MOV
TL1,#0B0H
;設置定時初值
MOV
TH1,#3CH
;定時時間=50mS
SETB
ET1
;使能定時器1中斷
SETB
TR1
;啟動定時器1
SETB
EA
;開總中斷
MOV
P1,LED
;初始化流水燈
;
LOOP:
JMP
LOOP
;循環等待中斷
;
;
T1INT:
PUSH
PSW
;定時器1中斷程序
PUSH
ACC
;保護現場
;
MOV
TH1,#3CH
;定時時間=50mS
MOV
TL1,#0B0H
;
INC
YSJS
;
PUSH
ACC
;保護ACC
MOV
A,YSJI
;
CJNE
A,#2,QT1
;50mS*2=100mS
MOV
P1,LED
;
MOV
A,LED
;
RL
A
;累加器A的值循環左移1位
MOV
LED,A
;
MOV
YSJS,#0
;
;
QT1:
POP
ACC
;恢復現場
POP
PSW
;
RETI
;返回主程序
END
;匯編程序結束

❼ 51單片機流水燈用C語言編寫的設計程序

其實很簡單
就是用_cror_()函數或者 _crol_()函數,第一個是右移第二個是左移

❽ 51單片機流水燈程序

程序如下:

#include <reg52.h>

sbit led1 = P2^0;

sbit led2 = P2^1;

sbit led3 = P2^2;

sbit led4 = P2^3;

sbit led5 = P2^4;

sbit led6 = P2^5;

sbit led7 = P2^6;

sbit led8 = P2^7;


void main()

{

扮模 int i,j;

//點亮第一個燈

led1 = 1;

led2 = 0;

led3 = 0;

led4 = 0;

led5 = 0;

led6 = 0;

led7 = 0;

led8 = 0;

//延粗缺鏈時1秒

for(i = 0;i < 110; ++i)

{

for(j = 0; j < 1000; ++j)

{

;//什麼也不做

}

}

//點亮第二個燈

led1 = 0;

led2 = 1;

led3 = 0;

led4 = 0;

led5 = 0;

led6 = 0;

led7 = 0;

led8 = 0;

//點亮剩餘的燈

//省略??

while(1);

}

(8)51單片機自動流水燈製作擴展閱讀:

流水燈幾點說明:

void:因為該延時函數不需要返回值,所以寫為void

delay1s:該函數的函數名,命名需要符合C語言的標識符命名規則。

(): 不需要傳入參數,所以括弧中為空

至此我們岩孫可以把流水燈程序寫為以下形式:

❾ 51單片機,公式怎麼實現流水燈

;電路圖在附飢衡件內,經模擬通過,不知能不能達到你的要求。
;想要您的分真難啊
;呵呵!
org 0000h
ajmp start
org 0030h
start:
mov a,#0ffh ;
clr c ;
mov r2,#08h ;循環散肢缺八次。
loop: rlc a ;帶進位左移。
mov p1,a ;輸出到P1口。
call delay ;延時一段時間
djnz r2,loop ;反復循環
mov r2,#07h ;再往回循環。
loop1: rrc a ;帶進位右移
mov p1,a ;輸出到P1口。沖辯
call delay ;延時一段時間
djnz r2,loop1 ;反復循環
jmp start ;重新開始
delay: mov r3,#20 ;延時子程序
d1: mov r4,#20
d2: mov r5,#248
djnz r5,$
djnz r4,d2
djnz r3,d1
ret
end

❿ 單片機流水燈C語言程序(8個燈,依次點亮每個燈,延時500MS)

單片機流水燈C語言程序的源代碼如下:

#include //51系列單片機定義文件

#define uchar unsigned char //定義無符號字元

#define uint unsigned int //定義無符號整數

void delay(uint); //聲明延時函數

void main(void)

{

uint i;

uchar temp;

while(1)

{

temp=0x01;

for(i=0;i<8;i++) //8個流水燈逐個閃動

{

P1=~temp;

delay(100); //調用延時函數

temp<<=1;

}

temp=0x80;

for(i=0;i<8;i++) //8個流水燈反向逐個閃動

{

P1=~temp;

delay(100); //調用延時函數

temp>>=1;

}

temp=0xFE;

for(i=0;i<8;i++) //8個流水燈依次全部點亮

{

P1=temp;

delay(100); //調用延時函數

temp<<=1;

}

temp=0x7F;

for(i=0;i<8;i++) //8個流水燈依次反向全部點亮

{

P1=temp;

delay(100); //調用延時函數

temp>>=1;

}

void delay(uint t) //定義延時函數

{

register uint bt;

for(;t;t--)

for(bt=0;bt<255;bt++);

}

(10)51單片機自動流水燈製作擴展閱讀

51單片機流水燈的源代碼如下

#include<reg51.h>

#include<intrins.h>

voiddelay(inta)

{

inti;

while(a--)for(i=0;i<110;i++);

}

main()

{

inti;

while(1)

{

P0=0xfe;

for(i=0;i<8;i++)

{

P0=_crol_(P0,1);

delay(500);

}

}

}

閱讀全文

與51單片機自動流水燈製作相關的資料

熱點內容
手中的app如何隱藏 瀏覽:1001
安卓什麼壁紙軟體號 瀏覽:436
java設置內存大小 瀏覽:434
php循環匹配 瀏覽:323
技巧pdf 瀏覽:479
單片機斷程序怎麼解決 瀏覽:160
如何製作APP的圖片 瀏覽:506
php大小排序 瀏覽:548
linuxkerberos 瀏覽:126
暗黑破壞神3如何下載亞洲伺服器 瀏覽:953
linux中ftp伺服器地址怎麼看 瀏覽:438
ansys命令流do 瀏覽:122
單片機6502 瀏覽:765
自助洗車有什麼app 瀏覽:937
程序員離職率多少 瀏覽:322
程序員那麼可愛電視劇今天沒更新 瀏覽:337
我的世界地形演算法 瀏覽:344
台灣dns的伺服器地址雲空間 瀏覽:288
音樂噴泉軟體要什麼加密狗 瀏覽:501
androidhttpmime 瀏覽:774