commentsPIC16シリーズの定番、PIC16F84Aを使用してLCDへの出力を行うプログラムです。16F84AでC言語を使用したLCD制御のサンプルは、意外と見つからないので公開しておきます。LCDは16文字x2行表示が行えるSC1602を使用します。LITEとも呼ばれています。CにはLCD制御用のライブラリがない為、プロトコルを確認してコマンド送信を自前で実装する必要があります。動作確認はPIC16F84Aで行っていますが、特殊な事はしてないので16Fシリーズなら基本的にどのチップでもそのまま動くはずです。16F84A以外のPICを使用する場合で、出力ピンがANxと共用になっている場合はピンがデジタル出力モードになっていることを確認してください。LCDのピンアサインSC1602の代表的なピンアサインは以下の通りです。基本的にこれと同じはずですが、モノによってはVccとGND(ピン1,2)が逆になっているモノも有るので、注意してください。LCDはバックライト有り/無しのものが有りますが、動作確認する上ではどちらでもかまいません。LCD接続の回路図SC1602のキャラクタLCDは、データバスの接続が8bitモードと4bitモードが有ります。今回はPIC16F84Aで、ピン数が少ないので4bitモードを使用します。LCDデータの読み書きを制御するのにR/Wピンが有りますが、これも使用しません。R/Wピンを使用すると、LCDに書き込み可能か、BusyステータスをReadすることで確認できるのですが、PICの使用ピン数を減らすために接続せず、GNDに落としておきます。R/WピンがLowだと常にWriteモードになります。するとPIC側からLCDに書き込み可能かを知ることができないのですが、そこはデータシートで定められた時間分delayをかけることで対応します。これは、LCD制御で接続ピン数を最小にしたい場合に良く取られる手法です。ピンアサインは、LCD.cの先頭のdefineで定義しています。PortBの下位4bitをLCDのDB4-7に接続それでは、プログラムのソースを確認していきます。メイン関数まずは、LCD処理の呼び出し元側のmainです。説明することが無いほどのプログラムです。}LCD制御用ライブラリ次に、ライブラリです。}実行結果プログラムの実行結果は、以下の様な感じになります。今回のプログラムは8MHz駆動させています。8MHz以外で使用する場合は_XTAL_FREQのdefineを変更してください。使用メモリ16F84はプログラムメモリが1kしかないので、C言語でプログラムするとこれだけで25%もメモリを使ってしまいます。CをLiteモードで使っており、コードサイズの最適化が行われない事も影響しています。0.0%)トラブルシューティングLCDは良く使われるデバイスでありながら、初期化シーケンスが複雑で、しかも正しく初期化出来ないとLCDは何も言ってくれないので、動作がおかしい場合は何がおかしいのかの切り分けが結構難しいです。上手く動作しない場合は、以下の点を確認してください。1.LCDの電源/GNDピンが正しいかキャラクタLCDは、製品によっては1,2ピンの割り当て(+5V,GND)が逆になっているものがあります。購入した製品のデータシートを確認し、想定した結線になっていることを確認してください。2.LCDのコントラスト調整が出来ているか実際に文字出力が出来ていてもLCDのコントラストが薄すぎで表示が見えなくなっているだけの場合があります。通常だと3番ピンがコントラスト調整ですので、10kの可変抵抗を入れてコントラスト調整をしてください。Vcc,GND,コントラスト調整だけの線を接続した場合、LCDは全てのドットが黒となる表示をするはずなので、この状態で可変抵抗を調整して、ドットが薄い黒になるようにしておきます。3.配線があっているか結線間違いは一番ありがちなミスです。プログラムで指定したピンアサインと、実際の回路があっているかをテスタで通電チェックしてください。4.駆動電圧があっているかLCDモジュールは5V駆動以外に3.3V駆動のモノも出回っています。3.3V駆動のものを5Vにつないでしまうと、壊れてしまうので注意してください。(品番でgoogle検索してデータシートを確認してください)3.3V駆動のものをつないでしまうと、コントラストを目一杯絞っても真っ黒になってしまうはずです。5.各コマンド送信後の待ち時間が有っているかLCDのデバイスによっては、コマンド送信前後の待ち時間が異なるものが有ります。今回のプログラムは有る程度の余裕を持たせていますが、出力が文字化けする場合はタイミング調整してみてください。16F84プログラミングの世界へダウンロード今回説明したプログラムのソースコードです。MPLABのプロジェクト形式になっています。world”を表示させる件でソースで理解できない部分が有り、ご教授願えれば有りがたいのですが。使われていますが、_IS_HIGHが定義されている箇所が見当たりません。//PORTBの下位をLCDのDB-7に接続と有ります。古いコンパイラーと最新のものとでは異なる点があるのでしょうか。実際私はここのプログラムを少しいじらせてもらい、使っています。コメントをキャンセルメールアドレスが公開されることはありません。29お勧め書籍webアプリのセキュリティ対策の為に。