伊莉討論區

標題: 問keil uvision4的程式問題 5個百位數相加 結果為4位數 [打印本頁]

作者: kkbox2323kkbox    時間: 2013-12-24 02:30 PM     標題: 問keil uvision4的程式問題 5個百位數相加 結果為4位數

本帖最後由 kkbox2323kkbox 於 2013-12-24 02:36 PM 編輯

問keil uvision4的程式問題 5個百位數相加 結果為4位數
這是ARM的
//                                                                                                         */
// Smpl_LCD_Keypad : input 3x3 keypad, output to LCD display
//
#include <stdio.h>                           
#include "NUC1xx.h"
#include "DrvSYS.h"
#include "DrvGPIO.h"
#include "scankey.h"
#include "NUC1xx-LB_002\LCD_Driver.h"
void myLCD_Disp(int num );
int pos=-1;
int total=0;
int medium=10;//10->十位數  1->個位數
int mynum=0;
int32_t main (void)
{
int tmp;
int8_t number;
char TEXT0[16]="Smpl_LCD_Keypad";
char TEXT1[16]="Keypad:        ";

UNLOCKREG();
    DrvSYS_Open(48000000); // set MCU to run at 48MHz
LOCKREG();
Initial_panel();
clr_all_panel();
OpenKeyPad();     // initialize 3x3 keypad
//print_lcd(0,TEXT0); // print title
  
while(1)
{
   number = Scankey();        // scan keypad to input
  
  if ( number != 0 ){
   DrvSYS_Delay(2000);
   while ( Scankey() != 0 );
   DrvSYS_Delay(2000);   
   myLCD_Disp( number+'0' );
   
   if ( medium == 10 ){//十位數
    total = total + 10*number;
    medium = 1;
   }else if ( medium == 1 ){//個位數
    total = total + number;
    medium = 10;
    mynum++;
    myLCD_Disp( '+' );
      }
      if ( mynum == 5 ){
    myLCD_Disp( '=' );   
    tmp = total/100;
    myLCD_Disp( '0' + tmp );
    total = (total - tmp * 100);
    tmp = total / 10;
    myLCD_Disp( '0' + tmp );
    total = (total - tmp * 10);
    myLCD_Disp( '0' + total );
   }      
    }   
}
}
void myLCD_Disp( int num )
{
  int x,y;
pos++;
y = pos % 16;
x = pos / 16;
Show_Word( x,y,num);
  DrvSYS_Delay(5000);     // delay
}

請問要改在哪裡


作者: night_moon    時間: 2013-12-27 09:58 PM

目前的程式看來應該是 五個十位數相加 結果為百位數

所以應該在
int medium=10;//10->十位數  1->個位數
調整為預設 100 , 然後會有 100 => 百位數, 10 => 十位數, 1->個位數

接著在
if ( medium == 10 ){//十位數 這個判斷式前面要多一層判斷,先判斷medium == 100
再medium == 100填入百倍的計算,再把medium改成10

在 medium == 1的判斷結束時要把medium改成100

在myLCD_Disp( '=' ); 之後要先做千位數的輸出...

這樣應該就可以完成了

作者: kkbox2323kkbox    時間: 2013-12-31 02:52 PM

night_moon 發表於 2013-12-27 09:58 PM
目前的程式看來應該是 五個十位數相加 結果為百位數

所以應該在

那要怎麼改才能"按到9才顯示答案" 就是9按鍵 等於 =按鍵
如果沒按到9按鍵就會一直加下去
求解
作者: night_moon    時間: 2013-12-31 11:02 PM

因為你的需求敘述不夠清楚~
所以無法回答你~

不清楚的地方如下:
1. 按到9才顯示答案,請問是輸入完整的百位數後按 9,還是任意時刻按 9?
   A: 123 , 234 , 345 , 9 => 即代表 123+234+345 (一定要輸完三位數,再輸入 9 才有等於的作用)
   或是
   B: 123, 234 , 345, 49 => 代表 123+234+345+4 (只要輸入到 9 就代表該數字完畢,輸出解答)
   或是
   C: 123, 234 , 345, 49 => 代表 123+234+345+490 (輸入到 9 會自動補成三位數顯示,並輸出解答)

2. 一直加上去有可能會超過四位數 => 是否允許超過四位數? 如果允許超過,最多要顯示到幾位數?或是最高要顯示什麼?

因為你現在的範例程式是一定要限制輸入固定位數,且一定有固定數量的筆數
如果要不定筆數可能由範例修改的幅度會很大,邏輯判斷也可能會有差異




歡迎光臨 伊莉討論區 (http://a17.eyny.com/) Powered by Discuz!