LCDを制御する

2005/8/25


重要

MES2.0b3ではLCDをサポートしていません。
ここで紹介する方法は、IOポートを直接操作して、LCDを制御しています。
IOポートの操作やLCDの制御方法に自信がない方は、決して実行しないでください。
また、これら操作により生じた障害、故障等についてはすべてご自身の責任において処理してください。

動作

AKI-H8/3069FフラッシュマイコンLANボードをマザーボードにとりつけます。
マザーボード上のLCD(液晶パネル)に文字を出します。

使用するLCDは

です。
SC1602とSC2004は電源の接続端子が違いますから、注意してください。

注意事項

注意すべきことはつぎのとおりです。

H8/3069 CN2 LCD-LED-DIP LCD
D0/P0 5 2 1 11 DB4
D1/P41 6 4 3 12 DB5
D2/P42 7 6 5 13 DB6
D3/P43 8 8 7 14 DB7
D4/P44 9 10 9 4 RS
D5/P45 10 12 11 6 E

プログラム

  1. Eclipseを起動して、新しいプロジェクトをつくります。
    プロジェクト名はLCDにします。


  2. 新規にファイルを作ります。
    作るファイルは です。


    Makefile
    ## lcd.c
    MES2 = /home/j00300/H8/MES2.0b3
    TARGET = lcd
    
    SOURCE = $(TARGET).c
    OBJ = $(TARGET).o
    ELF = $(TARGET).elf
    
    
    clean :
            rm -f $(OBJ) $(ELF)
            
    all : $(ELF)
    
    $(ELF) : $(OBJ)
            h8300-elf-gcc -Wl,--section-start=.stack=0x400 -B $(MES2)/local/h8300-elf -L$(MES2)/app -mint32 -mh -T $(MES2)/app/h8pic.x -nostartfiles $(MES2)/app/h8piccrt0.S -o $(ELF)  $(OBJ) -lmes_h8
            cp $(ELF) /tftpboot/
            
    $(OBJ) : $(SOURCE) sc1602.h
            h8300-elf-gcc -B $(MES2)/local/h8300-elf -I $(MES2)/app -mint32 -mh -fPIC -O2 -c $(SOURCE)

    lcd.c
    #include <mes2.h>
    #include <h8/reg3067.h>
    #include "sc1602.h"
     
    int main(){
            printf("LCD test (AKI-H8/3069)\r");
    
            lcd_init();
    
            lcd_string("AKI-H8/3069");
    
            printf("LCD OK ?\r");
    
    }

    sc1602.h
    //#include <mes2.h>
    //#include <h8/reg3067.h>
    
    #define RS              0x10 ;
    #define E               0x20 ;
    #define LEDR    0x40 ;
    #define LEDG    0x80 ;
    
    int lcd_cmd(char cmd){
            P4DR = cmd ;
            sleep(1);
            P4DR = 0 ;
            sleep(1) ;
    }
    
    
    
    int lcd_init(){
            // LCD initiation
            sleep(15);      //wait 15 mSec after Power ON
            
            ABWCR=0xff;
            
            P4DR = 0x23 ;
            P4DR = 0x00 ;
            
            sleep(5);       //4.1mSec
            P4DR = 0x23 ;
            P4DR = 0x00 ;
            
            sleep(1);       // 100uSec以上待つ(1mSec wait)
    
            lcd_cmd(0x23);
            lcd_cmd(0x22);
    
            lcd_cmd(0x22);//function set
            lcd_cmd(0x24);
    
            lcd_off();      // LCD OFF
            lcd_clear();// LCD CLEAR
    
            lcd_cmd(0x20);//entery mode set
            lcd_cmd(0x26);
            
            lcd_on();//LCD ON
    }
    
    //      LCD CLEAR
    int lcd_clear(){
            lcd_cmd(0x20);
            lcd_cmd(0x21);
    }
    
    //      LCD CURSOR HOME
    int lcd_cursor_home(){
            lcd_cmd(0x20);
            lcd_cmd(0x22);
    }
    
    //      LCD ON
    int lcd_on(){
            lcd_cmd(0x20);
            lcd_cmd(0x2E);
    }
    
    //      LCD OFF
    int lcd_off(){
            lcd_cmd(0x20);
            lcd_cmd(0x28);
    }
    
    // 文字列をLCDへ出力
    int lcd_string(char *p){
            int i;
            for(i=0;i<strlen(p);i++){
                    int a = (p[i] & 0x00F0) >>4;
                    int b = p[i] & 0x000F;
                    lcd_cmd(0x30+a);
                    lcd_cmd(0x30+b);
            }
    } 
    

  3. プロジェクトをビルドします。

  4. H8/3069FフラッシュマイコンLANボードを起動します。
    xterm(kterm)を起動し、minicomを実行します。
    tftpコマンドでled.elfをAKI-H8/3069Fにダウンロードし、led.elfを実行します。