液晶12864初始化后问题

12864初始化后又操作什么?是不是就写显示数据

1)首先确保硬件电路没有问题。
2)初始化后,即可写显示数据,给LCD,然后显示出来。具体请看以下例程。
3)例程是LCD串行通信方式,主要两根数据线,只需要将以下代码存放在C文件里,放在keil或者其他编译器中编译即可。
4)若要LCD并行通信的继续追问
5)若有疑问请继续追问,知道则告知,不知则不知。

#include"reg52.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
sbit SID = P2^0; //串行:数据端;并行:读写RW
sbit SCLK = P2^1; //串行:时钟端;并行:使能端E
void delayms_lcd(uint x)
{
uchar i;
while(x--)
{
for(i=0;i<120;i++);
}
}
void SendByte_LCD(uchar byte)//传送顺序:从高位到低位
{
uchar i;
for(i=0;i<8;i++)
{
SCLK = 0; //时钟准备,上升沿有效,使一个数据传送
if(byte&0x80) //判断数据byte的最高位是不是1
{
SID = 1; //是1,将1赋值给SID,等待SCLK上升沿的到来,传送1给LCD
}
else
{
SID = 0; //不是1,则将0赋值给SID,等待SCLK上升沿的到来,传送0给LCD
}
SCLK = 1; //与前面的SCLK = 0,构成上升沿,第一个BIT的数据传送完毕。接着传送下个BIT
delayms_lcd(2);
byte<<=1; //数据左移一位,准备传送下个BIT
}
}

//发送指令函数
void SendCMD_LCD(uchar cmd)
{ // A=1读,A=0写;B=1显示的数据,B=0指令;C=0;
SendByte_LCD(0xf8);//首先写串口控制格式,1111 1 A B C (1111 1000=0xf8)
SendByte_LCD(cmd&0xf0); //取指令的高四位
SendByte_LCD(cmd<<4); //取指令的低四位
}

//发送显示数据函数
void SendDAT_LCD(uchar dat)
{ // A=1读,A=0写;B=1显示的数据,B=0指令;C=0;
SendByte_LCD(0xfa);//首先写串口控制格式,1111 1 A B C (1111 1010=0xfa)
SendByte_LCD(dat&0xf0); //取数据的高四位
SendByte_LCD(dat<<4); //取数据的低四位
}

//显示字符(含汉字)函数 //(在第几行第几列开始显示,是从0行0列开始的)
void DisplayStr_LCD(uchar row,uchar column,uchar *str)
{
uchar i;
uchar *str_error = "显示函错误 行列超出范围数学";

if(row<=3&&row>=0&&column<=8&&column>=0) //判断输入的行列是否正确
{
switch(row) //开始显示的地址或坐标即是在第几行第几列开始显示,这里的函数是从0行0列开始的
{
case 0:SendCMD_LCD(0x80|column);break;
case 1:SendCMD_LCD(0x90|column);break;
case 2:SendCMD_LCD(0x88|column);break;
case 3:SendCMD_LCD(0x98|column);break;
}
//显示的字符(含汉字)
for(i=0;*str!='\0';i++)
{
SendDAT_LCD(*str);
str++;
}
}
else //行列输入有误则在LCD上显示错误信息
{
SendCMD_LCD(0x01);
SendCMD_LCD(0x80);
for(i=0;*str_error!='\0';i++)
{
SendDAT_LCD(*str_error);
str_error++;
}
while(1);
}
}

//初始化
void Init_LCD()
{
delayms_lcd(2);
//PSB = 0; //串行模式 在硬件上将PSB直接连接低电平
SendCMD_LCD(0x30); //功能设定。基本指令集,
SendCMD_LCD(0x04); //设定进入点。显示字符,光标从左到右位移,DDRAM地址加一
SendCMD_LCD(0x0c); //显示设定。整体显示,不显示游标。
SendCMD_LCD(0x01); //清零。将DDRAM填满,20H清零,地址指针AC恢复到00H;
SendCMD_LCD(0x02); //设定DDRAM地址指针AC到00H,并且将光标移到开头原点的位置,不改变DDRAM的值。
}

void main()
{
Init_LCD(); //初始化
while(1)
{
DisplayStr_LCD(0,0,"HelloWorld"); //显示函数
DisplayStr_LCD(1,0,"你好2");
DisplayStr_LCD(2,0,"HelloWorld");
DisplayStr_LCD(3,0,"你好2");
}
}追问

用的是并行通讯。另外这

个时序图的前面能理解这个后面如何理解就是T和TAH这里如何理解。.我这个是带字库的液晶。里面有个DDRAM是什么如何操作。比如往哪个寄存器写数据就是显示汉字

追答

具体我也不清楚,这个文档可以解决你的问题。如果 你没有下载币可以找我。http://wenku.baidu.com/view/3382a426ccbff121dd368323.html

温馨提示:内容为网友见解,仅供参考
无其他回答

12864显示问题
1 液晶阴影如果电位器调不出来那就是初始化函数有问题,建议先参考此12864液晶的datasheet,或者直接缩短或延长初始化函数里边的延时时长。2 温度显示不出来有两种可能,一个是程序有问题,但你的小数部分能显示。另一个就是数据处理的问题,可能是数据在读暂存器后进行的处理出了错,导致数据格式不...

我的12864程序哪里错啦 怎么就是不出东西呢 连初始化都不对,我用的是...
先从简单的现实开始。还有就是要保证液晶是好的,和你的管脚是接正确的。曾经我们调12864弄了好久。反复的改程序还是不对,不能现实。最后用万用表测量每个管脚的电压发现是电压的问题。总之还是一步步的,慢慢来吧。问题要一个个的排除。如果是硬件的问题,一直改程序的话,也没有用的。先排除硬件问...

单片机12864液晶显示问题
chuzhi();应该是初始化吧 如果写“1”的话,应该有 write_com(0x80); \/\/0x80为显示“1”的位置 data1_com('1');应该将write_data1('1');用上面两句替换就可以了

液晶12864初始化流程问题
你好:12864的寄存器是不需要用户关心的,用户只管搭建好读写(读不是必须的)函数,然后通过写函数往12864写初始化值就行了。其次,初始化流程没有什么强制规定,按照手册来即可。至于时间,查看手册会有一个最小的写周期,只要速度不高于这个时间就可以。希望我的回答能帮助到你。

求大神指点:12864判忙,一直为忙程序卡死在那,读取数据时,读出来的一...
回答:问题可以分三种来讨论: 1、时序问题:液晶的时序,要适当加一些延时,单片机不一样,延时就不一样,自己试着做一下。 2、软件问题:液晶的读写功能时序是否满足? 程序有无错误? 3、硬件问题:液晶的忙脚会不会因为焊接的原因一直拉高? 再有就是液晶驱动芯片是否坏掉? 第一,建议你先用别人做好...

12864的问题
void lcdwc(unsigned char cmdcode){ chk_busy();_nop_();RS=0;RW=0;E=1;P1=cmdcode;delay(5);_nop_();E=0;_nop_();P1=0xff;} \/\/初始化 void lcdreset(){ delay(2000);lcdwc(0x30); \/\/选择基本指令集 lcdwc(0x30); \/\/选择8bit数据流 delay(5);lcdwc(0x0c)...

五一单片机控制12864液晶背光的问题。
sbit LED = P1 ^ 4; \/\/液晶屏背光定义(PWM控制,不能更改)\/ 函数名:PWM初始化函数(控制背光亮度)调 用:PWM_init();参 数:无 返回值:无 结 果:将PCA初始化为PWM模式,初始占空比为0 备 注:需要更多路PWM输出直接插入CCAPnH和CCAPnL即可 \/***\/ void PWM_init (void){...

51单片机LCD12864显示乱码怎么回事
你这液晶屏带不带字库啊?这是显示乱码,要么程序不对,要么取模方式不对。程序中那table是显示图形一或汉字的点阵数据吧?液晶屏的型号不同,显示图形或汉字时,取模的方式有多种,下载一个液晶屏专用的取模软件,试一下几种取模方式,看哪种取模方式取得数据能正常显示。

proteus仿真LCD12864,屏幕一直为黑,找不到原因,高分求解
proteus里的12864不需要像实际的液晶那样的有各自不同厂商的个性设置,只需要使用基本指令就够了。因此它其实初始化是很简单的,开显示就行。而实际的12864使用都是有字库的,初始化复杂。而无字库12864一般用的不多。void _L12864Init(void){LcdWriteComOrData(0,0x3f); \/\/显示开 } \/\/这个函数是...

单片机,STC芯片,写了一个12864lcd的文字显示程序,程序下载到芯片了...
void main(){ \/\/led_init();\/\/液晶初始化 ledled_init();\/\/这才是初始化的函数 while(1){ display("你好",1); \/\/液晶屏上显示“你好”2s 钟后,改为显示“好的”delayms(2000);display("好的",1);delayms(2000);} } 试试看吧,其实最好初始化下端口好一点 ...

相似回答