LCD12864显示问题

项目场景:

STC12C5A60S2调试LCD12864显示汉字

问题描述

每次显示汉字,第一次汉字总是显示不对

code u8 *string[4]=
{
    "床前明月光",
    "疑是地上霜",
    "举头望明月",
    "低头思故乡",
};

第一行显示总是为:
42前明月光
另外换成其他任意汉字,第一个字总是不对,后面的字有概率不对


原因分析:

一开始怀疑时序有问题,不停的去网上找别人写的例程,拿过来调试发现还是不行。
然后怀疑是KEIL编码有问题,但是调到GB2312还是老样子。
后来又怀疑是液晶屏问题,重新找了个换下还是不行。
程序发给同事,他运行正常。
然后我就想起来可能是我板子供电不正常,丢了原装适配器,只是用一根线链接的USB 5V供电,之前用示波器测试发现电源有时候波动很厉害,导致数据脚数据出错。


解决方案:

于是直接将数据脚改成推挽输出,成功。
网上教程用的都不是增强型的芯片,并不会设置IO口。由于暂时没有适配器,无法检验没有设置成推挽输出在我的开发板上是否正常。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在51单片机LCD12864液晶屏上显示图片,需要完成以下步骤: 1. 将图片转换为点阵数据 2. 定义点阵数据数组 3. 编写LCD12864液晶屏的初始化程序 4. 编写LCD12864液晶屏显示点阵数据的函数 5. 调用函数,在LCD12864液晶屏上显示图片 下面是一个简单的示例代码: ``` #include <reg51.h> #include <intrins.h> #define LCD12864_RS P2_0 #define LCD12864_RW P2_1 #define LCD12864_EN P2_2 #define LCD12864_CS1 P2_3 #define LCD12864_CS2 P2_4 #define LCD12864_RST P2_5 unsigned char code picture[] = { // 图片点阵数据 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ... }; void delay(unsigned int t) { // 延时函数 while(t--); } void lcd12864_init() { // 初始化函数 LCD12864_RST = 0; delay(100); LCD12864_RST = 1; delay(100); LCD12864_RW = 0; LCD12864_CS1 = 1; LCD12864_CS2 = 1; LCD12864_EN = 1; delay(100); LCD12864_EN = 0; delay(100); LCD12864_RS = 0; LCD12864_RW = 0; LCD12864_EN = 1; P0 = 0x3f; delay(100); LCD12864_EN = 0; delay(100); LCD12864_EN = 1; P0 = 0xc0; delay(100); LCD12864_EN = 0; delay(100); LCD12864_EN = 1; P0 = 0x01; delay(100); LCD12864_EN = 0; delay(100); LCD12864_EN = 1; P0 = 0x06; delay(100); LCD12864_EN = 0; delay(100); } void lcd12864_show(unsigned char *p) { // 显示函数 unsigned int i, j; for(i = 0; i < 8; i++) { LCD12864_RS = 0; LCD12864_RW = 0; LCD12864_EN = 1; if(i < 4) LCD12864_CS1 = 0; else LCD12864_CS2 = 0; P0 = 0xb8 + i; delay(100); LCD12864_EN = 0; delay(100); for(j = 0; j < 64; j++) { LCD12864_RS = 1; LCD12864_RW = 0; LCD12864_EN = 1; P0 = p[i * 64 + j]; delay(100); LCD12864_EN = 0; delay(100); } } LCD12864_CS1 = 1; LCD12864_CS2 = 1; } void main() { lcd12864_init(); lcd12864_show(picture); while(1); } ``` 注意,这只是一个简单的示例代码,实际应用中还需要根据具体的液晶屏型号和点阵数据格式进行相应的修改。另外,在实际使用中需要注意LCD12864液晶屏的电压和电流等参数,以免出现损坏或显示不正常的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值