eink paper ED060SC4(LF) にSD内の01.bmpを表示させます

Dependencies:   SDFileSystem mbed

eink.cpp

Committer:
kohacraft
Date:
2016-02-14
Revision:
1:8c9178c52155
Parent:
0:97881c3945b1

File content as of revision 1:8c9178c52155:

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

//ポートの初期化
void initPort()
{
    setCL( 0 );
    setContBas( LE , 0);
    setContBas( OE , 0);
    setContBas( NC10 , 1);
    setContBas( SPH , 1);

    setContBas( GMODE , 0);
    setContBas( SPV , 1);
    setContBas( CKV , 0);
    setContBas( EN , 0);
    
    setDataBas( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 );
}

//pageStart
void pageStart()
{   

    setContBas( GMODE , 1 );
    setContBas( CKV , 1 );
    wait_us(11);
    setContBas( SPV , 0 ); 
    wait_us(11);
    setContBas( CKV , 0 );
    wait_us(10);
    setContBas( CKV , 1 );
    wait_us(10);
    setContBas( SPV , 1 ); 
    wait_us(12);

    setContBas( CKV , 0 );
    wait_us(10);
    setContBas( CKV , 1 );
    wait_us(22);
    setContBas( CKV , 0 );
    wait_us(10);
    setContBas( CKV , 1 );
    wait_us(22);
    setContBas( CKV , 0 );
    wait_us(10);
    setContBas( CKV , 1 );
    wait_us(1);
}

//lineStart
void lineStart()
{
    
    setCL( 1 );
    setCL( 0 );
    setContBas( LE , 0 );
    wait_us(1);
    
    setCL( 1 );
    setCL( 0 );
    wait_us(1);

    setCL( 1 );
    setCL( 0 );
    wait_us(1);
    
    setCL( 1 );
    setCL( 0 );
    setContBas( OE , 1 );
    wait_us(1);

    setCL( 1 );
    setCL( 0 );
    setContBas( SPH , 0 );
}

//点を描画
void drowPixels( bool d7 ,  bool d6 ,  bool d5 ,  bool d4 ,  bool d3 ,  bool d2 ,  bool d1 ,  bool d0  )
{
    setDataBas( d7 ,  d6 ,  d5 ,  d4 ,  d3 ,  d2 ,  d1 ,  d0  );
    setCL( 1 );
    setCL( 0 );
}

//lineEnd
void lineEnd()
{
    setContBas( NC10 , 1 );
    setContBas( CKV , 0 );
    
    setCL( 1 );
    setCL( 0 );
    wait_us(10);
    
    setContBas( OE , 0 );
    setContBas( LE , 1 );
    setContBas( CKV , 1 );
    wait_us(1);
}

//pageEnd  
void pageEnd()
{
    setCL( 1 );
    setCL( 0 );
    setContBas( LE , 0 );
    
    setCL( 1 );
    setCL( 0 );

    setCL( 1 );
    setCL( 0 );

    setCL( 1 );
    setCL( 0 );
    setContBas( OE , 1 );

    setCL( 1 );
    setCL( 0 );
    
    for( int i=0 ; i<200 ; i++ )
    {
        setCL( 1 );
        setCL( 0 );
    }
    setContBas( CKV , 0 );
    
    setCL( 1 );
    setCL( 0 );
    
    wait_us(10);    
    setContBas( OE , 0 );
    
    wait_us(330);

    setContBas( GMODE , 0 );
    wait_us(130);

}

//SPHを交代する
void changeSPH()
{
    setContBas( SPH , 1 );
    setContBas( NC10 , 0 );
}

//画面をクリアする 0:黒 1:白
void clrdisp( bool color )
{
    pageStart();
    for( int j=0 ; j<600 ; j++)
    {
        lineStart(); 
        for( int i=0 ; i<100 ; i++ )            
        {
            if( color ==  1)
                drowPixels( 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 );    //白でクリアする
            else
                drowPixels( 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 );    //黒でクリアする
        }
        changeSPH();
        for( int i=100 ; i<200 ; i++ )
        {
            if( color ==  1)
                drowPixels( 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 );    //白でクリアする
            else
                drowPixels( 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 );    //黒でクリアする
        }
        lineEnd();
        
    }
    pageEnd();
}

void dispbmp(FILE *fp , bool mode )
{
        char bmpdata[12];
        int size;
        fseek(fp, 54 , SEEK_SET);//bitmap headder throw
        
        pageStart();    
        for( int j=0 ; j<600 ; j++)
        {
            lineStart();
            
            for( int i=0 ; i<100 ; i++ )
            {
                size = fread( bmpdata , sizeof(char) , 12 , fp);
                if( size < 12 )
                {                   
                    drowPixels( 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 );    //読み込めない場合は白にする
                }
                else
                {
                    if( mode == 0 )
                        drowPixels( bmpdata[9]==0 , bmpdata[9]>0 , bmpdata[6]==0 , bmpdata[6]>0 , bmpdata[3]==0 , bmpdata[3]>0 , bmpdata[0]==0 , bmpdata[0]>0 );
                    else
                        drowPixels( bmpdata[9]==0 , 1 , bmpdata[6]==0 , 1 , bmpdata[3]==0 , 1 , bmpdata[0]==0 , 1 );
                }
            }
            changeSPH();
            for( int i=100 ; i<200 ; i++ )
            {
                size = fread( bmpdata , sizeof(char) , 12 , fp);
                if( size < 12 )
                {
                    drowPixels( 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 );    //読み込めない場合は白にする
                }
                else
                {
                    if( mode == 0 )
                        drowPixels( bmpdata[9]==0 , bmpdata[9]>0 , bmpdata[6]==0 , bmpdata[6]>0 , bmpdata[3]==0 , bmpdata[3]>0 , bmpdata[0]==0 , bmpdata[0]>0 );
                    else
                        drowPixels( bmpdata[9]==0 , 1 , bmpdata[6]==0 , 1 , bmpdata[3]==0 , 1 , bmpdata[0]==0 , 1 );
                }

            }

            lineEnd();
        }
        pageEnd();
}

void dispbmp2(FILE *fp)
{
    dispbmp( fp , 0 ); //黒の部分描く
    fseek(fp, 0 , SEEK_SET);//bitmap headder throw
    dispbmp( fp , 1 ); //白の部分を描く
}

void powerOff()
{
    setContBas( EN , 1);

    setCL( 0 );
    setContBas( LE , 0);
    setContBas( OE , 0);
    setContBas( NC10 , 0);
    setContBas( SPH , 0);

    setContBas( GMODE , 0);
    setContBas( SPV , 0);
    setContBas( CKV , 0);
    
    setDataBas( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 );
    
}

void powerOn()
{
    setContBas( EN , 0);
}