基本上,我正在编写代码来通过微控制器控制LCD。 (atmega 32)我的主要方法中有以下内容:
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方法需要转换每个char。以下是我到目前为止的情况:
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。如何让我的方法返回每个输入char的HEX值?
答案 0 :(得分:3)
在C中,char是一个8位有符号整数,您可以使用十六进制来表示它。在以下行中,a,b和c具有相同的值,即8位整数。
char a = 0x30; //Hexadecimal representation
char b = 48; //Decimal representation
char c = '0'; //ASCII representation
我认为你需要它只是发送字符串的字符,而不是任何转换为十六进制。一个问题是你不能使用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]);
}
}