目前共有4篇帖子。 內容轉換:不轉換▼
 
點擊 回復
291 3
【程序】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电压下正常工作。

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:291 回複數:3
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2016-8-4 12:02
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。