アプリケーションノート MB-LCD1_3 2005/9 液晶表示ユニット MB-LCD1 標準入出力関数による表示 概要 本アプリケーションノートは 液晶表示ユニット MB-LCD1 を オリジナル ライブラリ (STD_LCD_LIB.lib) と コンパイラ NC30WA 付属の標準ライブラリ (r8clib.lib) の標準入出力関数を使用して表示する方法を説明するものです オリジナル ライブラリ (STD_LCD_LIB.lib) の詳細については 液晶表示ユニット MB- LCD1 オリジナル ライブラリの紹介 (MB_LCD_1_SG043199.pdf) を参照してください 動作環境は以下のとおりとします ターゲットマイコン :SR8C15CP ターゲットボード :MB-RS8 開発環境 : ルネサステクノロジ社統合化開発環境 HEW Version 4.00.01.001 ツールチェイン Renesas M16C Standard Toolchain 5.30.02 MB-LCD1 の H/W 構成 液晶表示部 (Sunlike Display Tech 社 SC1602BS*B) にシフトレジスタ 74HC164 を接続し ポート信号 3 線とリセット信号のみによる制御を実現しています 各ポート接続表 SR8C15CP 74HC164( シフトレジスタ ) SC1602BS*B( 液晶表示部 ) P3_3( 出力 ) A,B シリアルデータ入力 - P3_4( 出力 ) - E 動作起動信号入力 P3_5( 出力 ) CLK クロック入力 - RESET( 出力 ) CLR クリア信号入力 - 図 1 MB-LCD1 接続 1/15 SG043109
サンプルプログラムの構成 本アプリケーションノートで紹介するサンプルプログラムは HEW のプロジェクトで提供しています 以下にプロジェクトフォルダの構成を示します ncrt0.a30 M16C ツールチェイン標準のスタートアップルーチン NCRT0.A30 に 外部発振回路からのクロックをメインクロックとする設定を追加しています 本スタートアップルーチン実行後 メインクロックは 20MHz となります ( ターゲットボード MB-RS8 に搭載した場合の動作を想定しています ) 全セクションを設定する定義ファイル SECT30.INC をインクルードしています 本スタートアップルーチンは必ず先頭にリンクしてください sect30.inc M16C ツールチェイン標準のセクション定義ファイルです NCRT0.A30 からインクルードされます sfr_r815.inc ターゲットマイコン SR8C15CP( ルネサステクノロジ R8C/Tiny シリーズ R5F21154SP) の SFR(Special Function Register) の定義ファイルです STD_LCD.h STD_LCD_LIB.lib を使用するためのヘッダファイルです かならず C ソースファイル内でインクルードしてください また M16C ツールチェインコンパイラ NC30WA で提供される標準ライブラリを使用しているので 標準ヘッダファイル string.h を C ソースファイル内でインクルードしてください 本サンプルプログラムでは string.h は環境変数 INC30 より指定されたディレクトリ ( デフォルトのインストールで C:\Renesas\NC30WA\V530R02\inc30 に設定されています ) にあることが前提となります 2/15 SG043109
STD_LCD_LIB.lib MB-LCD1 を制御するオリジナル ライブラリです 本ライブラリで使用する周辺機能は以下のとおりです 入出力ポート :P3_3( 出力 ) P3_4( 出力 ) P3_5( 出力 ) STD_LCD_TEST.c MB-LCD1 に文字キャラクタを表示させる C 言語のプログラムです 標準入出力関数とオリジナルのライブラリを使用しています (stdio.h) 本サンプルプログラム内で標準入出力関数を使用しているので stdio.h をインクルードしています 本サンプルプログラムでは 環境変数 INC30 より指定されたディレクトリ ( デフォルトのインストールで C:\Renesas\NC30WA\V530R02\inc30 に設定されています ) にあることが前提となります (string.h) 本サンプルプログラム内で文字列操作関数を使用しているので string.h をインクルードしています 本サンプルプログラムでは 環境変数 INC30 より指定されたディレクトリ ( デフォルトのインストールで C:\Renesas\NC30WA\V530R02\inc30 に設定されています ) にあることが前提となります (r8clib.lib) 本サンプルプログラム内で標準入出力関数 文字列操作関数を使用しているので 標準ライブラリ r8clib.lib が環境変数 LIB30 より指定されたディレクトリ ( デフォルトのインストールで C:\Renesas\NC30WA\V530R02\lib30 に設定されています ) にあることが前提となります 3/15 SG043109
サンプルプログラムの内容 main <LCD_LIB.c> 液晶表示ユニット MB-LCD1( キャラクタタイプ 16 文字 2 行 ) に文字を表示させる 名前 main 引数 戻り値 呼び出し元 - 使用オリジナル ライブラリ (STD_LCD_LIB.lib より ) std_lcd_init,lcd_puts,lcd_cursor LCD_gotoXY,LCD_putc 使用標準入出力関数ライブラリ strcpy, printf, putchar ( コンパイラ提供 r8clib.lib より ) < リスト > #include <stdio.h> #include <string.h> #include "std_lcd.h" // プロトタイプ宣言 void wait_x(void); void wait_x(void) long l; for(l=0;l<150000;l++) ; // メインルーチン void main(void) int i,j; char str[20]; long l; std_ strcpy(str,"renesas"); j=1234; while(1) printf("hello World!\n <%s>",str); for(i=6;i!=0;i--) wait_x(); MB-LCD1 に 1 秒おきに以下のように表示する printf("\nmy name is R8C. %d %04X",j,j); for(i=6;i!=0;i--) wait_x(); for(i=1;i<=100;i++) wait_x(); LCD_gotoXY(0,1); printf("count: %03d",i); putchar(0x0c); j++; // LCD 消去 4/15 SG043109
1 1 行目に Hello world! 2 行目に <Renesas> と表示する 2 1 行目に My name is R8C. 2 行目に 1234 04D2 と表示する 3 2 行目に Count: xxx と表示する xxx は 000~100 までカウントする 4 100 までカウントすると 1 の Hello world! <Renesas> に戻って 2~4 と繰り返す 1 2 3 4 図 2 サンプルプログラムの実行結果 5/15 SG043109
ライブラリの仕様 LCD_init <STD_LCD_LIB.lib> 液晶表示ユニット MB-LCD1 の初期設定を行う 名前引数戻り値 std_lcd_init 入出力ポート 3 の P3_3,P3_4,P3_5 を出力ポートに設定する MB-LCD1 を以下のとおり設定する インタフェースデータ長 :4 ビット長デューティ (1 行の表示文字数 ):16 文字表示文字構成 :5 8 ドットマトリクスカーソル : 点灯させない ( ホーム位置 (0 番地 ) に設定 ) カーソル方向 : インクリメント表示 : オン カーソルのある桁は点滅しない std_lcd_init <STD_LCD_LIB.lib> 液晶表示ユニット MB-LCD1 の初期設定を行う (LCD_init を実行する ) 標準出力 (stdout) の出力先を設定する 名前引数戻り値 std_lcd_init LCD_init を実行する ( 詳細は LCD_init の項を参照 ) 標準出力 (stdout) にオリジナル ライブラリ LCD_putc を割りあてる 本関数を実行後 標準出力 (stdout) は液晶表示ユニット MB-LCD1 に設定されます 6/15 SG043109
LCD_puts(*str) <STD_LCD_LIB.lib> 液晶表示ユニット MB-LCD1 に文字列を表示する 名前引数 戻り値 LCD_puts unsigned char *str ( 文字列は対応する文字 16 文字まで ) MB-LCD1 に引数 *str の示す文字列を表示する MB-LCD1 のホーム位置から Sunhayato と表示する #include "STD_LCD.h" char str[10]="sunhayato"; LCD_puts(str); S u n h a y a t o 7/15 SG043109
LCD_putc(c) <STD_LCD_LIB.lib> 液晶表示ユニット MB-LCD1 に文字を表示する 名前 LCD_putc 引数 char c (c= 対応する文字 1 文字 ) 戻り値 MB-LCD1 に文字を表示する MB-LCD1 のホーム位置に A を表示する #include "STD_LCD.h" char c; c='a'; LCD_putc(c); A LCD_cursor(b) <STD_LCD_LIB.lib> 液晶表示ユニット MB-LCD1 のカーソル表示を制御する 名前引数戻り値 LCD_cursol unsigned char b (b=0,1) MB-LCD1 のカーソルを 引数 char b が 1 の場合は表示 0 の場合は消去する MB-LCD1 のホーム位置にカーソルを表示する #include "STD_LCD.h" LCD_cursor(1); _ 8/15 SG043109
LCD_gotoXY(x,y) <STD_LCD_LIB.lib> 液晶表示ユニット MB-LCD1 のカーソル位置を設定する 名前引数戻り値 LCD_gotoXY unsigned char x,y (x=0~15 y=0,1) MB-LCD1 のカーソルを引数 x( 列 ) y( 行 ) の位置に設定する MB-LCD1 に 1 行目の左端にカーソルを設定する #include "STD_LCD.h" LCD_cursor(1); LCD_gotoXY(0,1); 0 1 _ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 LCD_locate(pos) <STD_LCD_LIB.lib> 液晶表示ユニット MB-LCD1 のカーソル位置を設定する (DDRAM アドレスを設定する ) 名前 LCD_locate 引数 unsigned char pos (pos=ddram アドレス ) 戻り値 MB-LCD1 のカーソルを引数の DDRAM アドレスの位置に設定する DDRAM のアドレスと表示位置 (HEX) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F MB-LCD1 の 2 行目の左端にカーソルを設定する #include "STD_LCD.H" LCD_cursor(1); LCD_locate(0x40); _ 9/15 SG043109
LCD_gotoX(x) <STD_LCD_LIB.lib> 液晶表示ユニット MB-LCD1 のカーソル位置を設定する 名前引数戻り値 LCD_gotoX unsigned char x (x=0~15) MB-LCD1 のカーソルを引数 x( 列 ) の位置に設定する MB-LCD1 の 1 行目の左端から右端へカーソルを移動する #include "STD_LCD.h" long l; LCD_cursor(1); for (l=0;l<250000;l++) ; LCD_gotoX(15); 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 LCD_gotoY(y) (LCD.a30) 液晶表示ユニット MB-LCD1 のカーソル位置を設定する 名前引数戻り値 LCD_gotoY unsigned char y(y=0,1) MB-LCD1 のカーソルを引数 y( 行 ) の位置に設定する MB-LCD1 の 0 行目の左端から 1 行目左端にカーソルを移動する #include "STD_LCD.h" long l; LCD_cursor(1); for (l=0;l<250000;l++) ; LCD_gotoY(1); 0 _ 1 _ 10/15 SG043109
LCD_clear <STD_LCD_LIB.lib> 液晶表示ユニット MB-LCD1 の表示を消去する 名前引数戻り値 LCD_ clear MB-LCD1 の表示を消去し カーソルをホーム位置に設定する LCD_data(c) <STD_LCD_LIB.lib> 液晶表示ユニット MB-LCD1 に DDRAM のデータを書き込む 名前引数 戻り値 LCD_data unsigned char c (c= 対応する文字コード 1 文字 ) MB-LCD1 に DDRAM のデータに対応する文字パターンを表示する ( 文字コードと文字パターンの対応については MB-LCD1 添付資料を参照 ) MB-LCD1 のホーム位置に A を表示する #include "STD_LCD.h" LCD_data(0x41); A 11/15 SG043109
標準ライブラリ strcpy (r8clib.lib) 1 < 文字列操作関数 > [ 機能 ] 文字列の複写を行います [ 書式 ] #include <string.h> char _far * strcpy( s1, s2 ); [ 実現方法 ] 関数 [ 引数 ] har _far *s1;... 複写先の文字列へのポインタ const char _far *s2;... 複写元の文字列へのポインタ [ 戻り値 ] 複写先の文字列へのポインタを返します "s1" で示される領域に "s2" で示される (NULL で終了している ) 文字列を複写します [ 解説 ] 複写先の文字列は NULL で終了します オプション -O[3~5],-OR 及び -OS を指定した場合は 最適化により関数のインライン展開を行う可能性があります 1 ルネサステクノロジ社 R8C/Tiny,M16C/60,30,Tiny,20,10 シリーズ用 C コンパイラパッケージ V.5.30C コンパイラユーザーズマニュアル より抜粋 標準ライブラリ printf (r8clib.lib) 1 < 入出力関数 > [ 機能 ] stdout への書式付き出力を行います [ 書式 ] #include <stdio.h> int printf( format, argument... ); [ 実現方法 ] 関数 [ 引数 ] const char _far *format;... 書式指定文字列のポインタ format で与えられる文字列の % 以降の指定は 次の意味を持ちます [ ] 内は省略可能です 書式の各指定については次のページで説明します 2 書式 : %[ フラグ ][ 最小フィールド幅 ][ 精度 ][ 修飾文字 (l L 又は h)] 変換指定記号書式例 : %-05.8ld [ 戻り値 ] 出力した文字数を返します ハードウェアに起因するエラーの場合 EOF を返します [ 解説 ] format の指定に従って argument を文字列に変換し stdout へ出力します 3 argument にポインタを与える場合は far 型ポインタである必要があります 1 ルネサステクノロジ社 R8C/Tiny,M16C/60,30,Tiny,20,10 シリーズ用 C コンパイラパッケージ V.5.30C コンパイラユーザーズマニュアル より抜粋 2 printf format の書式設定についてはルネサステクノロジ社の上記コンパイラマニュアル ( 付録 E.2.3 標準関数リファレンス printf の項 ) を参照してください 3 オリジナル ライブラリ std_lcd_init 実行後は stdout は液晶表示 MB-LCD1 に設定され ます 12/15 SG043109
標準ライブラリ putchar (r8clib.lib) 1 < 入出力関数 > [ 機能 ] stdout に 1 文字を出力します 2 [ 書式 ] #include <stdio.h> int putchar( c ); [ 実現方法 ] マクロ [ 引数 ] int c;... 出力する文字 [ 戻り値 ] 正常に出力できた場合 出力した文字を返します エラーの場合 EOF を返します [ 解説 ] stdout に 1 文字を出力します 1 ルネサステクノロジ社 R8C/Tiny,M16C/60,30,Tiny,20,10 シリーズ用 C コンパイラパッケージ V.5.30C コンパイラユーザーズマニュアル より抜粋 2 オリジナル ライブラリ std_lcd_init 実行後は stdout は液晶表示 MB-LCD1 に設定され ます 13/15 SG043109
参考文献 液晶表示ユニットの取扱説明書 : MB-LCD1 添付資料 1 オリジナル ライブラリ (STD_LCD_LIB.lib) について : 液晶ユニット MB-LCD1 オリジナル ライブラリの紹介 (MB_LCD_1_SG043199.pdf) 1 統合化開発環境 High-performance Embedded Workshop の使い方 : High-performance Embedded Workshop ユーザーズマニュアル (JHEWU51.pdf) 2 SR8C15CP スタートアップガイド (SR8C15CP_SG043101.pdf) 1 コンパイラ付属標準ライブラリについて : ルネサステクノロジ社製コンパイラ NC30WA コンパイラパッケージ V5.30 ユーザーズマニュアル 2 1 サンハヤト株式会社発行 2 株式会社ルネサステクノロジ発行 14/15 SG043109
< 本資料について > 本資料は 電子工作や電子回路 パーソナルコンピュータの操作について一般的な知識をお持ちの方を対象にしています 本資料を元に操作するには 株式会社ルネサステクノロジ社製 R8C/Tiny マイコンについての知識や開発環境などが必要です < 安全設計に関するお願い > 一般的に半導体を使用した製品は 誤動作したり故障することがあります 半導体の誤動作や故障の結果として事故や損害などを生じさせないように考慮した安全設計をご購入者の責任で行ってください < 本資料のご利用にあたって > この取扱説明書に掲載している内容は お客様が用途に応じた適切な製品をご購入頂くことを目的としています その使用により当社及び第三者の知的財産権その他の権利に対する保証 又は実施権の許諾を意味するものではありません また 権利の侵害に関して当社は責任を負いません 本資料に記載した情報を流用する場合は お客様のシステム全体で充分評価し適用可能かご判断願います 当社では適用可能判断についての責任は負いません 本資料に記載してある内容は 一般的な電子機器 ( 学習教材 事務機器 計測機器 パーソナル機器 コンピュータ機器など ) に使用されることを目的としています 高い品質や信頼性が要求され 故障や誤作動が直接人命を脅かしたり人体に危害を及ぼす恐れのある 医療 航空宇宙 原子力制御 運輸 移動体 各種安全装置などの機器への使用は意図も保証もしておりません この取扱説明書の一部 又は全部を当社の承諾で いかなる形でも転載又は複製されることは堅くお断りします 全ての情報は本資料発行時点のものであり 当社は予告に本資料に記載した内容を変更することがあります この資料の内容は慎重に制作しておりますが 万一記述誤りによってお客様に損害が生じても当社はその責任を負いません 本資料に関してのお問合せ その他お気付きの点がございましたら 当社までお問合せください 本資料に関する最新の情報はサンハヤト株式会社ホームページ (Hhttp://www.sunhayato.co.jp/H) に掲載しております 15/15 SG043109