㈠ 用單片機控制流水燈的六種方案,要程序電路圖,詳細講解
;//*********************************************************
;//實現功能:本程序實現在P0口模擬一種流水燈程序
;//*********************************************************
p_out equ P0 ;宏定義P0為p_out
org 00h ;程序的開始地址
ajmp main ;跳到main
org 030h
;//******************主函數***************************
;//描 述:實現在P0口模擬一個流水燈程序
;//設計人: lishengling24
;//****************************************************
main: ;主函數
mov sp,#50h ;設置sp堆棧的初始位置
mov a,#0feh ;初始化acc
main_1:
mov p_out,a ;點亮一個燈
mov r1,#250 ;
mov r0,#250 ;
Call delay_time;調用時間延遲子程序,上面兩句是設置延遲時間
mov p_out,#0ffh;熄滅燈
RL a ;循環左移一位準備點亮下一個燈
JMP main_1 ;跳到main_1循環
;//******************時間延遲函數**********************
;//描 述:用指令實現延時一段時間
;//入口參數:r1為高位,r0為低位,都是十六進製表示?
;//出口參數:無
;//設計人:lishengling24
;//****************************************************
delay_time:
push acc ;acc入棧
push psw ;psw入棧
mov a,r0 ;把r0賦給acc
inc r1 ;r1加1,因為djnz是先減1再比較是否為零,如果不加1
;當r1的初值為0的時候,減1後變成了0x0ff,改變了當
;初預想的延遲時間計數值
inc r0 ;道理和inc r1 一樣,當然r0和r1的初值不能為0x0ff
loop:
nop
nop
nop
nop
nop
nop
djnz acc,loop ;
mov a,r0 ;
djnz r1,loop ;
pop psw ;psw出棧
pop acc ;acc出棧
ret
end ;需要其他5種方案的程序和電路,在網路HI我。
以下是C的寫法:
//*********************************************************
//實現功能:本程序實現在P0口模擬一個流水燈程序
//*********************************************************
#include <reg51.h>
#define p_out P0 //宏定義輸出的i/o口為p0
//******************時間延遲函數**********************
//描 述:用指令實現延時一段時間
//入口參數:int i,為時間延遲參數
//****************************************************
void delay_time(int i)
{
while(i)
i--;
}
//******************主函數***************************
//描 述:實現在P0口模擬一個流水燈程序
//****************************************************
void main(void)
{
unsigned char i=0; //初始化一個局部變數為0
p_out=0xff; //初始化將要輸出的i/o口,輸出高電平,熄滅所有燈
while(1)
{
for(i=0;i<8;i++)
{
p_out=~(1<<i);//點亮一個燈,
delay_time(50000); //延遲一段時間
p_out=0xff;//熄滅所有燈
}
}
}
㈡ 如何用單片機做流水燈
因為電路用單片機控制,所以電路非常簡潔。其電路原理圖見下圖,印製板圖如下圖所示。
電路的核心部分是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單片機流水燈5v怎麼畫
1、首先要設計電路圖,利用proteus軟體進行電路圖的設計。所需元器件:AT89C51單片機1個。LED-RED8個。電源VCC1個。
2、使用keil4軟體進行流水燈程序的編輯。
3、方法一編寫程序採用的是左移函數(_crol_(a,b))和右移函數(_cror_(a,b))的方法,需在前加上頭文件#include
4、總結:單片機流水燈的設計分為兩個步驟,第一步是原理圖的繪制;第二步是keil4流水燈控製程序的編寫。在寫程序的時候最好使用第一種方法,採用位移函數來進行流水燈的設計。
㈣ 51單片機8個流水燈流程圖
一單片機8個流水燈的這個流程表的話,這個你這個你要看他的一個品牌牌子型號,這樣的話才能更好的配合他的一個這個這個表。
㈤ 單片機,流水燈程序。急!有圖!
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit key=P0^1; //用的時候需加上拉電阻
uint t;
void Delay_ms(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void Led_F() //從上往下流動
{
uchar a=0xfc; //a=11111100
while(t) //當按了一下按鍵流水燈開始
{
P1=a;
Delay_ms(500);
a=_crol_(a,2); //a數據位向左移兩位11111100->11110011
if(t==2) //如果是第二次按下按鍵則回到初始狀態
{
t=0;
P1=0xff;
break;
}
}
}
void Key_T() //鍵盤檢測
{
if(key==0)
{
Delay_ms(50);
if(key==0)
{
t++;
}
}
}
void main()
{
while(1)
{
Key_T();
Led_F();
}
}
㈥ 單片機流水燈設計程序,圖,帶開關的
開關可以裝在電源上,按下電源接通! /*************************************************************51單片機流水燈C語言源程序
文件名稱:led.c
文件說明:流水燈C程序
編寫人員:
編寫日期:程序說明:MCU採用AT89S51,外接12M晶振,P1口輸出
版權標註:*************************************************************/
#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++);
}
㈦ 如何用單片機簡單製作一個流水燈
工具:STC系列51單片機、串口轉換器(USB轉TTL 或232轉TTL)
材料:實驗板一塊(可以買現成的,也可以買麵包板自己搭建),電阻、LED燈 若干,5V電源等。
以下程序可以直接用Keil C 直接編譯執行。
//可以通過左移函數_crol_()和右移函數_cror_()來實現LED等的來迴流動。
//具體實現方法可以參考如下程序:
#include<reg51.h>
#include<intrins.h>
#defineuintunsignedint
#defineucharunsignedchar
voiddelay(uinta);
voidmain()
{
P1=0xfe;
while(1)
{
//向左循環點亮LED
for(i=0;i<7;i++)
{
P1=_crol_(P1,1);//左移一位,點亮下一位LED
delay(55);
}
//向右循環點亮LED
for(i=0;i<7;i++)
{
P1=_cror_(P1,1);//右移一位,,點亮上一位LED
delay(55);
}
}
}
//延時函數,延時a毫秒
voiddelay(uinta)
{
uintx,y;
for(x=a;x>0;x--)
for(y=110;y>0;y--);
}
㈧ 急求一個單片機流水燈(16個燈)電路圖!!
電路如下:
將16個LED的陰極(Led-、K極)連接到單片機的IO口(P1.0、P1.1...P1.7。。。),
LED的陽極(Led+、A極)串聯一個560歐姆電阻(一共16個)到電源正極
(Vcc、5V)
如果要點亮一個Led的話(P1.0)只要
CLR P1.0
要熄滅一個Led的話(P1.0)只要
SETB P1.0
即可
夠詳細了吧?!
㈨ 求用單片機控制流水燈的最簡單的電路圖!
單片機流水燈是初學者的典型常式。不但需要實現,還需要理解,並通過實現來熟悉單片機原理及編程。因此,建議你到各種開發板網站下載專業套件,這樣,會更有助於你的學習。