2

私は C でプログラミングし、PIC18F4455 チップと CCS コンパイラを使用しています。ここに問題があります:

コード:

    #include<18F4455.h>
    #fuses HS,NOWDT,NOPROTECT,NOLVP
    #device ICD=TRUE
    #use delay(clock=5000000)
    #include<lcd.c>  //LCD display source code
    #include<kbd_xy.c> //keypad source code
    void main(){
       char k;
       //
       //code to retrive keypad input and store in a and b values
       // 
        unsigned long c;
        unsigned int a=99;
        unsigned int b=1;
        while(b<99)
        {
             c=a*b;
             printf(lcd_putc,"%Ld",c);
             delay_ms(1000);
             lcd_putc('\f');
        }
   }

問題は、チップが 8 ビットであるため、c に格納される数値が 256 を超えることができないことです。したがって、99*1 は 099、99*2 は 198 を返しますが、99*3 は 41 を返します。99*3=297 は 256+41 などです...

私は本当の結果を得るより良い方法を探しています。それらはLCDを介して表示されるので、それぞれが数字を収容する4つの変数になった場合、それは私には問題ありません。99*3 を実行すると、c1=7、c2=9、c3=2、c4=0 などの変数が得られます。

4

1 に答える 1

2

私は自分の問題を解決しました。デフォルトintでは、CCSコンパイラで宣言されたものはすべてint8 SOであるため、解決策は非常に簡単でした。

#include<18F4455.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#device ICD=TRUE
#use delay(clock=5000000)
#include<lcd.c>  //LCD display source code
#include<kbd_xy.c> //keypad source code
void main(){
   char k;
   //
   //code to retrive keypad input and store in a and b values
   // 
    int16 c;
    int16 a=99;
    int16 b=1;
    while(b<99)
    {
         c=a*b;
         printf(lcd_putc,"%Ld",c);
         delay_ms(1000);
         lcd_putc('\f');
    }

}

于 2013-02-03T00:33:57.697 に答える