[][mobile][Homepage][BBS][Blog][YouTube][asablo]

過去の記事の検索が簡単にできるよ (・∀・) 例 ランチャー9
カスタム検索

PICプログラムの小技 printf()を使ってラクラクLCD表示2012/07/05 01:02:16



この本は唯一生き残った私のバイブル。初版が昭和60年、私のは平成7年改訂3版第11版、そして今は改訂5版まで出ている超ロングセラー本である。
いきなりC言語の本の紹介から始まったが、今回は、そのC言語の標準ライブラリ関数である
printf標準関数を使ってLCD等を表示させる方法を紹介しよう。

PICでLCDの表示部分のプログラムは、私がよく紹介している方法を例に出すと、例えば0~255の数字を表示させる場合は、

void lcd_valueout8(unsigned char temp){	//ゼロサプレス対応
	if (temp<100) {
		lcd_putch(' ');
	}else	lcd_putch(((temp / 100)%10)+0x30);//100
	if (temp<10) {
		lcd_putch(' ');
	}else	lcd_putch(((temp /  10)%10)+0x30);//10
	lcd_putch(((temp      )%10)+0x30);//1
	return;
こんな感じでコードを書く。数字が2桁、3桁と色々なフォーマットが増えれば、その都度コードを書いていた。面倒ではあるが、容量が小さくなるメリットがある。

でも、表示部分は簡単に済ませたい所。C言語は普通printf()関数が標準ライブラリ関数として用意されている。これを使わない手は無い。


PICのソースコードの先頭でstdio.hをインクルードし、



putch関数を書き込む。



putchはprintfのフォーマットと関連付けされているので、LCDでなくとも、uart(sci.h)などにも応用ができる。シリアル出力にしたければ、sci.cなどで利用している1バイト出力をputchに定義するだけでokだ。



MPLAB XC8等をフリーモードで使う場合は、浮動小数点などが使えない制約があるが、大抵のフォーマットが使える。使用方法は、一般的なC言語の本を参考にするだけでOKだ。

//LCD display (Loop forever)
while(1){
	lcd_goto(LCD_LineNumber1);
	printf("Count(10): %05d",data16); 
	lcd_goto(LCD_LineNumber2);
	printf("Count(16):  %04X",data16);
	data16++;
	delay_10ms(50);//0.5s wait
}
例は10進数と16進数を0を含めて表示させているだけであるが、これを自前で書くと結構面倒である。printfなら、こんなに簡単に表示系を記述することができる。


printfを使うと簡単に表示系ができる

動作させた例。簡単な計数などには絶大な威力を発揮するだろう。プログラム一式はホームページにて公開している。



こんな簡単なプログラムでも既に1KW以上。製品版になれば最適化されるのでもっと小さくなるだろう。最近のPICマイコンは容量が増えてきているのが多いので、printfを使って簡単にプログラムしていく方が生産性は高いと言える。





コメント

_ じゅん ― 2012/07/05 12:27:34

「はじめてのC」だなんて きゃ♪

ぜひ電車の中で、女子高生の前で読んで見て下さい。 (違

_ air_variable ― 2012/07/05 16:12:17

もれなくおっちゃん扱いされますw
私もそうですがw

この本は本当に古い本です。
いまは苦しんで覚えるC言語とかあるんですねw

_ @きよし(Akiyoshi) ― 2014/08/16 00:00:24

今まで sprintf() で同じようなことをしていました…。

この方法でputch()をオーバーライドすれば、sprintf()先のバッファサイズとかバッファオーバーフローとかに気を使う必要がなくなっていいですね!

_ air_variable ― 2014/08/17 21:59:41

@きよし(Akiyoshi)さん
どうもです。
PICの様な内部RAMが非力なデバイスでは、こちらの方が使い勝手が良いようです。
これを知ってからPICでのデバッグ効率が上がりました。
PICに限らず他のデバイスでも便利に使えると思います。

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
全角で「あ」をタイプしてください。Japanese language only.

コメント:

トラックバック





Google
www Blog HP BBS


air_variableサイトをまとめて検索 
カスタム検索
[][admin][mobile][Homepage][BBS][Blog][YouTube][asablo]