2015-01-26 2 views
0

기본적으로 마이크로 컨트롤러를 통해 LCD를 제어하는 ​​코드를 작성하고 있습니다. (ATMEGA 32) 나는 내 주요 방법은 다음과 같습니다 여기C에서 char ASCII를 16 진수로 변환하는 방법?

unsigned char str1[9] = "It Works!"; 
sendString(str1); 

내 sendString 방법입니다 :

// Converts each char to hex and sends to LCD 
void sendString(unsigned char *string){ 


    sendCommand(0x01); // Clear screen 0x01 = 00000001 
    _delay_ms(2); 
    sendCommand(0x38); // Put in 8-bit mode 
    _delay_us(50); 
    sendCommand(0b0001110); // LCD on and set cursor off 
    _delay_us(50); 

    //For each char in string, write to the LCD 
    for(int i = 0; i < sizeof(string); i++){ 
     convertASCIIToHex(string[i]); 
    } 
} 

는 그 다음 sendString 방법은 각 문자를 변환 할 필요가있다. 여기에 내가 지금까지 가지고있는 것입니다 :

unsigned int convertASCIIToHex(unsigned char *ch) 
{ 
    int hexEquivilent[sizeof(ch)] = {0}; 

    for(int i = 0; i < sizeof(ch); i++){ 
     // TODO - HOW DO I CONVERT FROM CHAR TO HEX???? 
    } 

    return hexEquivilent; 
} 

그럼 변환을 어떻게할까요? 나는 C에 완전히 익숙하지 않고 천천히 배우고 있습니다. 어쨌든 char가 어쨌든 실제로 8 비트 int로 저장된다는 것을 읽었을 때 나는이 모든 잘못에 대해 생각하고있다. 어떻게 각 입력 문자에 대한 16 진수 값을 반환하는 내 메서드를 얻을 수 있습니까?

+0

ASCII 문자는 내부적으로 숫자로 표시되므로 변환 할 필요가 없으므로 자체 대신 16 진 값을 출력해야합니다. (때로는이 간단한 아이디어를 처음에는 이해하지 못하는 사람들에게 설명하기가 매우 어렵습니다.) –

+2

"16 진수 값"이란 무엇입니까? – Michael

+1

좋아, 기본적으로 내 sendChar 함수는 다음과 같이 작동합니다. sendChar (0x54); 와 ASCII 16 진수 0x54에 대한 연관된 ​​문자가 LCD 화면에 나타납니다. 그래서 유진을 이해한다면 간단히 다음과 같이해야합니다 : sendChar (ch [i]) for my 루프에서 각 "char"문자를 LCD로 보냅니다. char가 실제로 8 비트로 숫자로 표현되기 때문에 변환 할 필요가 없습니까? –

답변

3

C에서 char는 부호있는 8 비트 정수입니다. 16 진수로만 표현할 수 있습니다. 다음 줄에서 a, b 및 c는 동일한 값인 8 비트 정수입니다.

char a = 0x30; //Hexadecimal representation 
char b = 48; //Decimal representation 
char c = '0'; //ASCII representation 

나는 16 진수로의 변환없이 문자열의 문자를 보내는 것이 필요하다고 생각합니다. 한 가지 문제는 sizeof()를 사용하여 문자열의 길이를 가져올 수 없다는 것입니다. C에서는 문자열이 NULL로 끝나기 때문에 찾을 때까지 반복 할 수 있습니다. 이것을 시도하십시오 :

// Converts each char to hex and sends to LCD 
void sendString(unsigned char *string){ 


    sendCommand(0x01); // Clear screen 0x01 = 00000001 
    _delay_ms(2); 
    sendCommand(0x38); // Put in 8-bit mode 
    _delay_us(50); 
    sendCommand(0b0001110); // LCD on and set cursor off 
    _delay_us(50); 

    //For each char in string, write to the LCD 
    for(int i = 0; string[i]; i++){ 
     sendCommand(string[i]); 
    } 
} 
+0

고마워요! 저에게 C에 관해 배울 점이 많습니다. C#과 Java에 익숙하지 않은 것 같습니다. 작은 지연을 추가 한 후 작동하게했습니다. (32) –

관련 문제