• 締切済み

H8 LCD の表示

H8S2612を使っています。LCDを使いたいですが,なかなかできません,1行目が表示できるんですが,2行目が出てこないです。LCDの4ビット表示を使っています。r/w とD1~D3はGNDにつないでいます。 ちなみに,1行目が表示できるから,初期設定と4ビット表示の関数は問題ないと思いますが。何方がおしえていただけませんか?よろしくおねがいします。

みんなの回答

  • paspas
  • ベストアンサー率52% (47/90)
回答No.2

 SC1602BSLBの2行目のアドレスは、40桁目ではなく、40H桁目だったと思います。  表示するかどうかのテストであれば、表示クリア後に表示アドレスを自動インクリメントで100文字ぐらい連続で送ってみたらどうでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
noname#15436
noname#15436
回答No.1

肝心の LCD の型式が… M1632 or SC1602BSLB と勝手に決め付けて回答してしまいますが,  (1)ファンクションセットで N=1 にしているか  (2)2行目に表示するときに,正しいアドレスにカーソルをセットしているか 参考 URL に2行目に表示する例も載ってますのでご覧ください。

参考URL:
http://speana-1.hp.infoseek.co.jp/lcd/lcd_2/lcd_2.htm
genkiyao
質問者

お礼

ありがとうございました、私は使っているのはSC1602BSLBです。2行目を表示するプログラムは40桁進むとの書き方です。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • LCD表示プログラムで誤表示が解決できない

    pic16F84AにS-10551D(秋月)をつないでキャラクタ表示をしようとしていますが50%くらい誤まって表示してしまい解決策が有りません。 プログラムはアッセンブラでMPLAB IDEv8.60を使用 電波新聞社のPICマイコン完全マスターを参考 にしています。データ長4bitのイニシャライズも本やLCD添付資料のままでは表示しませんでした。 LCDパネルの問題かマイコンソフトの問題かの区別も出来ていません。 ちなみにソースを変更してSC1602BS 16*2行のLCDパネルでは正しく表示出来ます。 S-10551Dは16桁1行の一番安いパネルですが使えず捨てるのはくやしいので質問しました。同じような経験をされて解決された事があればアドバイス願います。 最終的にはLCDにバッテリーの充放電量を表示できる充放電コントローラーを作るのが目的です。

  • LCD表示の際のインストラクションについて

    LCD表示の際のインストラクションについて いつもお世話になっております。 マイコンを使ってLCDに文字を表示させるとき、表示するために必要な初期化設定や、 途中で、カーソルの設定を変えたりする時のインストラクションは、「決められた順番」というものがあるのでしょうか? たとえば、二つのインストラクション、1:表示クリア、2:エントリーモードセットの信号をおくった場合、 コンピュータ側はどうやって、最初の信号は表示クリアのためのもので、 次の信号はエントリーモードセット用であると理解しているのでしょうか? もうすこし詳しく言うと、コンピュータ側はどのようにして、 どの種類のインストラクションが来たかをを見分けているのでしょうか? 以下の信号をおくったとして、これが表示クリアのインストラクションか、 もしくは他のインストラクションかをどうやって見分けているのでしょうか? RS=0 R/W=0 DB7=0 DB6=0 DB5=0 DB4=0 DB3=0 DB2=0 DB1=0 DB0=1 これを表示クリアのインストラクションとして認識させたいときは、この信号を送る前に何かやらなければいけないこととか あるのでしょうか? 長くなってしまいましたが、もしわかる方がいたら回答よろしくおねがいします。

  • LCD表示の制御

    H8/3048マイコンを使ってLCDに文字を表示させたくデータシートを見ながらプログラミングしているのですが、全く表示されません。間違っている箇所があればご指摘ください。 #include "3048fone.h" /* lcd_port.h */ struct st_lcdc{ union{ /* PortB Data Register */ unsigned char BYTE;/* Byte Access*/ struct{ /* Bit Access */ unsigned char E:1;/* Enable Flag*/ unsigned char RW:1;/* R/W Flag*/ unsigned char RS:1;/* Register Select Flag */ unsigned char :1; unsigned char DR:4;/* Data Register(DR)*/ }BIT; }PBDR; }; #define LCDC (*(volatile struct st_lcdc *)0xFFFFD6) void wait(int); int main(void) { PB.DDR=0xEF; LCDC.PBDR.BYTE=0x83; LCDC.PBDR.BIT.E=0; wait(10); LCDC.PBDR.BYTE=0x83; LCDC.PBDR.BIT.E=0; wait(2); LCDC.PBDR.BYTE=0x83; LCDC.PBDR.BIT.E=0; wait(2); LCDC.PBDR.BYTE=0x82; LCDC.PBDR.BIT.E=0; wait(2); LCDC.PBDR.BYTE=0x82 LCDC.PBDR.BIT.E=0; wait(2); LCDC.PBDR.BYTE=0x80 LCDC.PBDR.BIT.E=0; wait(2); LCDC.PBDR.BYTE=0x80; LCDC.PBDR.BIT.E=0; wait(2); LCDC.PBDR.BYTE=0x88; LCDC.PBDR.BIT.E=0; wait(2); LCDC.PBDR.BYTE=0x80; LCDC.PBDR.BIT.E=0; wait(2); LCDC.PBDR.BYTE=0x81; LCDC.PBDR.BIT.E=0; wait(2); LCDC.PBDR.BYTE=0x80; LCDC.PBDR.BIT.E=0; wait(2); LCDC.PBDR.BYTE=0x86; LCDC.PBDR.BIT.E=0; wait(2); /* 書き込み開始 Hを書き込む*/ LCDC.PBDR.BYTE=0xA4; LCDC.PBDR.BIT.E=0; wait(2); LCDC.PBDR.BYTE=0xA8; LCDC.PBDR.BIT.E=0; wait(2); return(0); } void wait(int m) { int i; for(i=0;i<(m*1000);i++){} }

  • I-ODATAのLCD-A15H について

    こんばんは。LCD-A15Hを使っているのですが、解像度を 1024x768以外に設定すると、画面が激しく波いって正常に表示できなくなります。オンラインゲーム等をしたいのですが、これじゃあできません。だれか、知っている方、教えていただけませんか。一応専用のドライバを入れています。VRAMは16M(Voodoo3)です。 よろしくお願いします。

  • LCDのサブルーチンについて

    今、LCDとPICの接続方法を [PIC(下位4ビット)⇔LCD]から[PIC(上位4ビット)⇔LCD]に変更することを考えています。 LCDのサブルーチンはHi-Tech CコンパイラーのLCDのサンプルで使用されていたものを使用しています。 接続方法を変更するにあたりサブルーチンを書き換えなくてはいけないのですが、どのように書き換えればいいのかわかりません。 参考までにLCDのサブルーチンとPICとLCDとの接続方法を示した図を掲載します。 #define _LEGACY_HEADERS #define _XTAL_FREQ 4000000 #include <pic.h> #include "lcd.h" #define LCD_RS RA0 //#define LCD_RW RA4 #define LCD_EN RA1 #define LCD_DATA PORTB #define LCD_STROBE() ((LCD_EN = 1),(LCD_EN=0)) /* write a byte to the LCD in 4 bit mode */ void lcd_write(unsigned char c) { __delay_us(40); LCD_DATA = ( ( c >> 4 ) & 0x0F ); LCD_STROBE(); LCD_DATA = ( c & 0x0F ); LCD_STROBE(); } /* * Clear and home the LCD */ void lcd_clear(void) { LCD_RS = 0; lcd_write(0x1); __delay_ms(2); } /* write a string of chars to the LCD */ void lcd_puts(const char * s) { LCD_RS = 1; // write characters while(*s) lcd_write(*s++); } /* write one character to the LCD */ void lcd_putch(char c) { LCD_RS = 1; // write characters lcd_write( c ); } /* * Go to the specified position */ void lcd_goto(unsigned char pos) { LCD_RS = 0; lcd_write(0x80+pos); } /* initialise the LCD - put into 4 bit mode */ void lcd_init() { char init_value; //ADCON1 = 0x06; // Disable analog pins on PORTA init_value = 0x3; //TRISA=0; //TRISB=0; LCD_RS = 0; LCD_EN = 0; //LCD_RW = 0; __delay_ms(15); // wait 15mSec after power applied, LCD_DATA = init_value; LCD_STROBE(); __delay_ms(5); LCD_STROBE(); __delay_us(200); LCD_STROBE(); __delay_us(200); LCD_DATA = 2; // Four bit mode LCD_STROBE(); lcd_write(0x28); // Set interface length //lcd_write(0xF); // Display On, Cursor On, Cursor Blink lcd_write(0x0C); lcd_clear(); // Clear screen lcd_write(0x6); // Set entry Mode }

  • 液晶(Sperkfun社:LCD-11062)の件

    後閑哲也 著「PIC32MX活用ガイドブック」 112ページに掲載の、「6-2 カラー漢字グラフィック液晶表示器の使い方」 に則り、表題のカラー液晶の動作確認をしていますが、 バックライトが点灯しているだけで、表示しません。 記事と異なる点は、購入した液晶の型番が 後閑氏のは、「LCD-08600」で、コントローラIC型番:「S1D15G00」 (記事では、S1D15G00互換と書かれているが・・・) 私のは、「LCD-11062」で、コントローラIC型番:「S1D15G10」 (ただ、WEBの情報では、旧バージョンの、S1D15G00の場合も ありうる旨の記述もあったので、現在購入先に問合せ中ですが・・・) 私が調べた限りは、両者の違いは、バックライト用DC/DCコンバータ 周辺に使われている、インダクタの容量が、前者のは設計不良で小さく 発熱する問題を、後者では、容量を増やし改善されている点で コントロールICについては殆ど互換があると考えているのですが・・・ 私なりに、液晶初期化関数を、後者のコントロールIC用の設定値 に変更したりして試したりしたのですが 一向に表示しません。 尚、制御インタフェース:SPIの各信号タイミングは、フリーの ソフト・オシロ2で、確認しているので概ね問題ないと考えています。 (ただ、クロックを極端に下げないと表示できないので、 実際のスピードでの確認はできていませんけど・・・・) 以上のような状況なのですが、 同じような現象に遭遇された方がいらっしゃいましたら ご一報いただければ幸いに存じます。

  • 接続先の表示で無線LANがいくつか表示されるのですが

    Vistaなのですが、スタート→接続先で表示される所に無線LANのものがあるのですが、自分が使っているもの意外の知らないものがいくつかあります。 これって何ですか? 近くの家の人の無線LANの電波が入っているのでしょうか? それらに接続することはできるのでしょうか? ちなみに、表示されているのは、 ・AIR ・WARPSTARーD190D3 ・WARPSTARーD190D3ーW と書かれています。 どれもセキュリティの設定が有効なネットワークと書かれています。 やはり無理でしょうか?

  • ある値以上のデータの個数を表示させる関数は?

    25行目から下に、複数のデータがあります。 E,G,I,K,M,O,Q,S,U,W の列だけで、 値が9以上であるセルの個数を 「 B列 」 に表示させる関数はどのようになりますでしょうか? よろしくお願い致します。 下記例の場合は、 9以上の値は、 4つありますのでB列に 「 4 」 と表示させます。 --------------- 実行前   A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X 25             10    8     7     9     12     3     25     1     4     5 ・ ・ 実行後   A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X 25    4        10    8     7     9     12     3     25     1     4     5 ・  

  • H8/3048Fの外部割り込みで,割り込み処理が止まってしまいます.

    H8/3048Fの外部割り込みで,割り込み処理が止まってしまいます. 近々にH8の外部割り込み機能を動作させなければならず,困っております. 外部割り込み端子のIRQ端子を使って,立下りエッジを検出して割り込み処理を行うプログラムを作っています.しかし,回路に電源投入後は正常にメインの処理が実行され,外部入力によって割り込み処理が行われるのですが,割り込み処理実行後,メインの処理に戻らずに止まってしまいます.(このとき,再び外部入力を与えると割り込み処理のみ実行してくれます.) 外部入力は同じくH8/3048FのI/OピンからのH→L(Lの間隔は1usにしています)を立下りエッジとして入力しており,ハイパーターミナルを用いてPCからのキー入力による任意のタイミングで外部入力を与えています.IRQピンにはプルアップ抵抗を組み,電源投入後,すぐにHに安定するようにしています. コンパイラはGCC Developer Liteです. ちなみにH8初心者です.マイコンのプログラミングはPICなら多少かじっております.また,回路の知識も乏しく,皆様のお力添えを頂ければ幸いです.どうかよろしくお願い致します. 以下は作成したソースコードです.(SCI関数ははずしてあります) #include <3048.h> //割り込みサブルーチン void int_irq0 (void) { int a; a = 3; while(a--) { SCI0_OUT_s("warikomi!\r\n"); //「Warikomi!」をPCに表示 wait_ms(500); //500ms待つ } INTC.ISR.BIT.IRQ0F=0; //割り込み要求フラグクリア } //メイン関数 int main(void) { DI; P8.DDR = 0x00; SYSCR.BYTE = 0; SYSCR.BIT.SSBY = 1; //ソフトウェアスタンバイ SYSCR.BIT.STS = 7; //ソフトウェアスタンバイタイマ 使用禁止 SYSCR.BIT.UE = 1; //CCRのUIビット、ユーザービットに SYSCR.BIT.NMIEG = 1; //NMI立ち上がりエッジで割り込み要求 SYSCR.BIT.RAME = 1; //内蔵RAM有効 INTC.ISCR.BYTE = 0; INTC.ISCR.BIT.IRQ0SC = 1; //立下りエッジ INTC.IER.BIT.IRQ0E = 1; initSCI0(BR38400); //SCI0初期化 EI; SCI0_OUT_s("start!\r\n"); //電源投入して初期化したあと,「start!」をPCに表示 while(1) {   SCI0_OUT_s("waiting\r\n"); //無限ループで「waiting」を500ms毎にPCに表示   wait_ms(500); } }

  • ワンチップマイコンPICによるLCD(液晶)の制御

    PICを使ってLCD表示の実験を行っています。 最終的には、dsPIC33FJ64GP706(64pin)でLCDを利用したいと思っています。 PICの参考書籍を見ながら、例題を用いて16F873や18f2680、dsPIC30f3013など5Vで駆動するPICではLCDの表示はできました。 しかし、なぜか3.3Vで駆動する24FJ64GA002やdsPIC33FJ64GP706ではLCD上にトーフが並ぶのみで、適切な表示ができません。 このときのプログラムが、0.5秒ごとに数字をカウントアップさせるものであり、この黒いトーフもそれに従い濃淡の点滅をしていますので、何らかの信号は伝わっているような気がします。 この場合はPICを3.3Vで駆動させて、LCD電源のみを5Vで供給しています。 この点について、わかる方がありましたら教えてください。 なお、コンパイラはccs-cを使用しています。 また、回路接続や信号については、24FJ64GA002やdsPIC33FJ64GP706では、プログラム上から任意のLEDを点滅させることを確認していますので、回路上のミスはないと思います。 24FJ64GA002では、内臓レギュレーターを使う(VDD3.3V、DISVREGとVSSはGNDへ、VDDCORE/VCAPは10ufを通してGND)の設定になっています。 dsPIC33FJ64GP706もDISVREGピンはありませんがほぼ同様の設定にしてあります。コンパイルする前のLCDを表示するプログラムはどのPICもほぼ同じものを使用して、へッダーファイルやPINの番号を変更しているのみです。 すべてPORT_Bを使用しています。クロックはいずれの場合もヒューズでHSを設定し、セラロックの20MHzを使用しています