導航:首頁 > 操作系統 > 單片機流水燈延時時間可調程序

單片機流水燈延時時間可調程序

發布時間:2022-08-02 11:44:04

㈠ 51單片機,有8個流水燈,每個之間延遲1秒,這個延遲用c程序編寫怎麼寫

要看你的時鍾周期,如果是12Mhz的話,每個時鍾周期MC=6*2/12 M =1us,所以延遲是讓機器計數1000000下,上面那個公式你自己套用24Mhz的就是2000000下。c語言的循環次數你自己算,每條指令一個周期,所以樓上的程序在12Mhz下是1s延遲。

㈡ 單片機匯編語言流水燈程序延時0.5秒 一共四個燈循環

4隻LED為共陽極連接,即單片機輸出端為低電平時即可點亮LED。

;用最直接的方式實現流水燈

ORG 0000H
START:MOV P1,#01111111B ;最下面的LED點亮
LCALL DELAY ;延時60秒
LCALL DELAY ;延時60秒
MOV P1,#10111111B ;最下面第二個的LED點亮
LCALL DELAY ;延時60秒
LCALL DELAY ;延時60秒
MOV P1,#11011111B ;最下面第三個的LED點亮 (以下省略)
LCALL DELAY
LCALL DELAY ;延時60秒
MOV P1,#11101111B
LCALL DELAY
LCALL DELAY ;延時60秒
MOV P1,#11110111B
LCALL DELAY
LCALL DELAY ;延時60秒
MOV P1,#11111011B
LCALL DELAY ;延時60秒
LCALL DELAY ;延時60秒
LCALL DELAY ;延時60秒
LCALL DELAY ;延時60秒
LCALL DELAY ;完成第一次循環點亮,延時約0.25秒
AJMP START ;反復循環

;延時子程序,12M晶振延時約250毫秒
DELAY: ;大約值:2us*256*256*2=260ms,也可以認為為250ms
PUSH PSW ;現場保護指令(有時可以不加)
MOV R4,#240
L3: MOV R2 ,#00H
L1: MOV R3 ,#00H
L2: DJNZ R3 ,L2 ;最內層循環:(256次)2個周期指令(R3減一,如果比1大,則轉向L2)
DJNZ R2 ,L1 ; 中層循環:256次
DJNZ R4 ,L3 ;外層循環:240次
POP PSW
RET
END

㈢ 單片機編程 使用按鍵控制流水燈延時時間,每按一次按鍵流水燈流水速度逐漸變慢,直到停止流水

你可以簡單地認為單片機只能輸出5V或者0V的電壓 分別對應1和0,那麼LED燈的另一端接地或者接5V,如果你 的單片機輸出5V接到LED燈,LED燈另一端接地 , 那就產生電壓了,電路就導通了,燈就亮了 ,反之也是這個道理。時間方面可以寫大致的延時,或者用定時器,這樣就比較精確了,你學會了這個就可以說入門了。

㈣ 求16個流水燈程序,有模式還可以調節快慢的,急求,謝謝。

《基於8051+Proteus模擬》案例

第01 篇基礎程序設計

01 閃爍的LED

/* 名稱:閃爍的LED

說明:LED按設定的時間間隔閃爍

*/

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit LED=P1^0;

//延時

void DelayMS(uint x)

{

uchari;

while(x--)

{

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

}

}

//主程序

void main()

{

while(1)

{

LED=~LED;

DelayMS(150);

}

}

02 從左到右的流水燈

/* 名稱:從左到右的流水燈

說明:接在P0口的8個LED從左到右循環依次點亮,產生走馬燈效果

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

//延時

void DelayMS(uint x)

{

uchari;

while(x--)

{

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

}

}

//主程序

void main()

{

P0=0xfe;

while(1)

{

P0=_crol_(P0,1);//P0的值向左循環移動

DelayMS(150);

}

}

03 8隻LED左右來回點亮

/* 名稱:8隻LED左右來回點亮

說明:程序利用循環移位函數_crol_和_cror_形成來回滾動的效果

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

//延時

void DelayMS(uint x)

{

uchari;

while(x--)

{

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

}

}

//主程序

void main()

{

uchari;

P2=0x01;

while(1)

{

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

{

P2=_crol_(P2,1);//P2的值向左循環移動

DelayMS(150);

}

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

{

P2=_cror_(P2,1);//P2的值向右循環移動

DelayMS(150);

}

}

}

04 花樣流水燈

/* 名稱:花樣流水燈

說明:16隻LED分兩組按預設的多種花樣變換顯示

*/

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

uchar code Pattern_P0[]=

{

0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff,

0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,

0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,

0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,

0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,

0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff

};

uchar code Pattern_P2[]=

{

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,

0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff,

0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,

0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,

0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,

0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff

};

//延時

void DelayMS(uint x)

{

uchari;

while(x--)

{

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

}

}

//主程序

void main()

{

uchari;

while(1)

{ //從數組中讀取數據送至P0和P2口顯示

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

{

P0=Pattern_P0[i];

P2=Pattern_P2[i];

DelayMS(100);

}

}

}

05 LED模擬交通燈

/* 名稱:LED模擬交通燈

說明:東西向綠燈亮若干秒,黃燈閃爍5次後紅燈亮, 紅燈亮後,南北向由紅燈變為綠燈,若干秒後南北向黃燈閃爍5此後變紅燈,東西向變綠燈,如此重復。

*/

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit RED_A=P0^0; //東西向燈

sbit YELLOW_A=P0^1;

sbit GREEN_A=P0^2;

sbit RED_B=P0^3; //南北向燈

sbit YELLOW_B=P0^4;

sbit GREEN_B=P0^5;

uchar Flash_Count=0,Operation_Type=1; //閃爍次數,操作類型變數

//延時

void DelayMS(uint x)

{

uchari;

while(x--)for(i=0;i<120;i++);

}

//交通燈切換

void Traffic_Light()

{

switch(Operation_Type)

{

case1: //東西向綠燈與南北向紅燈亮

RED_A=1;YELLOW_A=1;GREEN_A=0;

RED_B=0;YELLOW_B=1;GREEN_B=1;

DelayMS(2000);

Operation_Type=2;

break;

case2: //東西向黃燈閃爍,綠燈關閉

DelayMS(300);

YELLOW_A=~YELLOW_A;GREEN_A=1;

if(++Flash_Count!=10)return; //閃爍5次

Flash_Count=0;

Operation_Type=3;

break;

case3: //東西向紅燈,南北向綠燈亮

RED_A=0;YELLOW_A=1;GREEN_A=1;

RED_B=1;YELLOW_B=1;GREEN_B=0;

DelayMS(2000);

Operation_Type=4;

break;

case4: //南北向黃燈閃爍5次

DelayMS(300);

YELLOW_B=~YELLOW_B;GREEN_B=1;

if(++Flash_Count!=10)return;

Flash_Count=0;

Operation_Type=1;

}

}

//主程序

void main()

{

while(1)Traffic_Light();

}

06 單只數碼管循環顯示0~9

/* 名稱:單只數碼管循環顯示0~9

說明:主程序中的循環語句反復將0~9的段碼送至P0口,使數字0~9循環顯示

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar codeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

//延時

void DelayMS(uint x)

{

uchart;

while(x--)for(t=0;t<120;t++);

}

//主程序

void main()

{

uchari=0;

P0=0x00;

while(1)

{/* for(;i<11;i++){ P0=~DSY_CODE[i]; DelayMS(300);} //注:另一方案 */

P0=~DSY_CODE[i];

i=(i+1)%10;

DelayMS(300);

}

}

07 8隻數碼管滾動顯示單個數字

/* 名稱:8隻數碼管滾動顯示單個數字

說明:數碼管從左到右依次滾動顯示0~7,程序通過每次僅循環選通一隻數碼管

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar codeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//延時

void DelayMS(uint x)

{

uchart;

while(x--)for(t=0;t<120;t++);

}

//主程序

void main()

{

uchari,wei=0x80;

while(1)

{

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

{

P2=0xff; //關閉顯示

wei=_crol_(wei,1);

P0=DSY_CODE[i]; //發送數欄位碼

P2=wei; //發送位碼

DelayMS(300);

}

}

}

08 8隻數碼管動態顯示多個不同字元

電路如上圖

/* 名稱:8隻數碼管動態顯示多個不同字元

說明:數碼管動態掃描顯示0~7。

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar codeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//延時

void DelayMS(uint x)

{

uchart;

while(x--)for(t=0;t<120;t++);

}

//主程序

void main()

{

uchari,wei=0x80;

while(1)

{

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

{

P2=0xff;

P0=DSY_CODE[i]; //發送段碼

wei=_crol_(wei,1);

P2=wei; //發送位碼

DelayMS(2);

}

}

}

09 8隻數碼管閃爍顯示數字串

電路如上圖

/* 名稱:8隻數碼管閃爍顯示數字串

說明:數碼管閃爍顯示由0~7構成的一串數字

本例用動態刷新法顯示一串數字,在停止刷新時所有數字顯示消失。

*/

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

//段碼表

uchar codeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//位碼表

uchar codeDSY_IDX[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

//延時

void DelayMS(uint x)

{

uchart;

while(x--)for(t=0;t<120;t++);

}

//主程序

void main()

{

uchari,j;

while(1)

{

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

{

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

{

P0=0xff;

P0=DSY_CODE[j]; //發送段碼

P2=DSY_IDX[j]; //發送位碼

DelayMS(2);

}

}

P2=0x00; //關閉所有數碼管並延時

DelayMS(1000);

}

}

10 8隻數碼管滾動顯示數字串

電路如上圖

/* 名稱:8隻數碼管滾動顯示數字串

說明:數碼管向左滾動顯示3個字元構成的數字串

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

//段碼表

uchar codeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

//下面數組看作環形隊列,顯示從某個數開始的8個數(10表示黑屏)

uchar Num[]={10,10,10,10,10,10,10,10,2,9,8};

//延時

void DelayMS(uint x)

{

uchart;

while(x--)for(t=0;t<120;t++);

}

//主程序

void main()

{

uchari,j,k=0,m=0x80;

while(1)

{ //刷新若干次,保持一段時間的穩定顯示

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

{

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

{ //發送段碼,採用環形取法,從第k個開始取第j個

P0=0xff;

P0=DSY_CODE[Num[(k+j)%11]];

m=_crol_(m,1);

P2=m; //發送位碼

DelayMS(2);

}

}

k=(k+1)%11; //環形隊列首支針k遞增,Num下標范圍0~10,故對11取余

}

}

11 K1-K4 控制LED移位

/* 名稱:K1-K4 控制LED移位

說明:按下K1時,P0口LED上移一位;

按下K2時,P0口LED下移一位;

按下K3時,P2口LED上移一位;

按下K4時,P2口LED下移一位;

*/

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

//延時

void DelayMS(uint x)

{

uchari;

while(x--)for(i=0;i<120;i++);

}

//根據P1口的按鍵移動LED

void Move_LED()

{

if ((P1&0x10)==0) P0=_cror_(P0,1); //K1

elseif((P1&0x20)==0) P0=_crol_(P0,1); //K2

elseif((P1&0x40)==0) P2=_cror_(P2,1);//K3

elseif((P1&0x80)==0) P2=_crol_(P2,1); //K4

}

//主程序

void main()

{

ucharRecent_Key; //最近按鍵

P0=0xfe;

P2=0xfe;

P1=0xff;

Recent_Key=0xff;

while(1)

{

if(Recent_Key!=P1)

{

Recent_Key=P1; //保存最近按鍵

Move_LED();

DelayMS(10);

}

}

}

㈤ 單片機流水燈程序

我是一名多年的單片機工程師,下面的程序你參考一下


效果圖



程序如下:

#include<reg52.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

uint i;

uchar j;

void delay_ms(uint k) //延時子程序

{

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

{

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

{

;

}

}

}


main()

{

uchar a,b;

P1=0xfe;

delay_ms(500);

b=P1;


while(1)

{

for(a=0;a<3;a++)

{

b=_crol_(b,1);

P1=b;

delay_ms(500);

}

P1=0xf0;

delay_ms(500);

P1=0xfe;

delay_ms(500);

b=P1;



}

}

如果你想學習更多單片機和程序的知識,可以看看我整理好的「17個實驗學會單片機」,網路一下「17個實驗學會單片機」就可以看到在首頁了。

㈥ 怎樣調整單片機流水燈的快慢,請舉個例子

就下面的程序
;----- 延時子程序 -----
DELAY: MOV R0,#255 ;延時一段時間
D1: MOV R1,#20
DJNZ R1,$
DJNZ R0,D1
RET ;子程序返回

END ;程序結束
來說,想要讓流水燈變慢點的話,就增加延時。這里將第二行指令D1: MOV R1,#20中的20改大,但是要小於256.比如D1: MOV R1,#200
如果想要流水燈快點的話,就是要減少延時時間。這里將第二行指令D1: MOV R1,#20中的20改小,但是一定要大於等於零。比如D1: MOV R1,#2

㈦ 單片機流水燈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++);

}

(7)單片機流水燈延時時間可調程序擴展閱讀

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);

}

}

}

㈧ 流水燈c語言延時程序

#include <REG52.H> // AT89S52標准頭文件
#include<intrins.h> // 包含_nop_(); // 大約1us

sbit P20=P2^0;

void Delayus(unsigned int time)//延時時間為 1us * x 晶振是11.0592M
{
unsigned int _y;
for(_y = 0; _y < time; _y++)
_nop_();
}

void main(void)
{
while(1)
{
P20=0; //點亮LED燈
Delayus(50000);
P20=1; //點滅LED燈
Delayus(50000);
}
}
給你個頭,按照你給的延時改下就行了

閱讀全文

與單片機流水燈延時時間可調程序相關的資料

熱點內容
如何設置異地伺服器 瀏覽:882
為什麼安卓手機藍牙耳機不會彈窗 瀏覽:546
linuxf77編譯器安裝教程 瀏覽:949
android本地錄音許可權 瀏覽:446
加密u盤內容怎麼拷貝 瀏覽:283
安卓手機為什麼看不到iso文件 瀏覽:582
用圖片做文件夾圖標 瀏覽:693
java正則表達式語法 瀏覽:865
美圖秀在線壓縮圖片 瀏覽:184
蘋果自帶控制app是什麼 瀏覽:907
孩子學編程怎麼樣 瀏覽:589
網路編程經典書籍 瀏覽:612
曲靖創建網站java程序員 瀏覽:690
256位加密中是什麼意思 瀏覽:97
php多維數組去重 瀏覽:308
做程序員這一行儲備人才怎麼看 瀏覽:461
參加密逃文 瀏覽:327
蘋果編程語言ios 瀏覽:763
求解病態系統常用的演算法 瀏覽:994
駕校用的app叫什麼 瀏覽:219