設置 | 登錄 | 註冊

目前共有4篇帖子。

【程序】TinyOS節點通過74HC595晶片驅動8x8點陣循環顯示0~9數字

1樓 巨大八爪鱼 2016-8-4 11:53
【運行效果】
2樓 巨大八爪鱼 2016-8-4 11:54
代碼:
【MyAppC.nc】
configuration MyAppC
{
}
implementation
{
    components MyC, MainC;
    MyC.Boot -> MainC.Boot;
}

【MyC.nc】
module MyC
{
    uses interface Boot;
}
implementation
{
    #define _BV(n) (1 << (n))
    #define SDAT_0 P2OUT &= ~_BV(0)
    #define SDAT_1 P2OUT |= _BV(0)
    #define STCLK_0 P2OUT &= ~_BV(1)
    #define STCLK_1 P2OUT |= _BV(1)
    #define SHCLK_0 P2OUT &= ~_BV(3)
    #define SHCLK_1 P2OUT |= _BV(3)
   
    // 數字0~9
    const unsigned char table[][8] = {
        {0x00, 0x00, 0x3E, 0x41, 0x41, 0x3E, 0x00, 0x00},
        {0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, 0x00},
        {0x00, 0x00, 0x62, 0x51, 0x49, 0x46, 0x00, 0x00},
        {0x00, 0x00, 0x22, 0x49, 0x49, 0x36, 0x00, 0x00},
        {0x00, 0x00, 0x38, 0x26, 0x7F, 0x20, 0x00, 0x00},
        {0x00, 0x00, 0x4F, 0x49, 0x49, 0x31, 0x00, 0x00},
        {0x00, 0x00, 0x3E, 0x49, 0x49, 0x32, 0x00, 0x00},
        {0x00, 0x00, 0x03, 0x71, 0x09, 0x07, 0x00, 0x00},
        {0x00, 0x00, 0x36, 0x49, 0x49, 0x36, 0x00, 0x00},
        {0x00, 0x00, 0x26, 0x49, 0x49, 0x3E, 0x00, 0x00}
    };
   
    void SerIn(unsigned char dat)
    {
        unsigned char i;
        for (i = 0; i < 8; i++)
        {
            SHCLK_0;
            if (dat & 0x80)
                SDAT_1;
            else
                SDAT_0;
            dat <<= 1;
            SHCLK_1;
        }
    }
   
    void ParOut(void)
    {
        STCLK_0;
        STCLK_1;
    }
   
    void delay(void)
    {
        unsigned int i;
        for (i = 0; i < 600; i++);
    }
   
    // 顯示數字
    void ShowNumber(unsigned char n)
    {
        unsigned char i;
        for (i = 0; i < 8; i++)
        {
            SerIn(~_BV(i));
            SerIn(table[n][i]);
            ParOut();
            delay();
        }
    }
   
    event void Boot.booted(void)
    {
        unsigned char i = 0;
        unsigned char cnt = 0;
       
        P2DIR = 0xff;
        P2OUT = 0x00;
       
        while (1)
        {
            ShowNumber(i);

            cnt++;
            if (cnt > 100)
            {
                cnt = 0;
                i++;
                if (i > 9)
                    i = 0;
            }
        }
    }
}
【Makefile】
COMPONENT = MyAppC
include $(MAKERULES)
【run.sh】
make telosb install bsl,/dev/ttyUSB0

運行./run.sh就可以編譯和燒寫程序了
3樓 巨大八爪鱼 2016-8-4 11:59
執行一次ShowNumber需要延時8x600=480個單位時間,cnt計數達到100時,數字加1。也就是每48000單位時間就加1一次。
4樓 巨大八爪鱼 2016-8-4 12:02
本實驗使用的8x8點陣板是淘寶網上的銳志-51 3合一擴展板,接線時注意左邊是正極右邊是負極,不要接反了。右上角的LED燈亮表明電源接線正確。
TinyOS節點使用的電壓是3.3V,本實驗的成功運行說明了8x8點陣和74HC595晶片都能在3.3V電壓下正常工作。

內容轉換:

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
©2010-2025 Purasbar Ver3.0 [手機版] [桌面版]
除非另有聲明,本站採用知識共享署名-相同方式共享 3.0 Unported許可協議進行許可。