作者共发了4篇帖子。 内容转换:不转换▼
 
点击 回复
329 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)
 

本帖信息

点击数:329 回复数:3
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2016-8-4 12:02
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。