close

撣語翻譯

      注重以上兩行紫色的程式,特別在輸出那一行,使用了一個簡單的邏輯運算 OR 就能夠到達將原來一個由右至左的資料 Bit 1 同時複製出一個由左至右的資料 Bit 1 ,將兩各運算哄騙 OR 運算就能夠組合而成。當然還得做個小潤色,就是當 bit 為 4 期間輸出成績跟 3 是相同的,為了掩飾這個狀況讓輸出看起來更流通一點,因此就在延遲上做了一點潤飾。而如許的設計是有點小技能,但是筆者要在這邊表達的是,邏輯運算對程式設計是很有效的,特別是初學者一定要領會各類邏輯運算的原理,良多程式設計的時刻,利用簡單的邏輯運算可以大量減少程式碼。當然也要避免利用過於複雜的邏輯運算,恰當的利用可以使程式輕易被維護,因為一支寫得好的程式,可以很容易的再被哄騙,是以,套一句筆者的師父所說過的話︰程式只要寫一次就夠了翻譯

       以上是一個使用 C 說話做霹靂燈節制最簡單的控制程式,一個無限迴圈結合判定式即可完成。以初學者而言,如許的程式僅斟酌到完美的公道狀況,就是 bit 這個變數的運算沒有失足的可能性,因此假如 bit 變數內的資料若是被其他程式影響到而遺失的話,那可能就沒有一顆 LED 會亮了翻譯固然這不只是可能被其他程式所影響,也有多是電路遭到雜訊干擾而造成其他狀態,都有可能使 bit 變數內資料被改變,所以一支具有避免毛病的程式需要考慮的問題是許多的,以下將上面程式改用一種比較靠得住的體例來改寫。

首先寫一個霹靂燈的節制方式翻譯社先以一個 LED 往返移動,以下是整個程式碼︰

    SystemInit();
//-程式由這邊最先------------------------

        Delay(1000); // 這邊能用的延遲函式呼喚翻譯社
                     // 單元是 萬分之1秒
        if(d==0) // 向左移動處置
        {
            bit++;
            if(bit >= 7) { bit = 7; d = 1; }

        }
        else     // 向右移動處置懲罰
        {
            bit--;
            if(bit <= 1) { bit = 0; d = 0; }

#define Led   (*(volatile U16 *)0xA000000)

#define Led   (*(volatile U16 *)0xA000000)

       以上兩支程式的執行了局是一樣的,可是第二支程式已經具有防錯概念,因為這支程式在執行時不會因為變數資料遺失而造成程式毛病,比第一支程式更可靠。不外這只是初步階段的設計考量,對於初學者來講,應當要去漸漸理解其為何如斯設計的根本緣由,程式設計者不該該只是會寫程式,而是要真的去理解程式的運行道理跟基礎,熟悉現實在硬體上程式該使怎麼樣被執行。如許一個程式設計師可以理解系統的運作概念,因此能夠設計出更切近系統運作架構的程式,對於產品設計也就能解少其問題的產生。

#include "..INCstdafx.h"
extern void SystemInit(void);

#define Led   (*(volatile U16 *)0xA000000)

    SystemInit();
//-程式由這邊入手下手------------------------

        if(bit!=4) Delay(1000);

    while(1) 
    {
        Led = ~( (0x01 << bit) | (0x80 >> bit) ); // 輸出LED狀態

    SystemInit();
//-程式由這邊開始------------------------
    while(1) // 無限迴圈
    {
        Led = ~bit; // 輸出LED狀態,別忘了LED是0為亮
                    // 所以記得做反相後才能輸出

        }
        else     // 向右移動處置懲罰
        {
            bit--;
            if(bit <= 1) { bit = 0; d = 0; }

void Main()
{      
//-變數宣佈區----------------------------   
    int d = 0; // 宣告一個控制標的目的的變數
               // 0:向左  1:向右
    int bit = 0; // 宣佈一個貯存LED狀況變數
                 // 改成記載的幾個 bit

void Main()
{      
//-變數宣佈區----------------------------   
    int d = 0; // 宣佈一個節制標的目的的變數
               // 0:向左  1:向右
    U8 bit = 0x01; // 宣佈一個貯存LED狀況變數
                   // 0x01最右側的LED是亮的狀況

點竄好的完整程式以下︰

#include "..INCstdafx.h"
extern void SystemInit(void);

void Main()
{      
//-變數宣告區----------------------------   
    int d = 0; // 宣佈一個控制偏向的變數
               // 0:向左  1:向右
    int bit = 0; // 宣告一個貯存LED狀態變數
                 // 改成記載的幾個 bit

        }
    }
//---------------------------------------
    while(1);//嵌入式系統不能竣事主程式
}

        if(d==0) // 向左移動處置
        {
            bit++;
            if(bit >= 7) { bit = 7; d = 1; }

    while(1) 
    {
        Led = ~(0x01 << bit); // 輸出LED狀況

        Delay(1000); // 這邊能用的延遲函式呼喚翻譯社
                     // 單元是 萬分之1秒
        if(d == 0) // 向左移動處理
        {
            bit <<= 1;
            if(bit == 0x80) d = 1; // 若是已經移到最左
                                 // 則切換偏向
        }
        else     // 向右移動處理
        {
            bit >>= 1;
            if(bit == 0x01) d = 0; // 假如已移到最右
                                 // 則切換標的目的
        }
    }
//---------------------------------------
    while(1); //嵌入式系統不克不及竣事主程式
}

      在做完 LED 根蒂根基節制實驗後,固然不會只寫一個單純又沒意思的程式就竣事了,必然要加點 C 說話程式節制技能來做點變化.這邊就來一個最多見的賽馬燈節制,這應該是學生實習課做單晶片節制時最喜歡玩的一種實行翻譯一般進修這類 LED 控制歷程大要都是像以下這樣的步調︰第一步先學會點亮,第二步控制每顆的亮跟滅狀況,第三步就是讓一整排動起來,第四步固然就是矩陣掃描節制,不外這邊所利用的嘗試平台只有一排,所以就玩不到矩陣節制這一步。以下會做出幾種不同的結果來展現各種單排的 LED 節制體例。

       接著設計一個紛歧樣的霹靂燈控制體式格局,將本來的 8 個 LED 分成擺佈各 4 個兩組霹靂燈節制,而燈的移動標的目的恰好相反,以下將利用上面的類型簡單的哄騙邏輯運算來達到這樣的結果翻譯

        }
    }
//---------------------------------------
    while(1);//嵌入式系統不克不及竣事主程式
}

#include "..INCstdafx.h"
extern void SystemInit(void);



引用自: http://blog.xuite.net/kyanite0909/Blog/61011016-Wiggler+JTAG+%E6%87%89%E7%94%A8%E7%B3%BB%E5%88%97%EF有關各國語文翻譯公證的問題歡迎諮詢鉦昱翻譯公司02-23690937
arrow
arrow
    文章標籤
    翻譯社
    全站熱搜
    創作者介紹
    創作者 lewisjs78pj 的頭像
    lewisjs78pj

    lewisjs78pj@outlook.com

    lewisjs78pj 發表在 痞客邦 留言(0) 人氣()