アプリケーションノート MB-LCD1_2 2005/9 液晶表示ユニット MB-LCD1 アセンブラ ライブラリによる制御 概要 本アプリケーションノートは 液晶表示ユニット MB-LCD1 を制御するアセンブラルーチンを C 言語プログラムでライブラリとして使用する方法を説明するものです 動作環境は以下のとおりとします ターゲットマイコン :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/13 SG043108
サンプルプログラムの構成 本アプリケーションノートで紹介するサンプルプログラムは 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) の定義ファイルです Lcd.a30 からインクルードされています Lcd.h Lcd.a30 ファイル内のルーチンを C 言語でライブラリとして使用するためのヘッダファイルです 2/13 SG043108
Lcd.a30 MB-LCD1 を制御するアセンブリ言語プログラムのソースファイルです 本プログラムで使用する周辺機能は以下のとおりです 入出力ポート :P3_3( 出力 ) P3_4( 出力 ) P3_5( 出力 ) LCD_LIB.c MB-LCD1 に文字キャラクタを表示させる C 言語のプログラムです Lcd.a30 内のルーチンを表示ドライバとして使用しています (string.h) 本サンプルプログラム内で文字列操作関数を使用しているので string.h をインクルードしています 本サンプルプログラムでは 環境変数 INC30 より指定されたディレクトリ ( デフォルトのインストールで C:\Renesas\NC30WA\V530R02\inc30 に設定されています ) にあることが前提となります (r8clib.lib) 本サンプルプログラム内で文字列操作関数を使用しているので r8clib.lib が環境変数 LIB30 より指定されたディレクトリ ( デフォルトのインストールで C:\Renesas\NC30WA\V530R02\lib30 に設定されています ) にあることが前提となります 3/13 SG043108
サンプルプログラムの内容 main <LCD_LIB.c> 液晶表示ユニット MB-LCD1( キャラクタタイプ 16 文字 2 行 ) に Let s try R8C15! Welcome to R8C! と表示させる 名前 main 引数 戻り値 呼び出し元 - 使用ライブラリルーチン (Lcd.a30 より ) LCD_init,LCD_puts,LCD_cursor LCD_gotoXY,LCD_putc 使用標準入出力関数ライブラリ strcpy ( コンパイラ NC30WA で提供 ) < リスト > #include <string.h> // LCD ライブラリヘッダ void main(void) char str[20]; char c; long l; // LCD 初期化 strcpy(str,"let's try H8?"); LCD_puts(str); LCD_cursor(1); // 文字列表示 // カーソル表示 ; // wait time LCD_gotoXY(12,0); // カーソル移動 ; // wait time LCD_gotoXY(11,0); // カーソル移動 ; // wait time LCD_gotoXY(10,0); // カーソル移動 ; // wait time c='r'; LCD_putc(c); // 1 文字表示 4/13 SG043108
; LCD_gotoXY(12,0); LCD_puts("C15!"); for (l=0;l<500000;l++) ; LCD_cursor(0); LCD_gotoXY(0,1); // wait time // カーソル移動 // wait time // カーソル非表示 LCD_puts("Welcome to R8C!"); while(1) ; // 無限ループ 1 1 行目に Let s try H8? と表示させたあと カーソルを 1 文字づつ戻して H を R に? を C15! に書き換える 2 2 行目に Welcome to R8C! と表示させる 1 2 図 2 サンプルプログラム実行 5/13 SG043108
ライブラリの仕様 LCD_init <Lcd.a30> 液晶表示ユニット MB-LCD1 の初期設定を行う 名前引数戻り値 LCD_init 入出力ポート 3 の P3_3,P3_4,P3_5 を出力ポートに設定する MB-LCD1 を以下のとおり設定する インタフェースデータ長 :4 ビット長デューティ (1 行の表示文字数 ):16 文字表示文字構成 :5 8 ドットマトリクスカーソル : 点灯させない ( 位置はホーム (0 番地 ) に設定 ) カーソル方向 : インクリメント表示 : オン カーソルのある桁は点滅しない LCD_puts(*str) <Lcd.a30> 液晶表示ユニット MB-LCD1 に文字列を表示する 名前引数 戻り値 LCD_puts unsigned char *str ( 文字列は対応する文字 16 文字まで ) MB-LCD1 に引数 *str の示す文字列を表示する MB-LCD1 のホーム位置から Sunhayato と表示する char str[10]="sunhayato"; LCD_puts(str); S u n h a y a t o 6/13 SG043108
LCD_putc(c) <Lcd.a30> 液晶表示ユニット MB-LCD1 に文字を表示する 名前 LCD_putc 引数 char c (c= 対応する文字 1 文字 ) 戻り値 MB-LCD1 に文字を表示する MB-LCD1 のホーム位置に A を表示する char c; c='a'; LCD_putc(c); A LCD_cursor(b) <Lcd.a30> 液晶表示ユニット MB-LCD1 のカーソル表示を制御する 名前引数戻り値 LCD_cursol unsigned char b (b=0,1) MB-LCD1 のカーソルを 引数 char b が 1 の場合は表示 0 の場合は消去する MB-LCD1 のホーム位置にカーソルを表示する LCD_cursor(1); _ 7/13 SG043108
LCD_gotoXY(x,y) <Lcd.a30> 液晶表示ユニット MB-LCD1 のカーソル位置を設定する 名前引数戻り値 LCD_gotoXY unsigned char x,y (x=0~15 y=0,1) MB-LCD1 のカーソルを引数 x( 列 ) y( 行 ) の位置に設定する MB-LCD1 の 2 行目の左端にカーソルを設定する 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) <Lcd.a30> 液晶表示ユニット 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 行目の左端にカーソルを設定する LCD_cursor(1); LCD_locate(0x40); _ 8/13 SG043108
LCD_gotoX(x) <Lcd.a30> 液晶表示ユニット MB-LCD1 のカーソル位置を設定する 名前引数戻り値 LCD_gotoX unsigned char x (x=0~15) MB-LCD1 のカーソルを引数 x( 列 ) の位置に設定する MB-LCD1 の 1 行目の左端から右端へカーソルを移動する long l; LCD_cursor(1); ; 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 行目左端にカーソルを移動する long l; LCD_cursor(1); ; LCD_gotoY(1); 0 _ 1 _ 9/13 SG043108
LCD_clear <Lcd.a30> 液晶表示ユニット MB-LCD1 の表示を消去する 名前引数戻り値 LCD_clear MB-LCD1 の表示を消去し カーソルをホーム位置に設定する LCD_data(c) <Lcd.a30> 液晶表示ユニット MB-LCD1 に DDRAM のデータを書き込む 名前引数 戻り値 LCD_data unsigned char c (c= 対応する文字コード 1 文字 ) MB-LCD1 に DDRAM のデータに対応する文字パターンを表示する ( 文字コードと文字パターンの対応については MB-LCD1 添付資料を参照 ) MB-LCD1 のホーム位置に A を表示する LCD_data(0x41); A 10/13 SG043108
標準ライブラリ 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 コンパイラユーザーズマニュアル より抜粋 11/13 SG043108
参考文献 液晶表示ユニットの取扱説明書 :MB-LCD1 添付資料 1 統合化開発環境 High-performance Embedded Workshop の使い方 : High-performance Embedded Workshop ユーザーズマニュアル (JHEWU51.pdf) 2 SR8C15CP スタートアップガイド (SR8C15CP_SG043101.pdf) 1 1 サンハヤト株式会社発行 2 株式会社ルネサステクノロジ発行 12/13 SG043108
< 本資料について > 本資料は 電子工作や電子回路 パーソナルコンピュータの操作について一般的な知識をお持ちの方を対象にしています 本資料を元に操作するには 株式会社ルネサステクノロジ社製 R8C/Tiny マイコンについての知識や開発環境などが必要です < 安全設計に関するお願い > 一般的に半導体を使用した製品は 誤動作したり故障することがあります 半導体の誤動作や故障の結果として事故や損害などを生じさせないように考慮した安全設計をご購入者の責任で行ってください < 本資料のご利用にあたって > この取扱説明書に掲載している内容は お客様が用途に応じた適切な製品をご購入頂くことを目的としています その使用により当社及び第三者の知的財産権その他の権利に対する保証 又は実施権の許諾を意味するものではありません また 権利の侵害に関して当社は責任を負いません 本資料に記載した情報を流用する場合は お客様のシステム全体で充分評価し適用可能かご判断願います 当社では適用可能判断についての責任は負いません 本資料に記載してある内容は 一般的な電子機器 ( 学習教材 事務機器 計測機器 パーソナル機器 コンピュータ機器など ) に使用されることを目的としています 高い品質や信頼性が要求され 故障や誤作動が直接人命を脅かしたり人体に危害を及ぼす恐れのある 医療 航空宇宙 原子力制御 運輸 移動体 各種安全装置などの機器への使用は意図も保証もしておりません この取扱説明書の一部 又は全部を当社の承諾で いかなる形でも転載又は複製されることは堅くお断りします 全ての情報は本資料発行時点のものであり 当社は予告に本資料に記載した内容を変更することがあります この資料の内容は慎重に制作しておりますが 万一記述誤りによってお客様に損害が生じても当社はその責任を負いません 本資料に関してのお問合せ その他お気付きの点がございましたら 当社までお問合せください 本資料に関する最新の情報はサンハヤト株式会社ホームページ (Hhttp://www.sunhayato.co.jp/H) に掲載しております 13/13 SG043108