【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.20535

組み込み系の問題です。
投稿者---たか(2005/04/04 01:39:53)


Cコードからキーパッドを使って固定小数点をタイプし、その打ち込んだ全ての固定小数点とその合計を足したものをLCDにディスプレイするという問題なのですが、以下のコードを書きました。小数点をLCDにディスプレイする事は成功したんですが、その数字の足した合計をディスプレイするのにてこずってます。すいません、コードが多少長いですが、もし何か気づく点があったら指摘お願いします。


#include <stdio.h>
#include <time.h>
#include <conio.h>

#define LCD_CMD 160
#define LCD_CMD1 140
#define LCD_CMD2 6
#define CLR_HOME 1

void main(void)
{
char khar;
FILE *lcd;
unsigned char lcd_pos1=0xC3;
unsigned char lcd_pos2=0xCB;
lcd=stdprn;
setbuf(lcd,NULL);

fprintf(lcd,"%c%c",LCD_CMD,LCD_CMD1);
fprintf(lcd,"%c%c",LCD_CMD,140);
do{
rt_yield();
khar=getch();

if((x >= '0') && (x<='9'))
{
cprintf( "Sending %u ", x-'0');
}
else if ( x=='#')
{
dos_exit();
}
else if (x=='*')
{
fprintf(lcd,"%c%c",LCD_CMD,0xc);
fprintf(lcd,"%c%c",LCD_CMD,LCD_CMD2);
fprintf(lcd,"%c%c",LCD_CMD,CLR_HOME);
fprintf(lcd,"%c%c",LCD_CMD,LCD_POS);
}
}while(1);
}
{
int khar;
int sum = 0;
FILE *lcd;
unsigned char lcd_pos1=0xC3;
unsigned char lcd_pos2=0xCB;
lcd=stprn;
setbuf(lcd,NULL);
do{
rt_yield();
sum+=khar;
cprintf("%d",sum);
fprintf(lcd,"%c%c",LCD_CMD,0xc);
fprintf(lcd,"%c%c",LCD_CMD,LCD_CMD2);
fprintf(lcd,"%c%c",LCD_CMD,CLR_HOME);
fprintf(lcd,"%c%c",LCD_CMD,LCD_POS);
}while(1);
}




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:組み込み系の問題です。 20537 もぐりん 2005/04/04 08:25:43
<子記事> Re:文字・モノクロからの脱却。 20538 おでん 2005/04/04 09:15:12
<子記事> Re:組み込み系の問題です。キーパッド&LCD 20540 たか 2005/04/04 10:39:57
<子記事> Re:文字・モノクロからの脱却。 20557 おでん 2005/04/04 18:50:33
<子記事> Re:組み込み系の問題です。 20577 Craft 2005/04/06 13:49:46


No.20537

Re:組み込み系の問題です。
投稿者---もぐりん(2005/04/04 08:25:43)


質問する前に、
【掲示板ご利用上の注意】
※題名は具体的に!
※ソースの添付は「HTML変換ツール」で字下げ!
※環境(OSとコンパイラ)や症状は具体的に詳しく!
は読んでいますか?




この投稿にコメントする

削除パスワード

No.20538

Re:文字・モノクロからの脱却。
投稿者---おでん(2005/04/04 09:15:12)


#include <stdio.h>
#include <time.h>
#include <conio.h>

#define LCD_CMD 160
#define LCD_CMD1 140
#define LCD_CMD2 6
#define CLR_HOME 1

void main(void){
    char khar;
    FILE *lcd;
    unsigned char lcd_pos1=0xC3;
    unsigned char lcd_pos2=0xCB;
    lcd=stdprn;
    setbuf(lcd,NULL);

    fprintf(lcd,"%c%c",LCD_CMD,LCD_CMD1);
    fprintf(lcd,"%c%c",LCD_CMD,140);
    do{
        rt_yield();  ←何をする関数ですか?
        khar=getch();

        if((x >= '0') && (x<='9')){  ←kharとxの関係は?
                cprintf( "Sending %u ", x-'0');
            }
        else if ( x=='#'){
                dos_exit();
            }
        else if (x=='*'){
                fprintf(lcd,"%c%c",LCD_CMD,0xc);
                fprintf(lcd,"%c%c",LCD_CMD,LCD_CMD2);
                fprintf(lcd,"%c%c",LCD_CMD,CLR_HOME);
                fprintf(lcd,"%c%c",LCD_CMD,LCD_POS);
            }
    }
    while(1);
} ←ここでmain()が終わっていますが?

↓ここは実行されない
{
    int khar;
    int sum = 0;
    FILE *lcd;
    unsigned char lcd_pos1=0xC3;
    unsigned char lcd_pos2=0xCB;
    lcd=stprn;
    setbuf(lcd,NULL);
    do{
        rt_yield();  ←何をする関数ですか?
        sum+=khar;  ←kharは誰がセットするの?
        cprintf("%d",sum);
        fprintf(lcd,"%c%c",LCD_CMD,0xc);
        fprintf(lcd,"%c%c",LCD_CMD,LCD_CMD2);
        fprintf(lcd,"%c%c",LCD_CMD,CLR_HOME);
        fprintf(lcd,"%c%c",LCD_CMD,LCD_POS);
    }
    while(1);
}





この投稿にコメントする

削除パスワード

No.20540

Re:組み込み系の問題です。キーパッド&LCD
投稿者---たか(2005/04/04 10:39:57)


すいません、字下げがよく分かっておりません。これで、いいのでしょうか? OSはXPで、コンパイラはボーランド4.5です。

#include <stdio.h>
#include <time.h>
#include <conio.h>

#define LCD_CMD 160
#define LCD_CMD1 140
#define LCD_CMD2 6
#define CLR_HOME 1

void main(void)
{
char khar;
FILE *lcd; 
unsigned char lcd_pos1=0xC3;
unsigned char lcd_pos2=0xCB;
lcd=stdprn;
setbuf(lcd,NULL);

fprintf(lcd,"%c%c",LCD_CMD,LCD_CMD1);
fprintf(lcd,"%c%c",LCD_CMD,140);
do{
rt_yield();
khar=getch();

if((x >= '0') && (x<='9'))
{
cprintf( "Sending %u ", x-'0');
}
else if ( x=='#')
{
dos_exit();
}
else if (x=='*')
{
fprintf(lcd,"%c%c",LCD_CMD,0xc);
fprintf(lcd,"%c%c",LCD_CMD,LCD_CMD2);
fprintf(lcd,"%c%c",LCD_CMD,CLR_HOME);
fprintf(lcd,"%c%c",LCD_CMD,LCD_POS);
}
}while(1);
}
{
int khar;
int sum = 0;
FILE *lcd;
unsigned char lcd_pos1=0xC3;
unsigned char lcd_pos2=0xCB;
lcd=stprn; 
setbuf(lcd,NULL);
do{
rt_yield();
sum+=khar;
cprintf("%d",sum);
fprintf(lcd,"%c%c",LCD_CMD,0xc);
fprintf(lcd,"%c%c",LCD_CMD,LCD_CMD2);
fprintf(lcd,"%c%c",LCD_CMD,CLR_HOME);
fprintf(lcd,"%c%c",LCD_CMD,LCD_POS);
}while(1);
} 



    return 0;
}




この投稿にコメントする

削除パスワード

No.20541

Re:組み込み系の問題です。キーパッド&LCD
投稿者---nop(2005/04/04 11:08:22)


組み込み系云々の前に、Cの基本を勉強し直すべきでしょう。


この投稿にコメントする

削除パスワード

No.20551

Re:組み込み系の問題です。キーパッド&LCD
投稿者---たか(2005/04/04 17:00:59)


>組み込み系云々の前に、Cの基本を勉強し直すべきでしょう。

いや、このコード動きますけど・・・。


この投稿にコメントする

削除パスワード

No.20543

Re:文字・モノクロからの脱却。
投稿者---おでん(2005/04/04 12:38:04)


>OSはXPで、コンパイラはボーランド4.5です。
>

ターゲットは、MS-DOSですか?
開発用のMS-DOSの環境はないのですか?


この投稿にコメントする

削除パスワード

No.20553

Re:文字・モノクロからの脱却。
投稿者---たか(2005/04/04 17:05:43)


>>OSはXPで、コンパイラはボーランド4.5です。
>>
>
>ターゲットは、MS-DOSですか?
>開発用のMS-DOSの環境はないのですか?
はい、ターゲットはごく普通のDOSです。ただ、キーからinputした、
数字の足し算の合計をLCDに#が押されるまでsaveしていくというコードを
書きたくて、どなたか何かアイディアはないかと思ってました。


この投稿にコメントする

削除パスワード

No.20549

Re:組み込み系の問題です。キーパッド&LCD
投稿者---もぐりん(2005/04/04 14:43:08)


おでん さんの指摘が直っていないようです。
それと、自分で定義した関数はソースといっしょに提示してもらえませんか?
どこが悪いのか指摘できません。
括弧の数は合っていますか?
コンパイルしていないソースは提示しないでください。



この投稿にコメントする

削除パスワード

No.20550

Re:組み込み系の問題です。キーパッド&LCD
投稿者---Craft(2005/04/04 15:49:01)


>おでん さんの指摘が直っていないようです。
>それと、自分で定義した関数はソースといっしょに提示してもらえませんか?

rt_yield() は特定のコンパイラに存在する標準関数みたいですね。
中でなにしてるのかはわかりませんが。


この投稿にコメントする

削除パスワード

No.20552

Re:組み込み系の問題です。キーパッド&LCD
投稿者---たか(2005/04/04 17:01:23)


>おでん さんの指摘が直っていないようです。
>それと、自分で定義した関数はソースといっしょに提示してもらえませんか?
>どこが悪いのか指摘できません。
>括弧の数は合っていますか?
>コンパイルしていないソースは提示しないでください。

コンパイルしました。



この投稿にコメントする

削除パスワード

No.20554

Re:組み込み系の問題です。キーパッド&LCD
投稿者---おでん(2005/04/04 17:26:03)


>
>コンパイルしました。

一部プロトタイプ宣言等でエラーが出ていますが、
それ以外にもいっぱいありますね?

Wedit output window build: Mon Apr 4 17:18:15 2005
Warning c:\temp\aaa.c: 10 'void main(void)' is a non-ANSI definition
Error c:\temp\aaa.c: 15 undeclared identifier 'stdprn'
Error c:\temp\aaa.c: 15 operands of = have illegal types 'pointer to struct _iobuf' and 'int'
Warning c:\temp\aaa.c: 15 possible usage of stdprn before definition
Warning c:\temp\aaa.c: 21 missing prototype for rt_yield
Warning c:\temp\aaa.c: 21 Missing prototype for 'rt_yield'
Error c:\temp\aaa.c: 24 undeclared identifier 'x'
Warning c:\temp\aaa.c: 28 missing prototype for dos_exit
Warning c:\temp\aaa.c: 28 Missing prototype for 'dos_exit'
Error c:\temp\aaa.c: 34 undeclared identifier 'LCD_POS'
Warning c:\temp\aaa.c: 34 possible usage of LCD_POS before definition
Warning c:\temp\aaa.c: 24 possible usage of x before definition
Error c:\temp\aaa.c: 38 illegal return type; found 'int' expected 'void'
Warning c:\temp\aaa.c: 15 stdprn is assigned a value that is never used
Warning c:\temp\aaa.c: 14 lcd_pos2 is assigned a value that is never used
Warning c:\temp\aaa.c: 13 lcd_pos1 is assigned a value that is never used
Warning c:\temp\aaa.c: 11 khar is assigned a value that is never used
Error c:\temp\aaa.c: 39 unrecognized declaration
Warning c:\temp\aaa.c: 45 no type specified. Defaulting to int
Error c:\temp\aaa.c: 45 redeclaration of 'lcd' previously declared at c:\temp\aaa.c 42
Error c:\temp\aaa.c: 45 undeclared identifier 'stprn'
Error c:\temp\aaa.c: 45 initializer must be constant
Warning c:\temp\aaa.c: 46 no type specified. Defaulting to int
Error c:\temp\aaa.c: 46 expecting an identifier
Error c:\temp\aaa.c: 46 syntax error; found `(' expecting ')'
Error c:\temp\aaa.c: 46 skipping `(' `('
Warning c:\temp\aaa.c: 46 old-style function definition for 'setbuf'
Error c:\temp\aaa.c: 46 missing identifier
Error c:\temp\aaa.c: 46 Syntax error; missing semicolon before `)'
Error c:\temp\aaa.c: 46 skipping `)'
Error c:\temp\aaa.c: 46 conflicting argument declarations for function 'setbuf'
Error c:\temp\aaa.c: 46 redeclaration of 'setbuf' previously declared at c:\lcc\include\stdio.h 171
Error c:\temp\aaa.c: 46 syntax error; found `0' expecting '{'
Error c:\temp\aaa.c: 46 Syntax error; missing semicolon before `)'
Error c:\temp\aaa.c: 46 illegal statement termination
Error c:\temp\aaa.c: 46 too many errors
Compilation + link time:0.3 sec, Return code: 1


この投稿にコメントする

削除パスワード

No.20556

Re:文字・モノクロからの脱却。
投稿者---おでん(2005/04/04 18:34:13)


'#'が入った段階で、dos_exit()で処理を終了していますが、
合計はどこで表示させるのでしょう?
最後でよければ、dos_exit()の直前でsumの値を出力すれば良いと思います。

#include <stdio.h>
#include <time.h>
#include <conio.h>

#define LCD_CMD 160
#define LCD_CMD1 140
#define LCD_CMD2 6
#define CLR_HOME 1

/*追加*/
#define LCD_POS 9 /* 仮に */
extern FILE * stdprn ;
extern void dos_exit(void) ;
extern void rt_yield(void) ;
/**/

int main(void){
/*void main(void){ 変更   */
    char khar;
    FILE *lcd;
    /* 使ってない
    unsigned char lcd_pos1=0xC3;
    unsigned char lcd_pos2=0xCB;
    */
    lcd=stdprn;
    setbuf(lcd,NULL);

    int sum = 0; /*追加*/

    fprintf(lcd,"%c%c",LCD_CMD,LCD_CMD1);
    fprintf(lcd,"%c%c",LCD_CMD,140);
    do{
        rt_yield();
        khar=getch();

        if((khar >= '0') && (khar<='9')){
            cprintf( "Sending %u ", khar-'0');
            sum += khar - '0' ; /*追加*/
        }
        else if ( khar=='#'){
            dos_exit();
        }
        else if (khar=='*'){
            fprintf(lcd,"%c%c",LCD_CMD,0xc);
            fprintf(lcd,"%c%c",LCD_CMD,LCD_CMD2);
            fprintf(lcd,"%c%c",LCD_CMD,CLR_HOME);
            fprintf(lcd,"%c%c",LCD_CMD,LCD_POS);
        }
    }
    while(1);
/*  }
    {
        int khar;
        int sum = 0;
        FILE *lcd;
        unsigned char lcd_pos1=0xC3;
        unsigned char lcd_pos2=0xCB;
        lcd=stprn;
        setbuf(lcd,NULL);
        do{
            rt_yield();
            sum+=khar;
            cprintf("%d",sum);
            fprintf(lcd,"%c%c",LCD_CMD,0xc);
            fprintf(lcd,"%c%c",LCD_CMD,LCD_CMD2);
            fprintf(lcd,"%c%c",LCD_CMD,CLR_HOME);
            fprintf(lcd,"%c%c",LCD_CMD,LCD_POS);
        }
        while(1);
    }


*/
    return 0;
}


取りあえずこれで通るけど・・・(リンクは出来ません)
なぜそうなのか考えてみてください。

あと、コメントアウトしてある二番目のdo文ですが、どんなときにも
脱出条件を入れておきましょう。・・・一回入ったら抜けなくなるのは、
「暴走を食い止める手段がない!」ということです。


この投稿にコメントする

削除パスワード

No.20555

Re:組み込み系の問題です。キーパッド&LCD
投稿者---もぐりん(2005/04/04 17:46:19)


>コンパイルしました。

言い方が悪かったようで伝わっていないようですね。
コンパイルしてエラーメッセージが出ないでexeファイルが作成できた
ソースですか?
どうみてもあなたが提示したソースでは括弧の数が合わないはずです。

main関数の戻り値がvoidになっているのに、
return 0;
ではおかしくないですか?
それとdo-while文の中のkharと変数xはどのような関係ですか?
getchで取り込んだデータはkharに格納されているので、変数xでは
比較できないはずですよ。

return文の直前の18行は何を行っているのですか?
っていうか、なぜソースにコメントを付けないの?




この投稿にコメントする

削除パスワード

No.20558

Re:組み込み系の問題です。キーパッド&LCD
投稿者---nop(2005/04/04 18:54:10)


>コンパイルしました。

あなたは、ちゃんと他の方々のレスポンスを読み、
理解しようとしていますか?
沢山の方々が、有効な情報を提供するために、
あなたに対し疑問を投げかけているのに、
全く回答しないのは何故ですか?


それ以前に、あなたは本当に

  「掲示板ご利用上の注意」

をよく読み、理解した上でご投稿なされたのですか?


この投稿にコメントする

削除パスワード

No.20557

Re:文字・モノクロからの脱却。
投稿者---おでん(2005/04/04 18:50:33)


※マルチポスト(多重投稿)は慎んで!

「なぜ慎むか?」なら
http://www.ippo.ne.jp/g/53.html

http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%9D%E3%82%B9%E3%83%88
を読んでみてください。


この投稿にコメントする

削除パスワード

No.20559

Re:文字・モノクロからの脱却。
投稿者---REE(2005/04/04 19:43:10)


本題とは無関係ですが、タイトルが変ですよ。
(これを含めて4件・・)


この投稿にコメントする

削除パスワード

No.20560

Re:組み込み系の問題です。
投稿者---おでん(2005/04/04 19:51:55)


>本題とは無関係ですが、タイトルが変ですよ。
>(これを含めて4件・・)

申し訳ありません。
題名をうっかりそのままにしてました。
・・・なんでクリアされないんだろう?


この投稿にコメントする

削除パスワード

No.20577

Re:組み込み系の問題です。
投稿者---Craft(2005/04/06 13:49:46)


マルチポストですね。

http://cai.cs.shinshu-u.ac.jp/cgi-bin/bbs/c2/mqbbs.cgi?&MODE=MSG&NUM=197

なぜコメントついてるのにほかの掲示板にも書くんでしょう??


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧