12864液晶不显示 求前辈 帮忙看看
//串并行直接接串行 复位接高 片选信号接高//小弟检查了好几遍思维定式了求前辈 帮忙指点下
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit sid=P3^1;//数据口
sbit clk=P3^2;//时钟信号 void DelayMs(uchar n) //延时
{
uchar i;
while(n--)
{
for(i=0; i<200; i++)
_nop_();
}
}
void lcd_com(uchar dat,uchar str)
{
uint i,j,temp;
temp=str;
DelayMs(1);
//sid=0;
clk=0;
sid=1;
for(i=0;i<5;i++)
{
clk=1;
clk=0;
}
sid=0;
clk=1;
clk=0;
if(dat==1)
sid = 1;
elsesid= 0;
clk = 1;
clk = 0;
sid=0;
clk=1;
clk=0;
for(j=0;j<2;j++)
{
for(i=0;i<4;i++)
{
//temp=str;
temp <<=1;
sid=CY;
clk=1;
clk=0;
}
sid=0;
for(i=0;i<4;i++)
{
clk=1;
clk=0;
}
}
//sid=0;
}
void init()
{
lcd_com(0,0x30);
lcd_com(0,0x0c);
lcd_com(0,0x01);
lcd_com(0,0x02);
lcd_com(0,0x80);
}
void Lcd_DisplayString(uchar x,uchar y,uchar *str)
{
unsigned char temp;
switch(y)
{
case 1:x|=0x80;break;
case 2:x|=0x90;break;
case 3:x|=0x88;break;
case 4:x|=0x98;break;
default:break;
};
// lcd_com(0,0x90);//行地址:首行地址:0x80,第二行地址:0x90,第三行地址:0x88,第四行0x98
lcd_com(0,x);
temp= *str;
while(temp!=0)
{
lcd_com(1,temp);
temp=*(++str);
}
}
void main()
{
init();
Lcd_DisplayString(0,2,"大连民族学院");
while(1);
} 你用的128 64 的液晶的控制芯片是什么的啊?CS是高有效的吗?看清楚;还有你的液晶要不要调对比度的啊,很多时候是对比度 没调好显示不出来的(应该是显示了 但是看不见) 51控制的啊 我在网上找的程序我自己根据他的思想自习写的初始化是没问题的cs也没问题:'( PSB 这个很重要,串行方式PSB要接地~ :( 需要注意看看屏资料,我手头有几块屏,资料弄丢了,现在头大得很。 yuyu87 发表于 2012-3-24 09:06 static/image/common/back.gif
PSB 这个很重要,串行方式PSB要接地~
硬件连接应该没问题的因为 我在网上找的程序稍微改了下下进去就好使了然后我 根据他 的思路自己又写的上面的程序 我感觉没问题 可就是 不显示 fumenglong 发表于 2012-3-24 09:17 static/image/common/back.gif
硬件连接应该没问题的因为 我在网上找的程序稍微改了下下进去就好使了然后我 根据他 的思路自己又 ...
我大致看了下代码,我以前也遇到过
我在STC 12T的单片机上通过,换到1T的单片机上就不行了,原因就是1T直接写IO低,再写高,产生上升沿,但实际可能没有那么快,也没有上升沿,后来我在底层写字节模块上加点延时_nop_();就好了,原因是IO口没有那么快,通常500K已经很高了
在你那个for循环里要加两三个nop就好了~
不信你可以用示波器看下IO口的波形,肯定很差的~ yuyu87 发表于 2012-3-24 09:26 static/image/common/back.gif
我大致看了下代码,我以前也遇到过
我在STC 12T的单片机上通过,换到1T的单片机上就不行了,原因就是1T直 ...
谢谢大神指点 的确学了很多东西 小细节产生大问题! :@:@:@:@:@:@:@:@:@:):):)
页:
[1]