導航:首頁 > 操作系統 > 基於c51單片機流水燈設計

基於c51單片機流水燈設計

發布時間:2024-11-02 03:01:39

1. 用C51單片機控制12個LED流水燈的C語言程序怎麼寫

#include "REG52.H"

//控制引腳定義
sbit LED1 = PX.X; //P0.0-P3.7任意引腳
.... .... .......
sbit LED12 = PX.X;
//宏定義燈亮燈滅
#define LED1_ON( ) LED1 =0 //陽極接電源
#define LED1_OFF( ) LED1 =1 //陽極接電源
....... ............. .............
#define LED12_ON( ) LED12 =0 //陽極接電源
#define LED12_OFF( ) LED12 =1 //陽極接電源

void Init_GPIO( )//埠引腳初始化,關閉所有指示燈
{
LED1_OFF( ) ;
..............
LED12_OFF( ) ;
}
void Delay_ms( u16 dat ) //延時函數
{
u16 i, j;
for(i = dat; i>0; i--)
{
for (j=300; j>0; j--);
}
}
int main( ) //主函數
{
Init_GPIO( );//引腳初始化
while(1) //大循環
{
LED1_ON( );//點亮第一個LED
LED2_OFF( );
.............
LED12_OFF( );
Delay_ms(1000);//延時 參數自己可以根據晶振頻率自己調節

LED1_OFF( ); //點亮第二個LED
LED2_ON( );
LED3_OFF( );
.............
LED12_OFF( );
Delay_ms(1000);
............. //按照上面修改;

LED1_OFF( );//點亮第十二個LED
LED2_OFF );
LED3_OFF( );
.............
LED12_ON( );
Delay_ms(1000);
}
}

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

}

(2)基於c51單片機流水燈設計擴展閱讀:

流水燈幾點說明:

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

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

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

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

3. C51單片機編程,按鍵控制流水燈

#include "reg51.h"
unsigned char led[]={0xfe,0xfd,0xfb,0xf7}; //LED燈的花樣數據
void delay(unsigned char time){ //延時函數
unsigned int j=15000;
for(;time>0;time--)
for(;j>0;j--);
}
void main(){
bit dir=0,run=0; //標志位定義及初始化
char i;
while(1){
switch (P0 & 0x0f){ //讀取鍵值
case 0x0e:run=1;break; //K1動作,設run=1
case 0x0d:run=0,dir=0;break; // K2動作,設run=dir=0
case 0x0b:dir=1;break; //K3動作,設dir=1
case 0x07:dir=0;break; //K4動作,設dir=0
}
if (run) //若run=dir=1,自上而下流動
if(dir)
for(i=0;i<=3;i++){
P2=led[i];
delay(200);
}
else
for(i=3;i>=0;i--){ //run=1,dir=0,自下而上流動
P2=led[i];
delay(200);
}
else P2=0xff; //若run=0,全部燈滅
}
}

4. 51單片機LED流水燈怎麼實現從兩邊同時逐個點亮到中間,又從中間逐個熄燈到兩邊

簡單點的,用表格,事先計算好,放到ROM中,用的時候逐行編譯輸出就可以。
復雜點的,開一個緩沖區,用循環程序,根據花樣的不同,每次填充一行,並輸出,然後再計算一下行。除非表格太大,不建議這樣用。
#define len 8
char tablelist[][len] =
{
"00000000",
"10000001",
"01000010",
"00100100",
"00011000",
}
outline( char * s )
{
int i;
for(i=0; i<len; ++i )
{
if ( s[i] == '0' )
{
// 對應的燈亮
}
else
{
// 對應的燈滅
}
}
}
main()
{
for(;;)
{
outline( &tablelist[i]);
delay(..);
}
}

5. 51單片機中如何用匯編語言編寫流水燈

流水燈就是51單片機控制led燈依次點亮的控制方式。具體程序如下:

ORG 0000H;復位啟動
AJMP START;
ORG 001BH;T1中斷
AJMP T1INT;

;定義變數========================
YSJSEQU 30H;延時計數器
LEDEQU 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;匯編程序結束

(5)基於c51單片機流水燈設計擴展閱讀:

實現流水燈的三個方法:

第一種,匯流排方法實現流水燈。這是一種比較笨但又最易理解的方法,採用順序程序結構,用位指令控制P1口的每一個位輸出高低電平,加上延時函數,即可控制每個LED燈的亮滅。

第二種,移位方法實現流水燈採用循環程序結構編程。首先在程序開始給P1.0口送一個低電平,其它位為高。然後延時一段時間再讓低電平往高位移動,這樣就實現「流水」的效果了。

第三種,庫函數實現流水燈。利用左移函數進行。

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

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

閱讀全文

與基於c51單片機流水燈設計相關的資料

熱點內容
python求1到100之間的奇數 瀏覽:92
加密文件設置成隱藏屬性 瀏覽:675
有伺服器怎麼搭建雲手機 瀏覽:236
怎麼換伺服器絕地求生國際服 瀏覽:396
gal器件編程 瀏覽:257
pdf列印機程序 瀏覽:383
3d庫打開了之後需要解壓嗎 瀏覽:347
迷你號加密華為 瀏覽:620
手機怎麼設置螢石雲視頻不要加密 瀏覽:330
平安信息卡app怎麼還款 瀏覽:510
php常用編輯器 瀏覽:159
伺服器加了光影後登不上了怎麼辦 瀏覽:468
iosandroid視頻格式 瀏覽:964
求解壓的圖片說說 瀏覽:562
程序員那麼可愛懷孕是哪集 瀏覽:393
linux查看targz 瀏覽:953
拍攝視頻加密 瀏覽:945
c盤空間無法壓縮 瀏覽:702
javaldap連接 瀏覽:792
美女正骨按摩洗頭發解壓店 瀏覽:346