2

8 ビットモードで動作するようになったキャラクタ LCD (www.cloverlcd.com/pdf/S6A0069.pdf) があります。ただし、現在 4 ビット モードで動作させようとしていますが、何も表示されていないようです。関数セット命令が書かれていないと思います。私がこれに正しい方法で取り組んでいるかどうかを誰かが確認できますか? 8 ビット コード (動作中) と 4 ビット コード (動作中) を投稿します。

     // 8 ビットの作業
    COMPortC(0x3C); //関数セット                                          
    Delay1KTCYx(10);
    COMPortC(0x0F); //ディスプレイをオンにしてカーソル設定を構成する         
    Delay1KTCYx(10);
    COMPortC(0x01); // 表示をクリア
    Delay1KTCYx(10);
    COMPortC(0x06); //インクリメント モードとインクリメント方向 (入力モード セット)
    Delay1KTCYx(10);
    COMPortC(0x02); //帰宅

       //4 ビット
    COMPortC(0x20); //関数セット                                          
    Delay1KTCYx(10);
    COMPortC(0x20); //関数セット                                          
    Delay1KTCYx(10);
    COMPortC(0x80); //関数セット                                          
    Delay1KTCYx(10);

    COMPortC(0x00); //ディスプレイをオンにしてカーソル設定を構成する         
    Delay1KTCYx(10);
    COMPortC(0xF0); //ディスプレイをオンにしてカーソル設定を構成する         
    Delay1KTCYx(10);
4

6 に答える 6

1

ある程度は問題ないように見えますが、いくつかの点について疑問があります。

1/ なぜ 4 ビット セクションに CGRAM アドレスを設定するために 0x20 を 2 回出力するのですか? 確かに、これは一度だけ必要です。

2/ 他の 2 つの書き込み (0x00 と 0xf0)、ドキュメントからはわかりません。コメントを修正して、コメントの意図を示すことができますか?

3/ 4 ビットモードに切り替えたら、他の命令 (インクリメントとホームへの復帰) をやり直す必要がありますか? モードを切り替えると、すべてのデータがリセットされる場合があります。

4/ 私が気づいたことの 1 つは、ビジー フラグが、システムがまだ別の命令を受信できないことを示していることです。それらを渡すのが速すぎる可能性があります。遅延を 10 から 100 に増やすとどうなるか。

試してみることがいくつかあります - 結果をお知らせください。

=====

応答:

返信いただきありがとうございます

1 および 2) これらの値は、データシート (www.cloverlcd.com/pdf/S6A0069.pdf) の 29 ページに基づいて記述しています。

3) その通りです。他の命令も実行する必要がありますが、今のところ、カーソルを 4 ビット モードで点滅させようとしています (したがって、最初の 2 つの命令で十分です)。

4) 100 の遅延を試しましたが、うまくいきませんでした。

悪いコメントで申し訳ありませんが、次回はより良いコードを投稿しようとします。

ありがとう

=====

編集:

私は今それがどのように機能するかを見ています。4 ビット モードでは、d7、d6、d5、d4 のみを使用しますが、すべての命令は 2 回の書き込みです (8 ビット命令を作成するため)。そのため、トリックを使用して命令 20 (8 ビット モード) または 22 (4 ビット モードでは 2020) を書き込み、どちらもモードを 4 ビットに設定します。非常に賢い、サムスン、私は感銘を受けました。

初期化シーケンス全体を実行してみてください。初期化が完了するまで、表示が完全に開始されない場合があります。

したがって、(16進数) 20,20,80,00,f0, 00,10,00,60,00,20を出力する必要があります。太字のものは、追加する必要があるものです。

また、さらに 2 つの質問をする必要があります (別の回答を投稿するのではなく、この回答へのコメントとして返信してください)。

1/ COMPortC() は実際にデータを出力する前にビジー信号をチェックしますか?

2/ 10 の遅延、ミリ秒、マイクロ秒などの単位は?

于 2008-10-30T01:12:45.217 に答える
1

あなたの4ビットがどのように接続されているかはわかりませんが、私の推測では....上位ニブル(0x * 0-星がある場所)でビットを送信しているため、下位ニブルを使用する可能性がありますまたは最下位ニブルは 0x0* になります。

COMPortCWithoutBusy(0x02);      //function set first nibble                                     
Delay1KTCYx(10);
COMPortCWithoutBusy(0x02);      //function set second nibble                                    
Delay1KTCYx(10);
BusyEnable();
Delay1KTCYx(10);
...
于 2008-10-30T08:08:28.980 に答える
0

これは、4ビットモードのより適切なコメント付きコードです。

    COMPortC(0x20); //関数は最初のニブルを設定します                                     
    Delay1KTCYx(10);
    COMPortC(0x20); //関数は2番目のニブルを設定します                                    
    Delay1KTCYx(10);
    COMPortC(0x80); //関数は3番目のニブルを設定します                                        
    Delay1KTCYx(10);

    COMPortC(0x00); //ディスプレイをオンにして、最初のニブルでカーソル設定を構成します
    Delay1KTCYx(10);
    COMPortC(0xF0); //ディスプレイをオンにして、カーソル設定を2番目のニブルに設定します
    Delay1KTCYx(10);

何が悪いのかまだわかりません。また、データシートの18ページに、AC3があることを除いて、8ビットモードのタイミング図とほぼ同じタイミング図が示されています。そのAC3はどういう意味ですか?

于 2008-10-30T01:43:07.743 に答える
0
void LCDInitialization(void)
{

    COMPortCWithoutBusy(0x20); //関数セットの最初のニブル                                     
    Delay1KTCYx(10);
    COMPortCWithoutBusy(0x20); // 関数は 2 番目のニブルを設定します                                    
    Delay1KTCYx(10);
    BusyEnable();
    Delay1KTCYx(10);

    COMPortCWithoutBusy(0x80); // 関数は 3 番目のニブルを設定します                                        
    Delay1KTCYx(10);
    BusyEnable();
    Delay1KTCYx(10);

    COMPortCWithoutBusy(0x00); // ディスプレイをオンにしてカーソル設定を構成します 最初のニブル
    Delay1KTCYx(10);
    COMPortCWithoutBusy(0xF0); //ディスプレイをオンにしてカーソル設定を構成する 2 番目のニブル
    Delay1KTCYx(10);
    BusyEnable();
    Delay1KTCYx(10);

    COMPortCWithoutBusy(0x00); //disp 最初のニブルをクリア                                       
    Delay1KTCYx(10);
    COMPortCWithoutBusy(0x10); //disp 2 番目のニブルをクリア                                  
    Delay1KTCYx(10);
    BusyEnable();
    Delay1KTCYx(10);

    COMPortCWithoutBusy(0x00); // エントリ モードの最初のニブルを設定                                       
    Delay1KTCYx(10);
    COMPortCWithoutBusy(0x60); // エントリ モードで 2 番目のニブルを設定                                  
    Delay1KTCYx(10);
    BusyEnable();
    Delay1KTCYx(10);

    COMPortCWithoutBusy(0x20); //20 最初のニブル                                       
    Delay1KTCYx(10);
    BusyEnable();
    Delay1KTCYx(10);
}
于 2008-10-30T04:33:14.077 に答える
-1

1 および 2) これらの値は、データシート (www.cloverlcd.com/pdf/S6A0069.pdf) の 29 ページに基づいて記述しています。

3) そうです、他の命令も実行する必要がありますが、今のところ、カーソルを 4 ビット モードで点滅させようとしています (したがって、最初の 2 つの命令で十分です)。

4) 100 の遅延を試しましたが、うまくいきませんでした。

于 2008-10-30T01:18:33.830 に答える