2013-08-28 49 views
-1

關於計算器25))計算器基於ATMEGA8使用AVRstudi

這裏R2將是輸出,R1將是用戶使用4x4矩陣鍵盤輸入的值(其中將包括十進制值,如12.5等),T是溫度記錄的溫度傳感器LM35。 阿爾法銅= 0.0039 阿爾法鋁= 0.0042

它應該如何工作的:

基本上將由計算器被記錄的溫度,這將給輸入T.電阻的值在25degÇ將由用戶使用鍵盤饋送。 現在鍵0-9和「。」用於輸入值。 此後當用戶在鍵盤上按下「+」鍵時,應該執行銅的公式並在LCD上顯示結果,同樣當用戶按下「 - 」時,它應該執行鋁的公式。讓我們暫時留出「*」「/」和「=」按鈕作爲備用。

進展至今:

使用我已給你發這個附件的代碼,我能夠正確地在屏幕上得到的溫度,我能看到R1的電阻值(即值25deg C)現在我不知道如何使用這些值來獲得輸出。

請幫我這個。 :)

感謝&問候, 莫希特戈亞爾

#define F_CPU 1000000UL 
#include <avr/io.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <util/delay.h> 
#include "lcd.h" 
#include "lcd.c" 
#include <math.h> 
#define KB_PORT_OUT PORTB 
#define KB_PORT_IN PINB 
void port_init(void) 
{ 

DDRB = 0x0f;  //Key-board port, higer nibble - input, lower nibble -  output 
PORTB = 0xff; 
} 
void init_devices(void) 
{ 
port_init(); 

MCUCR = 0x00; 
TIMSK = 0x00; //timer interrupt sources 
} 

void InitADC() 
{ 
ADMUX=(1<<REFS0); 
ADCSRA=(1<<ADEN)|(1<<ADPS1)|(1<<ADPS0); 

} 
uint16_t ReadADC (uint8_t ch) 
{ 
ch=ch&0b00000111; 
ADMUX|=ch; 
ADCSRA|=(1<<ADSC); 
while (! (ADCSRA & (1<<ADIF))); 
ADCSRA|=(1<<ADIF); 
return (ADC); 
} 
void Wait() 
{ 
uint8_t i; 
for (i=0;i<1;i++) 
_delay_loop_2(0); 
} 
void main() 
{ 

char Temp[3]; 
uint16_t adc_result,mV; 
int t; 
lcd_init (LCD_DISP_ON); 
lcd_clrscr(); 
InitADC(); 
lcd_gotoxy(0,0); 
lcd_puts("R1="); 
lcd_gotoxy(9,0); 
lcd_puts(",T="); 
lcd_gotoxy(15,0); 
lcd_puts("C"); 
lcd_gotoxy(0,1); 
lcd_puts("R2="); 
while(1) 
{ 
adc_result=ReadADC(0); 
mV=(int)(1000.0*5.0*(((float)adc_result)/1023.0)); 
t=(int)(mV/10); 
sprintf(Temp,"%d",t); 
lcd_gotoxy(12,0); 
lcd_puts(Temp); 
Wait(); 
unsigned char Res, upperNibble, myCharPointer, keyCode, keyPressed, j; 
int a=0, b=0, c=0, d=0, display=0; 
init_devices(); 


lcd_gotoxy(3,0); 
while(1) 
{ 
    upperNibble = 0xff; 

    for(j=0; j<4; j++) 
    { 
    _delay_ms(1); 
    KB_PORT_OUT = ~(0x01 << j); 
    _delay_ms(1);      //delay for port o/p settling 
    upperNibble = KB_PORT_IN | 0x0f; 

    if (upperNibble != 0xff) 
    { 
     _delay_ms(20);    //key debouncing delay 
     upperNibble = KB_PORT_IN | 0x0f; 
     if(upperNibble == 0xff) goto OUT; 

     keyCode = (upperNibble & 0xf0) | (0x0f & ~(0x01 << j)); 

     while (upperNibble != 0xff) 
     upperNibble = KB_PORT_IN | 0x0f; 

     _delay_ms(20);     //key debouncing delay 

     switch (keyCode)   //generating key characetr to display on LCD 
     { 
     case (0xee): keyPressed = "1"; 
     a=1; 
     b=b*10+1; 
        break; 
     case (0xed): keyPressed = "4"; 
     a=4; 
     b=b*10+4; 
        break; 
     case (0xeb): keyPressed = "7"; 
     a=7; 
     b=b*10+7; 
        break; 
     case (0xe7): keyPressed = "."; 

        break; 
     case (0xde): keyPressed = "2"; 
     a=2; 
     b=b*10+2; 
        break; 
     case (0xdd): keyPressed = "5"; 
     a=5; 
     b=b*10+5; 
        break; 
     case (0xdb): keyPressed = "8"; 
     a=8; 
     b=b*10+8; 
        break; 
     case (0xd7): keyPressed = "0"; 
     a=0; 
     b=b*10+0; 
        break; 
     case (0xbe): keyPressed = "3"; 
     a=3; 
     b=b*10+3; 
        break; 
     case (0xbd): keyPressed = "6"; 
     a=6; 
     b=b*10+6; 
        break; 
     case (0xbb): keyPressed = "9"; 
     a=9; 
     b=b*10+9; 
        break; 
     case (0xb7): keyPressed = "="; 
        break; 
     case (0x7e): keyPressed = "A"; 
        break; 
     case (0x7d): keyPressed = "B"; 
        break; 
     case (0x7b): keyPressed = "C"; 
        break; 
     case (0x77): keyPressed = "D"; 
        break; 
     default : keyPressed = "X"; 
     }//end of switch 

     lcd_puts(keyPressed); 

lcd_gotoxy(3,1); 
lcd_puts(keyPressed); 










     OUT:; 
     }//end of if 
    }//end of for 
}//end of while(1) 

return 0; 
} 

}

回答

0

一個讀取輸入方式被讀入字符數組的字符(在開關殼體塊追加使用strcat功能的keyPressed到字符數組)。然後檢查它是否在正確的格式。然後轉換成字符數組數浮起並用它計算爲question link

解釋的方式追加的keyPressed字符串:

char s[25]=""; 
strcat(s,"1") 

有一個錯誤,我注意到
更改

keypressed="1" 

keypressed='1' 
在所有這些情況下都是

。 「1」是const字符數組。 '1'是字符

或更改按鍵字符數組的類型並使用strcpy爲其分配任何字符串。

strcpy(keypressed,"1") 
+0

大家好,我的問題是相當多解決。我現在有一個問題,我的微控制器不處理浮點類型的值,所以我該怎麼辦使用INT浮點類型值的操作? –

+0

這個問題已經解決thanx所有.. 請轉移到新問題:) http://stackoverflow.com/questions/18506198/how-to-store-a-number-in-decimal-format-in-avr –

+0

如果我的答案幫助你任何你應該upvote的方式 –