📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| 41行目: | 41行目: | ||
*: 多くのSC1604 / SC2004モジュールは、バックライト機能を備えている。 | *: 多くのSC1604 / SC2004モジュールは、バックライト機能を備えている。 | ||
*: バックライトの制御は、別の信号線や専用のコマンドを使用して行う。 | *: バックライトの制御は、別の信号線や専用のコマンドを使用して行う。 | ||
<br><br> | |||
== SC2004 / GPIOピンで直接制御 == | |||
==== SC2004と接続 ==== | |||
以下に示すように、MSP430G2553とSC2004の接続する。<br> | |||
* MSP430G2553のP1.0をSC2004のRS (Register Select) ピンに接続 | |||
* MSP430G2553のP1.1をSC2004のE (Enable) ピンに接続 | |||
* MSP430G2553のP1.2〜P1.5をSC2004のDB4〜DB7データピンに接続 | |||
* SC2004のVss、RW、K (Backlight Cathode) ピンはGNDに接続 | |||
* SC2004のVdd、A (Backlight Anode)ピンは+5Vに接続 | |||
* SC2004のVo (Contrast Adjust) ピンは、10[kΩ]の可変抵抗を介してGNDに接続 | |||
<br> | |||
* LCDのリセットピンを<code>0</code>にする場合 (RS = 0) | |||
*: コマンドレジスタが選択されて、送信されるデータはコマンドとして解釈される。 | |||
* LCDのリセットピンを<code>1</code>にする場合 (RS = 1) | |||
*: データレジスタが選択されて、送信されるデータは表示データとして解釈される | |||
<br> | |||
以下の例では、SC2004を制御する関数を実装して、SC2004を初期化して、表示する文字列をlcd_puts関数で送信している。<br> | |||
* void lcd_init(void) | |||
*: SC2004の初期化 | |||
* void lcd_cmd(uint8_t cmd) | |||
*: コマンドの送信 | |||
* void lcd_data(uint8_t data) | |||
*: 文字データの送信 | |||
* void lcd_puts(const char *s) | |||
*: 文字列の表示 | |||
<br> | |||
<syntaxhighlight lang="c"> | |||
#include <msp430.h> | |||
#define RS_PIN BIT0 // P1.0 | |||
#define E_PIN BIT1 // P1.1 | |||
#define DB4_PIN BIT2 // P1.2 | |||
#define DB5_PIN BIT3 // P1.3 | |||
#define DB6_PIN BIT4 // P1.4 | |||
#define DB7_PIN BIT5 // P1.5 | |||
void lcd_cmd(uint8_t cmd); | |||
void lcd_data(uint8_t data); | |||
void lcd_init(void); | |||
void lcd_puts(const char *s); | |||
int main(void) | |||
{ | |||
WDTCTL = WDTPW | WDTHOLD; // ウォッチドッグタイマを停止 | |||
lcd_init(); | |||
lcd_puts("Hello, MSP430G2553"); | |||
while(1); | |||
} | |||
void lcd_init(void) | |||
{ | |||
P1DIR |= RS_PIN | E_PIN | DB4_PIN | DB5_PIN | DB6_PIN | DB7_PIN; | |||
// LCDの初期化 | |||
lcd_cmd(0x28); // LCDを4[ビット]モードに設定, 2 lines, 5x8フォント | |||
lcd_cmd(0x0C); // ディスプレイをON, カーソルをOFF, 点滅をOFF | |||
lcd_cmd(0x06); // 自動インクリメントカーソルを有効, シフト動作を無効 | |||
// シフト動作を有効にすると、文字を書き込むたびにディスプレイ全体が左右に移動する (この機能は、長い文字列を表示する時に使用する) | |||
lcd_cmd(0x01); // ディスプレイの表示をクリア | |||
} | |||
void lcd_cmd(uint8_t cmd) | |||
{ | |||
// RSピンを0にしてデータを送信 | |||
// これにより、LCDはコマンドレジスタが選択された状態になり、送信されたデータをコマンドとして解釈される | |||
P1OUT &= ~RS_PIN; // RS = 0 for command | |||
// 上位4[ビット]を送信 | |||
P1OUT = (P1OUT & 0xC3) | ((cmd >> 4) & 0x3C); | |||
P1OUT |= E_PIN; | |||
P1OUT &= ~E_PIN; | |||
// 下位4[ビット]を送信 | |||
P1OUT = (P1OUT & 0xC3) | ((cmd << 2) & 0x3C); | |||
P1OUT |= E_PIN; | |||
P1OUT &= ~E_PIN; | |||
__delay_cycles(2000); // コマンドが実行されるまで待機 : 2[mS] | |||
} | |||
void lcd_data(uint8_t data) | |||
{ | |||
// データレジスタが選択された状態で、lcd_data関数によりデータが送信される時、 | |||
// LCDはそれを表示データとして解釈して、画面に文字が表示される | |||
P1OUT |= RS_PIN; // RS = 1 for data | |||
// 上位4[ビット]を送信 | |||
P1OUT = (P1OUT & 0xC3) | ((data >> 4) & 0x3C); | |||
P1OUT |= E_PIN; | |||
P1OUT &= ~E_PIN; | |||
// 下位4[ビット]を送信 | |||
P1OUT = (P1OUT & 0xC3) | ((data << 2) & 0x3C); | |||
P1OUT |= E_PIN; | |||
P1OUT &= ~E_PIN; | |||
__delay_cycles(2000); // データを書き込むまで待機 : 2[mS] | |||
} | |||
void lcd_puts(const char *s) | |||
{ | |||
while(*s) { | |||
lcd_data(*s++); | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||