close

尼亞姆韋齊文翻譯

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

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

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

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

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

    SystemInit();
//-程式由這邊開始------------------------

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

      在做完 LED 根蒂根基節制實行後,當然不會只寫一個單純又沒意思的程式就竣事了,一定要加點 C 語言程式節制技巧來做點變化.這邊就來一個最常見的賽馬燈節制,這應當是學生練習課做單晶片節制時最喜好玩的一種實驗翻譯一般進修這類 LED 節制歷程或許都是像以下這樣的步驟︰第一步先學會點亮,第二步控制每顆的亮跟滅狀況,第三步就是讓一整排動起來,第四步當然就是矩陣掃描節制,不外這邊所利用的實驗平台只有一排,所以就玩不到矩陣節制這一步。以下會做出幾種分歧的效果來顯現各類單排的 LED 節制方式翻譯

       接著設計一個紛歧樣的霹靂燈節制體例,將本來的 8 個 LED 分成左右各 4 個兩組霹靂燈節制,而燈的移動標的目的恰好相反,以下將使用上面的範例簡單的利用邏輯運算來到達如許的效果。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

點竄好的完全程式以下︰



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

    anthonpt20g3@outlook.com

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