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();
}
べたですいません。独学素人なので。。。文字列、を表示する部分、次のコンテンツで説明します。
コメントを追加