本帖最后由 吃瓜子不吐壳 于 2018-8-20 11:37 编辑
初学51单片机不久,网上买了LCD12864的液晶显示器,自带ST7920字库。可是不管我怎么折腾,就是显示不出来任何东西,检查了很多遍,接线没有问题。代码也反复修改了,就是不显示任何东西!!!
现在请大神们帮忙看下是不是代码的问题,如果代码没有问题,就是买到坏的显示器了!
#include <reg52.h>
#include <string.h>
#define u8 unsigned char
#define u16 unsigned int
sbit RS = P2^0;//1:输入内容,0:输入指令
sbit WRD = P2^1;//读写选择:1读0写
sbit E = P2^2;//E在上升沿时并行数据被写入显示器
sbit PSB = P2^3;//模式切换:1并行,0串行
void delay5ms(void)//5ms延时函数
{
unsigned char a,b;
for(b=185;b>0;b--)
for(a=12;a>0;a--);
}
void LCD12864_CMD(u8 cmd)//向显示器写入命令
{
WRD=0;//写入模式
RS=0;//写入为命令
P1=cmd;//将命令输送到并行数据线上
E=0;//提供一个上升沿脉冲
delay5ms();
E=1;
delay5ms();
E=0;
}
void LCD12864_DAT(u8 dat)//向显示器写入数据
{
WRD=0;//写入模式
RS=1;//写入为数据
P1=dat;//将命令输送到并行数据线上
E=0;//提供一个上升沿脉冲
delay5ms();
E=1;
delay5ms();
E=0;
}
void LCD12864Init()//显示器初始化
{
PSB=1;//选择并行模式
LCD12864_CMD(0x30);//选择基本指令集
LCD12864_CMD(0x0c);//打开显示,关闭游标
LCD12864_CMD(0x01);//清屏,地址归零
}
void main()
{
LCD12864Init();//初始化
LCD12864_CMD(0x80);//设定显示地址
LCD12864_DAT(‘A’);//左上角显示一个A
}
2018/08/21更新:
首先谢谢各位的热心帮助。
问题找到了,是显示器硬件的原因,和买家沟通后了解到,产品出厂时默认把背后的S和JP2触电短接了,导致只能以串行方式通讯,而商品介绍里没有说明白这一点,我用电烙铁把焊点分开,现在能用了。
|