電子ペーパーで所在を表示しておくプレートのプログラムです

Dependencies:   SDFileSystem mbed

extdio.cpp

Committer:
kohacraft
Date:
2017-05-23
Revision:
2:3ca92c70070c
Parent:
1:bd1c3875fb64

File content as of revision 2:3ca92c70070c:

/* 電子ペーパーインタフェース回路(シリアルパラレル変換)の制御用です */

#include "mbed.h"
#include "extdio.h"


DigitalOut CL(dp9);
DigitalOut sdata(dp10);
DigitalOut sclock(dp11);
DigitalOut sdlatch(dp14);
DigitalOut sclatch(dp13);

char    _contBusState = 0; //制御バスの状態保存
char    _olddata;   //データバスの過去データ保存

void setCL( bool state )
{
    CL = state;
    return;
}

//制御バスピン変更
void setContBus( char mask , bool state )
{
    sclock = 0;
    sclatch = 0;
    if( state == true)
    {
        _contBusState = _contBusState | mask;
    }
    else
    {
        _contBusState = _contBusState & (~mask);
    }
    char sendData;
    sendData = _contBusState;
    char bitMask = 0x80;

    //MSBから1bitずつ転送    
    sdata = sendData & bitMask;
    sclock = 1;
    bitMask = bitMask >> 1;
    sclock = 0;
    
    sdata = sendData & bitMask;
    sclock = 1;
    bitMask = bitMask >> 1;
    sclock = 0;

    sdata = sendData & bitMask;
    sclock = 1;
    bitMask = bitMask >> 1;
    sclock = 0;

    sdata = sendData & bitMask;
    sclock = 1;
    bitMask = bitMask >> 1;
    sclock = 0;

    sdata = sendData & bitMask;
    sclock = 1;
    bitMask = bitMask >> 1;
    sclock = 0;

    sdata = sendData & bitMask;
    sclock = 1;
    bitMask = bitMask >> 1;
    sclock = 0;

    sdata = sendData & bitMask;
    sclock = 1;
    bitMask = bitMask >> 1;
    sclock = 0;

    sdata = sendData & bitMask;
    sclock = 1;
    bitMask = bitMask >> 1;
    sclock = 0;
    
    //ラッチ
    sclatch = 1;
    sclatch = 0;
    
    return;
}

//データバスピン変更
void setDataBus( char data )
{
    sclock = 0;
    sdlatch = 0;
    
    //過去と同じ値だったら上書きしない
    if( _olddata == data )
    {
        return;
    } 
    _olddata = data;
    
    sdata = data&0x01;
    sclock = 1;
    sclock = 0;

    sdata = data&0x02;
    sclock = 1;
    sclock = 0;

    sdata = data&0x04;
    sclock = 1;
    sclock = 0;

    sdata = data&0x08;
    sclock = 1;
    sclock = 0;

    sdata = data&0x10;
    sclock = 1;
    sclock = 0;

    sdata = data&0x20;
    sclock = 1;
    sclock = 0;

    sdata = data&0x40;
    sclock = 1;
    sclock = 0;

    sdata = data&0x80;
    sclock = 1;
    sclock = 0;

    //ラッチ
    sdlatch = 1;
    sdlatch = 0;
    
    return;
}