/*--------------------------------------------------*/ /* Configuration Options */ /*--------------------------------------------------*/ #define _LCD_ROWS 2 /* Number of Rows (1,2 or 4) */ #define _LCD_COLS 40 /* Number of Columns (8..40) */ここで製作したハードウエアに接続されているキャラクタLCDはSC2004CSです。このLCDは4行X20文字ですので"hd44780.h"の内上記2行を下記のように書き換えます。
#define _LCD_ROWS 4 /* Number of Rows (1,2 or 4) */ #define _LCD_COLS 20 /* Number of Columns (8..40) */
機能名称 | キャラクタLCDピン名称 | マイコンポート名称 |
---|---|---|
4ビットデータ (4ビットモードで動作) |
DB7 | PB7 |
DB6 | PB6 | |
DB5 | PB5 | |
DB4 | PB4 | |
データ書き込み | E | PB2 |
LCD選択信号 | RS | PB0 |
/* Bus controls */ #if 1 #include <avr/io.h> /* Hardware specific include file */ #define IF_BUS 8 /* Bus width (4 or 8) */ #define DELAY_US(n) delay_us(n) /* Delay d microseconds */ #define IF_INIT() /* Initialize control port */ #define IF_DLY60() /* Delay >=60ns (can be blanked for most uC) */ #define IF_DLY450() {} /* Delay >=450ns@3V, >=250ns@5V */ #define E1_HIGH() PORTB|=0x80 /* Set E/E1 high */ #define E1_LOW() PORTB&=0x7F /* Set E/E1 low */ #define E2_HIGH() PORTB|=0x01 /* Set E2 high (dual controller only) */ #define E2_LOW() PORTB&=0xFE /* Set E2 low (dual controller only) */ #define RS_HIGH() PORTB|=0x40 /* Set RS high */ #define RS_LOW() PORTB&=0xBF /* Set RS low */ #define OUT_DATA(d) PORTD=d /* Output a byte d on the bus (higher 4 bits of d in 4-bit mode) */上記の部分を使用しているマイコンのポートにあわせて書き換えます。
* Bus controls */ #if 1 #include <avr/io.h> /* Hardware specific include file */ #define F_CPU 1000000UL // 1 MHz #include <avr/delay.h> /* _delay_msを使用するためにインクルード */ #define IF_BUS 4 /* Bus width (4 or 8) */ #define DELAY_US(n) _delay_us(n) /* Delay d microseconds */ #define IF_INIT() /* Initialize control port */ #define IF_DLY60() /* Delay >=60ns (can be blanked for most uC) */ #define IF_DLY450() {} /* Delay >=450ns@3V, >=250ns@5V */ #define E1_HIGH() PORTB |= 1 << PORTB2 /* Set E/E1 high */ #define E1_LOW() PORTB &= ~(1 << PORTB2) /* Set E/E1 low */ #define E2_HIGH() PORTB |= 0x01 /* Set E2 high (dual controller only) */ #define E2_LOW() PORTB &= 0xFE /* Set E2 low (dual controller only) */ #define RS_HIGH() PORTB |= 1 << PORTB0 /* Set RS high */ #define RS_LOW() PORTB &= ~(1 << PORTB0) /* Set RS low */ #define OUT_DATA(d) PORTB = ( d & 0xf0) | (PORTB & 0x0f) /* Output a byte d on the bus (higher 4 bits of d in 4-bit mode) */
関数 | 内容 |
---|---|
lcd_init() | LCDモジュールの初期化 |
lcd_putc( unsigned char chr) | 1文字出力 chr:表示する文字コードを指定します。 |
lcd_locate( unsigned char row, unsigned char col) | カーソルの移動 row:移動先の行位置(0~3) col :移動先の列位置(0~19) |
/* * avr008_porting.c * */ #include <avr/io.h> #include "hd44780.h" // EZ-LCDインクルードファイル void InitHard( void); // ポートの初期化及び割込設定 int main(void) { char str[] = "Hello AVR World"; int i; InitHard(); // ポートの初期化をします。 lcd_init (); // LCDの初期化をします。 for ( i = 0; i < 15; i++) { lcd_putc( str[i]); } while(1) { //TODO:: Please write your application code } } void InitHard( void) // ポートの初期化 { // ポートB初期設定 DDRB = 0xff; // PB7~PB0を出力に設定します。 PORTB = 0; // PB7~PB0に'L'を出力します。 // ポートC初期設定 DDRC = 0x3f; // PC7,PC6は初期(入力)、PC5~PC0を出力に設定します。 PORTC = 0; // PC7~PC0に'L'を出力します。 // ポートD初期設定 DDRD = 0xf0; // PD7~PD4は出力、PD3~PD0は入力に設定します。 PORTD = 0; // PD7~PD0に'L'を出力します。 }