2

我正在寻找一种将 2 个数字相乘(均为 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');
        }
   }

问题是由于芯片是8bit,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 回答