【发布时间】:2015-03-25 05:22:47
【问题描述】:
所以基本上,我正在编写代码来通过微控制器控制 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 时,我有一种感觉,这一切都错了。如何让我的方法返回每个输入字符的 HEX 值?
【问题讨论】:
-
ASCII 字符已经在内部用数字表示,所以你不必转换它们,除非你想输出它们的十六进制值而不是它们本身。 (有时我发现很难向最初不理解的人解释这个简单的想法)。
-
什么是“十六进制值”?
-
好的,所以基本上我的 sendChar 函数是这样工作的:sendChar(0x54);和 ascii hex 0x54 的相关字符出现在 LCD 屏幕上。因此,如果我理解你 Eugene,我应该简单地执行以下操作:在我的 for 循环中 sendChar(ch[i]) 将我的“字符串”中的每个字符发送到 LCD?不需要转换,因为 char 实际上是用 8 位数字表示的?
-
@John August Exactly..
-
酷,很抱歉造成误会,我花了一点时间才明白这一点,但我想我现在明白了。我试试看!