FC2カウンター

現在の訪問者数

現在の閲覧者数:

カレンダー

09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

プロフィール

剣菱P

Author:剣菱P
剣菱Pと申します。
性別:男
年齢:27
二兎を追って一兎も得られないタイプ

マイコンやプログラミング、ニコニコ動画、雑記等
方向性は見えずとも、ちょっとずつ更新していく予定です!

リンクフリーです。
こんなブログでよかったらよろしくお願いしま~す。

公開メール kenbishiP@gmail.com

検索フォーム

最新記事

最新コメント

カテゴリ

メールフォーム

名前:
メール:
件名:
本文:

月別アーカイブ

最新トラックバック

リンク

ブロとも一覧

ブロとも申請フォーム

ランキング

ランキング参加中です。気が向いたらクリックしてあげてください。


にほんブログ村 その他趣味ブログへ
にほんブログ村 その他趣味ブログ 趣味の工作へ

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PIC Printf(PIC C Lite) その1 富士総合火力演習2009»

コメント

コメントの投稿













管理者にだけ表示を許可する

PIC 自作printf


前回作った自作printf関数はサイズは大きいわ、機能はショボイわで ダメダメだったので
すこーしだけ 改良しました。

lcd_v2-1.txt
↑を保存してlcd.hという名前のヘッダファイルとして保存すれば使えます。
といっても、まだまだショボイものなので使用はご自身の判断でお願いします。

サポートされていない関数などせいでなかなか苦労しました。
プログラムを書き終わってビルドしたら そんな関数知りませんよと 一蹴されることが幾度か
とくにmallocあたりが使えなかったのはショック。
僕の使い方が悪いだけなのかな・・・

改良部分


//********** LCDに文字列を表示する関数 *****************//


void lcd_printf(char *data,...){
    int kazu,keta=0,buf,i;
    char *p,moji[5],*p2;
    va_list ap;
    va_start(ap,data);
    for(p = data; *p!='\0';p++){
        if(*p == '%'){
            p++;
            switch(*p){
                case 'c':
                    lcd_data(va_arg(ap,char));
                    break;
                case 'd':
                    kazu = va_arg(ap,int);
                    buf = kazu;
                    while(1){
                        buf = buf/10;
                        keta++;
                        if(buf == 0)break;
                    }   

                    for(i=keta-1;i>=0;i--){
                        moji[i] = kazu%10 + '0';
                        kazu = kazu/10;
                    }
                    for(i=0;i<keta;i++){
                        lcd_data(moji[i]);
                    }
                    break;
                case 's':
                    p2 = va_arg(ap,char*);
                    while(*p2 != '\0'){
                        lcd_data(*p2);
                        p2++;
                    }
            }
        }
        else{
            lcd_data(*p);
        }
    }
    va_end(ap);
}



メイン関数

#include<pic.h>
#include"lcd.h"
#include"delay.h"
__CONFIG(HS & WDTDIS & PWRTDIS & UNPROTECT);


void main(){
    int c=0;
    TRISA = 0x00;
    TRISB = 0x00;
    PORTA = 0x00;
    PORTB = 0x00;

    lcd_init();
    lcd_clear();
    DelayMs(2);
    lcd_cmd(0x0c);
    while(1){
        lcd_pos(1,1);
        DelayMs(250);
        lcd_printf("count=%d",c++);
        lcd_pos(2,1);
        lcd_printf("%s","hello pic!");
    }
}




メモリの使用状況は
Memory Summary:
    Program space        used   2ECh (   748) of   400h words   ( 73.0%)
    Data space             used    21h (    33) of    44h bytes   ( 48.5%)
    EEPROM space        used     0h (     0) of    40h bytes   (  0.0%)
    Configuration bits   used     1h (     1) of     1h word    (100.0%)
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)

前回よりもだいぶサイズはすっきりした感じ、メイン関数の状態が前と少し違うので一概に比較は出来ないですが、
Data spaceは大幅に削減できたかな。ちなみに前回の状況は
Memory Summary:
    Program space        used   386h (   902) of   400h words   ( 88.1%)
    Data space               used    42h (    66) of    44h bytes   ( 97.1%)
    EEPROM space       used     0h (     0) of    40h bytes   (  0.0%)
    Configuration bits    used     1h (     1) of     1h word    (100.0%)
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)

機能面も少しだけましに、
文字列を扱う%s と 文字を扱う%c の使用が可能になりました。がオプションはつけられません。
%dもオプションなしでなら使用できます。 +-の符号はつけられません。
今サポートしているのは%d %c %s だけです。
出来れば徐々に普通のprintfに近づけていければと思いますが、どうなるかはまだわかりません。
僕の実力であまり機能を付け加えていくと、また重くて使い物にならなくなりそうなので、
実用面で必要最低限の機能になると思います。
数値はintしか受付ないので 符号と long float double くらはなんとか対応させてやりたい気分です。

[高画質で再生]

LCD テスト

[広告] VPS


スポンサーサイト

PIC Printf(PIC C Lite) その1 富士総合火力演習2009»

コメント

コメントの投稿













管理者にだけ表示を許可する


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。