我正在尝试为 20x2 LCD 制作一些自定义字符。我正在使用 Atmega µController 来控制具有 4 位接口(interface)的 LCD。 我对 LCD 的所有命令似乎都能正常工作(自定义字符除外)?
我创建角色的代码如下:
/***********************/
// Custom Characters
/***********************/
void LCD_CreateCustomCharacters (void)
{
// make CGRAM data available from MPU and set custom characters in CGRAM 1-5
// make CGRAM data available from MPU and set custom characters in CGRAM 1-5
LCD_cmd (0x40); //starts customization at first CGRAM place
// 0 bar character
LCD_prt (0x00);
LCD_prt (0x00);
LCD_prt (0x00);
LCD_prt (0x00);
LCD_prt (0x00);
LCD_prt (0x00);
LCD_prt (0x00);
LCD_prt (0x00);
// 1 bar character
LCD_prt (0x10);
LCD_prt (0x10);
LCD_prt (0x10);
LCD_prt (0x10);
LCD_prt (0x10);
LCD_prt (0x10);
LCD_prt (0x10);
LCD_prt (0x00);
// 2 bar character
LCD_prt (0x18);
LCD_prt (0x18);
LCD_prt (0x18);
LCD_prt (0x18);
LCD_prt (0x18);
LCD_prt (0x18);
LCD_prt (0x18);
LCD_prt (0x00);
// 3 bar character
LCD_prt (0x1C);
LCD_prt (0x1C);
LCD_prt (0x1C);
LCD_prt (0x1C);
LCD_prt (0x1C);
LCD_prt (0x1C);
LCD_prt (0x1C);
LCD_prt (0x00);
// 4 bar character
LCD_prt (0x1E);
LCD_prt (0x1E);
LCD_prt (0x1E);
LCD_prt (0x1E);
LCD_prt (0x1E);
LCD_prt (0x1E);
LCD_prt (0x1E);
LCD_prt (0x00);
//5 bar character
LCD_prt (0x1F);
LCD_prt (0x1F);
LCD_prt (0x1F);
LCD_prt (0x1F);
LCD_prt (0x1F);
LCD_prt (0x1F);
LCD_prt (0x1F);
LCD_prt (0x00);
LCD_cmd (0x80); //returns to DDRAM
}
^ 该代码似乎几乎可以完成工作,但在输出某些字符时仍然存在问题。在我的显示器上,当我尝试打印 0x1 时,它应该是一个“|”变为“||”。 其余字符工作正常。
然后我尝试使用此命令打印构造的字符:
char customs[6] = {0x5, 0x4, 0x3,0x2,0x1,'\0'};
LCD_string(customs);
代码应构造 5 个字符,用作进度条。 但它只打印出一个“||”标志和一个“|”签名?
你知道我做错了什么吗?如果您需要更多代码或信息,请随时询问! :)
顺便说一下,可以找到我编写的完整源代码here . 我添加了一张“我得到的错误字符”的图片 IMGUR LCD DISP
最佳答案
您应该查看您的初始化例程,并验证那里以及正常代码中是否满足所有时序约束。
这些显示可能需要使用相当长的延迟。微 Controller 可以立即执行一条指令,因此您需要精心设计延迟。
显示器很有趣,但您必须善待它们才能正常运行!
关于c - 将自定义字符打印到 LCD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24391150/