導航:首頁 > 操作系統 > 51單片機八個燈依次亮的編程

51單片機八個燈依次亮的編程

發布時間:2022-05-07 19:55:01

1. 用匯編語言讓51單片機八個燈從左到右依次點亮且都不滅,每個燈亮的時

用匯編語言讓51單片機八個燈從左到右依次點亮且都不滅,每個燈亮的時間間隔0.5秒,然後全滅,再循環之前的步驟。
參考如下:

  1. 電路

    LED_COUNT DATA 30H
    T0_COUNT DATA 31H

    ORG 0000H
    LJMP MAIN
    ORG 000BH
    LJMP T0_INT

    ORG 0030H
    MAIN:
    ANL TMOD,#0F0H
    ORL TMOD,#01H
    MOV TH0,#3CH
    MOV TL0,#0B0H
    ORL IE,#82H
    SETB TR0
    CLR F0
    MOV LED_COUNT,#00H
    MOV T0_COUNT,#00H
    MOV DPTR,#TAB

    M1:
    JNB F0,M2
    CLR F0
    MOV A,LED_COUNT
    MOVC A,@A+DPTR
    MOV P2,A
    INC LED_COUNT
    MOV A,#9
    CJNE A,LED_COUNT,M2
    MOV LED_COUNT,#00H
    M2:
    SJMP M1

    T0_INT:
    MOV TH0,#3CH
    MOV TL0,#0B0H
    INC T0_COUNT
    MOV A,#10
    CJNE A,T0_COUNT,T
    MOV T0_COUNT,#00H
    SETB F0
    T:
    RETI

    TAB:
    DB0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,00H,0FFH
    END

    希望能達到你的要求!!!!!

    2. 如何用單片機實現流水燈,從一依次亮到八,再從八依次亮

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

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

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

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

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


    硬體特徵

    1、單片機的體積比較小, 內部晶元作為計算機系統,其結構簡單,但是功能完善,使用起來十分方便,可以模塊化應用。

    2、單片機有著較高的集成度,可靠性比較強,即使單片機處於長時間的工作也不會存在故障問題。

    3、單片機在應用時低電壓、低能耗,是人們在日常生活中的首要選擇, 為生產與研發提供便利。

    3. 求大神編程一個51單片機的8燈點亮程序。

    點燈的方法是由硬體連接方式決定的,以P1囗的8條引腳連接8隻LED為例,8隻LED共陽極連至電源,則P1口某位為0時,對應LED點亮,為1時LED熄滅。例如熄滅全部LED操作為
    P1=0xFF,
    點亮第一隻LED操作為
    P1=0xFE,
    同時點亮第一,二隻LED操作為
    P1=0xFC,
    其它可類推。

    4. 單片機C語言,將8個燈依次點亮(被點亮的繼續亮),然後再依次熄滅,(在沒有熄滅完時熄滅的保持滅)

    其次,我建議還是自己嘗試寫一寫,這個不難,我給你個思路
    首先定義變數類似於P1_2 = P1^2這種,先把這八個管腳全部定義好,之後給個for循環,讓P1(假設的你LED燈連接的是P1口)口的P1^0~P1^7相關標志位依次等於0或者1(0還是1需要看你在LED等上給的是高電位亮還是低電位亮),之後再給個for循環,五次的循環,全部P1口置為1(假設高電平LED亮),之後設置P1口全為1,再讓P1口的相關標志位置為0,再置為0的時候可以加個延時

    5. c51單片機匯編語言,八個小燈,依次亮燈,間隔0.5s,最後一個點亮後,全部滅掉,請教大神怎麼編程

    ORG0000H
    LJMPMAIN
    ORG0030H
    MAIN:
    MOVA,#0FEH
    MOVR2,#8
    LOOP:
    MOVP0,A
    LCALLDELAY
    CLRC
    RLCA
    DJNZR2,LOOP
    MOVP0,#0FFH
    SJMP$
    DELAY:
    MOVR3,#10
    DLY1:
    MOVR4,#100
    DLY2:
    MOVR5,#250
    DJNZR5,$
    DJNZR4,DLY2
    DJNZR3,DLY1
    RET
    END

    6. 51單片機8個led向左循環依次點亮,按一下開關後往右循環一次後繼續向左循環

    #include<reg51.h>
    #include<intrins.h>
    #defineucharunsignedchar
    uchartime=0,num,led=0xfe;
    bitflag=0;
    sbitkey=P2^0;
    voidt0isr()interrupt1
    {
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    time++;
    if(time>=10)
    {
    time=0;
    if(flag==0)
    {
    P0=led;
    led=_crol_(led,1);
    }
    else
    {
    P0=led;
    led=_cror_(led,1);
    num++;
    if(num>8)flag=0;
    }
    }
    }
    main()
    {
    TMOD=0x01;
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    TR0=1;
    ET0=1;
    EA=1;
    while(1)
    {
    if(key==0)
    {
    while(key==0);
    flag=1;
    num=0;
    }
    }
    }

    7. 單片機流水燈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單片機八個燈依次亮的編程擴展閱讀

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

    }

    }

    }

    8. 要求用51單片機控制8個LED亮滅的原理圖+程序+解說

    本來以為這個程序很簡單的,沒想到寫了快三個小時。哎學藝不精啊。貼出來給你研究吧。我不想做過多的解釋了,我是按我理解的你出的題目做的,可能和你的本意不是很一樣,
    1、依次亮,依次滅:從一個燈亮到全亮,再到全滅,每次改變一個燈亮滅
    2、奇偶號燈間隔亮滅:隔一個燈亮一個燈亮燈時間為1s,沒有燈全滅的時候
    3、依次閃爍、切換時間為3秒,閃爍時間為2秒,我理解的是,沒三秒鍾有一個燈在閃爍,其中有一秒鍾是滅燈狀態
    程序中使用了P1口與8個發光二極體相連,具體電路圖你網路一下吧,還有使用了一個按鍵,該按鍵與P3.7相連,低電平為按下狀態。
    程序如下:
    #include <reg52.h>
    #include <intrins.h>

    /*變數聲明:
    i、j、k都是記錄計時器溢出次數的變數,
    stat是記錄當前顯示狀態的變數,由按鍵key控制
    temp是狀態2中保護P1口狀態的變數*/

    unsigned char i=0,j=0,k=0,stat=0,temp;
    bit flag=1; //狀態1處於滅燈還是亮燈狀態的變數,1為依次亮燈,0為依次亮燈
    sbit key=P3^7; //按鍵控制
    void init(); //初始化函數
    void delay(unsigned int N); //延時函數
    void keyscan(); //鍵盤掃描函數

    void main()
    {
    init();

    while (1)
    {
    switch (stat)
    {
    case 0: //0方案
    if(i==20&&flag)
    {
    i=0;
    P1=P1<<1; //依次亮燈
    temp=P1;
    if(temp==0)
    {
    flag=0;
    }
    }
    if(i==20&&!flag)
    {
    i=0;
    if(P1==0xff)
    {
    flag=1;
    P1=0xfe;
    }
    if(!flag)
    {
    P1=P1<<1; //依次滅燈
    temp=P1;

    P1=temp+1;
    }

    }
    break;
    case 1: //2方案
    if(i==20)
    {
    i=0;
    P1=~P1; //去反後亮燈狀態為滅燈,P1初值取0x55或0xaa,奇偶交替亮燈
    }
    break;
    case 2: //3方案
    if(j==60)
    {
    P1=temp;
    P1=_crol_(P1,1);
    temp=P1; //保護P1口亮燈狀態
    k=0;
    j=0;
    }

    //閃爍部分,應該可以優化
    if(k<5)
    {
    P1=0xff;
    }
    else if(k>=5&&k<10)
    {
    P1=temp;
    }
    else if(k>=10&&k<15)
    {
    P1=0xff;
    }
    else if(k>=15&&k<20)
    {
    P1=temp;
    }
    else if(k>=20&&k<25)
    {
    P1=0xff;
    }
    else if(k>=30&&k<35)
    {
    P1=temp;
    }
    else if(k>=35&&k<40)
    {
    P1=0xff;
    }
    //-----------------------------------
    break;
    }
    keyscan();
    }
    }

    void init()
    {
    TH0=0x3c; //定時器賦初值定時時間50ms
    TL0=0xB0;
    TMOD=0x01; //設置定時器工作方式為方式1
    EA=1; //開總中斷
    ET0=1; //開中斷允許位
    TR0=1; //定時器計數

    P1=0xfe; //這里假設led燈與P1口相連並且
    //低電平有效

    }
    void delay(unsigned int N)
    {
    int i,j;
    for (i=0;i<N;i++);
    for (j=0;j<110;j++);
    }
    void keyscan()
    {
    if(!key)
    {
    delay(10); //消抖
    if(!key); //確認有鍵按下
    stat++;
    if(stat==3)
    {
    stat=0;
    }

    //右鍵按下復位
    i=0;
    j=0;
    k=0;
    TH0=0x3c;
    TL0=0xB0;
    switch (stat)
    {
    case 0:
    P1=0xfe;
    flag=1;
    stat=0;
    break;
    case 1:
    P1=0x55;
    break;
    case 2:
    P1=0xfe;
    temp=P1;
    break;
    }
    //-----------------------------------
    while(!key) //此循環中的函數和主函數中的顯示函數是同一個
    //用於長按鍵的顯示,可以去掉,去掉長按鍵不會正常顯示,松開按鍵後正常
    {
    switch (stat)
    {
    case 0:
    if(i==20&&flag)
    {
    i=0;
    P1=P1<<1;
    temp=P1;
    if(temp==0)
    {
    flag=0;
    }
    }
    if(i==20&&!flag)
    {
    i=0;
    if(P1==0xff)
    {
    flag=1;
    P1=0xfe;
    }
    if(!flag)
    {
    P1=P1<<1;
    temp=P1;

    P1=temp+1;
    }

    }
    break;
    case 1:
    if(i==20)
    {
    i=0;
    P1=~P1;
    }
    break;
    case 2:
    if(j==60)
    {
    P1=temp;
    P1=_crol_(P1,1);
    temp=P1;
    k=0;
    j=0;
    }

    if(k<5)
    {
    P1=0xff;
    }
    else if(k>=5&&k<10)
    {
    P1=temp;
    }
    else if(k>=10&&k<15)
    {
    P1=0xff;
    }
    else if(k>=15&&k<20)
    {
    P1=temp;
    }
    else if(k>=20&&k<25)
    {
    P1=0xff;
    }
    else if(k>=30&&k<35)
    {
    P1=temp;
    }
    else if(k>=35&&k<40)
    {
    P1=0xff;
    }
    break;
    }
    }
    }
    }

    void timer0() interrupt 1
    {
    TH0=0x3c;
    TL0=0xB0; //溢出後重新賦初值
    //定時器中斷時間為50ms
    i++; //20次中斷時間為1s
    j++; //40次中斷時間為2s
    k++; //60次中斷時間為3s
    }

    有什麼不懂的可以網路Hi我

    9. 單片機控制8個燈依次亮,全亮了,再依次滅的c語言流程圖,順便加上解釋,不然看不懂

    1、創建項目,如圖所示。

閱讀全文

與51單片機八個燈依次亮的編程相關的資料

熱點內容
上層怎麼看程序員 瀏覽:25
程序員便當排骨 瀏覽:852
如何禁用安卓全家桶 瀏覽:259
oa伺服器異常怎麼辦 瀏覽:71
cmd編譯utf8 瀏覽:278
怎麼截取app接受的數據 瀏覽:277
nrf24l01pdf 瀏覽:299
php字元串轉array 瀏覽:435
U盤分了文件夾後 瀏覽:941
javasetstring 瀏覽:838
壓縮包里文件夾是白色的 瀏覽:474
編譯鏈接知乎 瀏覽:592
php查詢按鈕 瀏覽:717
有音響游戲解壓神器 瀏覽:254
怎麼壓縮圖片jpeg 瀏覽:714
澳大利亞net程序員 瀏覽:580
程序員加班難受 瀏覽:991
如何看伺服器品牌 瀏覽:257
ecy50clp壓縮機多少W 瀏覽:756
mac終端命令怎麼保存 瀏覽:851