メインコンテンツに移動

OLEDを試す2

OLEDを試すの続き。

I2C初期化部

MSP2452のI2C(USI)は、Port1のbit6,bit7である。ポートの初期化とUSIの設定を行う。

/** i2c Start */
void i2c_start(unsigned char addr,unsigned char mode){
  while(!(P1IN & BIT6));
  USISRL = 0;
  USICTL0 |= USIGE + USIOE;
  USICTL0 &= ~USIGE;
  i2c_send(addr<<1 | mode);
}
/** i2c_stop */
void i2c_stop(void){
  USICTL0 |= USIOE;
  USISRL = 0;
  USICNT = 1;
  while(!(USICTL1 & USIIFG));
  USISRL = 0xff;
  USICTL0 |= USIGE;
  USICTL0 &= ~(USIGE + USIOE);
}

/* i2c_send(data) */
int i2c_send(unsigned char aData){
  while(!(P1IN & BIT6));
  USISRL = aData;
  USICTL0 |= USIOE;
  USICNT = 8;
  while(!(USICTL1 & USIIFG));
  USICTL0 &= ~USIOE;
  USICNT = 1;
  while(!(USICTL1 & USIIFG));
  return USISRL & 1;
}

指定アドレスでOpenしたらイニシャライズして表示となる。表示制御部分は一部しか作ってないのですが以下のようなものです。

void lcd_cls(void){
    int i;
    i2c_start(LCD_ADDR,I2C_RW_WRITE);
    i2c_send(0x00);
    i2c_send(SET_COLUMN_ADDR);
    i2c_send(  0);
    i2c_send(127);
    i2c_send(SET_PAGE_ADDR);
    i2c_send(  0);
    i2c_send(  3);
    i2c_stop();

    i2c_start(LCD_ADDR,I2C_RW_WRITE);
    i2c_send(DC_BIT);
    for(i=0;i<(128*32);i++){
        i2c_send( 0 );
    }
    i2c_stop();
}
void lcd_locate(int col,int page){
    i2c_start(LCD_ADDR,I2C_RW_WRITE);
    i2c_send(0x00);
    i2c_send(SET_COLUMN_ADDR);
    i2c_send((unsigned char)col);
    i2c_send(127);
    i2c_send(SET_PAGE_ADDR);
    i2c_send((unsigned char)page++);
    i2c_send((unsigned char)page);
    i2c_stop();
}

べたですいません。独学素人なので。。。文字列、を表示する部分、次のコンテンツで説明します。

 

 

Tags

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
  • 行と段落は自動的に折り返されます。