2019-09-25流水燈效果實(shí)現(xiàn)

1.流水燈的本質(zhì)分析

(1)流水燈的本質(zhì)其實(shí)就是不同的亮的狀態(tài)相應(yīng)間隔一定的時(shí)間。
(2)流水燈
第一個(gè)狀態(tài)等于0x80(10000000)
第一個(gè)狀態(tài)等于0x40(01000000)
第一個(gè)狀態(tài)等于0x20(00100000)
第一個(gè)狀態(tài)等于0x10(00010000)
第一個(gè)狀態(tài)等于0x08(00001000)
第一個(gè)狀態(tài)等于0x04(00000100)
第一個(gè)狀態(tài)等于0x02(00000010)
第一個(gè)狀態(tài)等于0x01(00000001)
(3)延長(zhǎng)時(shí)間越長(zhǎng),流水燈就流的越慢,越短就流水越快
(4)8個(gè)狀態(tài)一次執(zhí)行,完成后從頭開(kāi)始,其實(shí)就是一個(gè)循環(huán)

#include <reg51.h>

void delay(void)
{
    unsigned char i = 100;
    unsigned char i = 100;
    while (i--)
    {
        while (j--);
    }
}

void main(void)
{
    while (1)
    {
        p0 = 0x80;
        delay();
        p0 = 0x40;
        delay();
        p0 = 0x20;
        delay();
        p0 = 0x10;
        delay();
        p0 = 0x08;
        delay();
        p0 = 0x04;
        delay();
        p0 = 0x02;
        delay();
        p0 = 0x01;
        delay();
    }   
}

2.上一節(jié)程序的缺陷分析

(1)功能實(shí)現(xiàn)了,但是寫的太笨了,如果狀態(tài)變多程序就更長(zhǎng)。
(2)改進(jìn)思路:通過(guò)變量運(yùn)算來(lái)得到合適的端口輸出值
①首先定義變量unsigned char a;,初值等于0x80(10000000)
②8個(gè)狀態(tài),其實(shí)就是a依次右移0-7位
③我們這樣就相當(dāng)于是用C語(yǔ)言讓單片機(jī)去運(yùn)算得到每個(gè)狀態(tài)的端口值,而不用自己事先去計(jì)算好。這樣程序就簡(jiǎn)化了。
(3)C語(yǔ)言移位運(yùn)算介紹
C語(yǔ)言中有移位運(yùn)算符, >> 可以右移,<< 可以左移。(無(wú)符號(hào)所屬移位:移出去的位丟掉了,空出來(lái)的位用0補(bǔ))。
寫法一:d本身沒(méi)有發(fā)生改變,一直是0x80

#include <reg51.h>

void delay(void)
{
    unsigned char i, j;
    for (i=0; i<200; i--)
    {
        for (j=0; j<200; j--);
    }
}

void main(void)
{
    unsigned char i =0;
    unsigned char d = 0x80;
    while (1)
    {
        for (i=0; i<8; i++)
        {
            p0 = (d >> i);
            delay();
        }
    }
}

寫法二:d本身發(fā)生改變,0x80~0x0變化中

#include <reg51.h>

void delay(void)
{
    unsigned char i, j;
    for (i=0; i<200; i--)
    {
        for (j=0; j<200; j--);
    }
}

void main(void)
{
    unsigned char i =0;
    
    while (1)
    {
        unsigned char d = 0x80;
        for (i=0; i<8; i++)
        {
            d = d >> 1;
            p0 = d;
            delay();
        }
    }
}

3.跑馬燈效果實(shí)現(xiàn)

3.1、什么是跑馬燈

跑馬燈和流水燈很像,不同的是:流水燈是8顆LED其中7滅1亮,亮的在移動(dòng);跑馬燈是8顆LED7亮1滅,滅的在移動(dòng)。

3.2、實(shí)現(xiàn)思路分析:

(1)一個(gè)個(gè)計(jì)算,01111111——0x7f
(2)左移(右移)+ 按位取反,10000000——~——01111111

#include <reg51.h>

void delay(void)
{
    unsigned char i, j;
    for (i=0; i<200; i++)
        for (j=0; j<200; j++);
}

void main(void)
{
    unsigned char i = 0; 
    
    while (1)
    {
        unsigned char d = 0x80;
        for (i=0; i<8; i++)
        {
            p0 = ~d;
            d >>= 1;
            delay();
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容