LEDMatrixDisplay Program 文字ごとに色を変更できるように修正

Dependencies:   mbed

Fork of LEDMatrix_Master by en 129

main.cpp

Committer:
nameless129
Date:
2013-10-07
Revision:
0:64f46cf1b2b4
Child:
1:d4d1951a4202

File content as of revision 0:64f46cf1b2b4:

#pragma import __use_all_ctype

#include "mbed.h"
#include <string.h>
#include "kfont8.h"
#include "process_fonts.h"

SPI spi(p5, p6, p7); // mosi, miso, sclk
BusOut bords(p15,p16,p17,p18,p19,p20);
Serial pc(USBTX, USBRX); // tx, rx

unsigned int ImageBuf[3][16*9];//16*6

void SPILineOut(unsigned char setLine)
{
    unsigned int data[3]={0};
    unsigned int i = 0;
    for(i=0;i<=5;i++)
    {
        data[0] |= ((ImageBuf[2][setLine]>>(15-i))&0x01) << (15-(3*i));
    }
    for(i=0;i<=4;i++)
    {
        data[0] |= ((ImageBuf[1][setLine]>>(15-i))&0x01) << (14-(3*i));
        data[0] |= ((ImageBuf[0][setLine]>>(15-i))&0x01) << (13-(3*i));
    }

    for(i=0;i<=5;i++)
    {
        data[1] |= ((ImageBuf[1][setLine]>>(10-i))&0x01) << (15-(3*i));
    }
    for(i=0;i<=4;i++)
    {
        data[1] |= ((ImageBuf[0][setLine]>>(10-i))&0x01) << (14-(3*i));
        data[1] |= ((ImageBuf[2][setLine]>>(9-i))&0x01) << (13-(3*i));
    }

    for(i=0;i<=5;i++)
    {
        data[2] |= ((ImageBuf[0][setLine]>>(5-i))&0x01) << (15-(3*i));
    }
    for(i=0;i<=4;i++)
    {
        data[2] |= ((ImageBuf[2][setLine]>>(4-i))&0x01) << (14-(3*i));
        data[2] |= ((ImageBuf[1][setLine]>>(4-i))&0x01) << (13-(3*i));
    }
    spi.write(data[0]);
    spi.write(data[1]);
    spi.write(data[2]);
}

void outBordData(unsigned char ch)
{
    unsigned int i = 0;
    wait_us(10);
    bords = 0x01 << ch;
    for(i=(ch*16);i<(ch*16+16);i++)
    {
        SPILineOut(i);
    }
}

void bufLeftShift(void)
{  
    signed int i = 0;

    for(i=95;i>=0;i--)
    {
        ImageBuf[0][i+1] = ImageBuf[0][i];
        ImageBuf[1][i+1] = ImageBuf[1][i];
        ImageBuf[2][i+1] = ImageBuf[2][i];
    }
    ImageBuf[0][0] = ImageBuf[0][96];
    ImageBuf[1][0] = ImageBuf[1][96];
    ImageBuf[2][0] = ImageBuf[2][96];
}

int main()
{
    unsigned char f_mode = 0;
    unsigned int i = 0;
    unsigned char coler = 0;
//    char strs[100]={0x82,0x6d,0x82,0x73,0x8b,0xe0,0x91,0xf2,0x82,0x51,0x82,0x4f,0x82,0x50,0x82,0x52};
    char strs[100]={0x82,0xE6,0x82,0xA4,0x82,0xB1,0x82,0xBB,0x82,0x8D,0x82,0x82,0x82,0x85,0x82,0x84,
                    0x8D,0xD5,0x82,0xE8,0x82,0xD6,0x81,0x49};

    spi.format(16,1);
    spi.frequency(1000000);

    memset(ImageBuf,0,sizeof(ImageBuf));
    f_mode = 1;
    i=0;
    wait(3);

    while(1)
    {
        if(f_mode == 0)
        {
            memset(ImageBuf,0,sizeof(ImageBuf));
            pc.scanf("%s",&strs);
            pc.printf("cmdOK\r\n");
            if(strstr(strs,"barusu") != NULL)
            {
                memset(ImageBuf,0xffff,sizeof(ImageBuf));
                f_mode = 2;
            }
            else
            {
                f_mode = 1;
            }
        }
        if(f_mode == 1)
        {
            drawStr(strs,coler,i,4);
            i++;
            if(i > (16*6 - 8 ))
            {
                f_mode = 2;
                coler = (coler+1)%7;
                i = 0;
            }
        }
        if(f_mode == 2)
        {
            bufLeftShift();
            i++;
            if(i>=((16*6 - 8)*3))
            {
                memset(ImageBuf,0,sizeof(ImageBuf));
                i = 0;
                f_mode = 1;
            }
        }

        if(pc.readable()) {
            f_mode = 0;
        }
        outBordData(0);
        outBordData(1);
        outBordData(2);
        outBordData(3);
        outBordData(4);
        outBordData(5);
        wait(0.1);
    }
    
//////////////////////////////////////////////
//          test mode
//////////////////////////////////////////////
/*
    while(0)//test mode
    {
        for(i=0;i<32;i++)
        {
            ImageBuf[0][i] = 0x0000;
            ImageBuf[1][i] = 0;
            ImageBuf[2][i] = 0;
        }
        cs0 = 1;
        cs1 = 0;
        for(i=0;i<16;i++)
        {
            SPILineOut(i);
        }
        cs0 = 0;
        cs1 = 1;
        for(i=16;i<32;i++)
        {
            SPILineOut(i);
        }

        cs0 = 1;
        cs1 = 0;
        for(i=0;i<16;i++)
        {
            SPILineOut(i);
        }
        cs0 = 0;
        cs1 = 1;
        for(i=16;i<32;i++)
        {
            SPILineOut(i);
        }
    }
*/
}