この本は唯一生き残った私のバイブル。初版が昭和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なら、こんなに簡単に表示系を記述することができる。
こんな簡単なプログラムでも既に1KW以上。製品版になれば最適化されるのでもっと小さくなるだろう。最近のPICマイコンは容量が増えてきているのが多いので、printfを使って簡単にプログラムしていく方が生産性は高いと言える。
最近のコメント