大呵欠E 发表于 2012-11-1 21:21:08

单片机lcd1602问题 求高人指教 好人一定好报

做了个单片机最小系统温度传感器加各种扩展电路,解决了这个又遇到那个问题,这次是1602的液晶不能正常显示,程序我觉得没问题,别人的程序我也烧写了,不过,还是不能正常显示,这是为什么呢??液晶应该是好的,我去借别人的1602也不能显示,电路这么简单我觉得也应该没问题啊,液晶应该不用加上拉电阻吧,反正我没加。。我是学生刚接触单片机,菜鸟级别,本来不想劳烦各位大神的,可自己捣鼓半天还是这样,实属无奈啊,望各位大神不吝赐教。。。送上电路图,pcb文件和程序代码。。急!!!好人好报,好人好运。。

#include<reg52.h>
#define uchar unsigned char
#define uintunsigned int
sbit rs=P1^1;
sbit rw=P1^2;
sbite=P1^3;
uchar table1[]={"i.love.you"};
uchar table2[]={"you.are.great!"};
void delay_50us(uint t)           //50us延时函数
{
       uchar j;
       for(;t>0;t--)
       for(j=19;j>0;j--);

}

void delay_50ms(uint t)          //延时50ms函数
{

uchar j;
for(;t>0;t--)
for(j=6245;j>0;j--);
}
void write_com(uchar com )
{
rs=0;
rw=0;
e=0;
P0=com;
delay_50us(10);
e=1;
delay_50us(10);
e=0;


}
void write_date(uchar dat)
{
rs=1;
rw=0;
e=0;
P0=dat;
delay_50us(10);
e=1;
delay_50us(10);
e=0;



}
void init(void)
{
delay_50us(300);
write_com(0x38);
delay_50us(100);
write_com(0x38);
delay_50us(100);
write_com(0x38);
write_com(0x38);
write_com(0x08);
write_com(0x01);
write_com(0x06);
write_com(0x0c);


}


void main()
{
uchar j;
init();
write_com(0x80);
for(j=0;j<16;j--)
{
    write_date(table1);
        delay_50us(20);


}
write_com(0x80+0x40);
for(j=0;j<16;j--)
{
    write_date(table2);
        delay_50us(20);

        }

   while(1);
}

mcu_lover 发表于 2012-11-1 21:48:24

加大延时试一试。

xtxtt 发表于 2012-11-1 21:54:14

黑方块有显示吗?

jlhgold 发表于 2012-11-1 22:21:44

P0必须加上拉电阻!!!除非你不当IO用

大呵欠E 发表于 2012-11-1 22:39:23

jlhgold 发表于 2012-11-1 22:21 static/image/common/back.gif
P0必须加上拉电阻!!!除非你不当IO用

那为什么我用4个p0的口控制4位数码管的位选可以呢,我也没加上拉电阻啊??不解。。

大呵欠E 发表于 2012-11-1 22:40:52

mcu_lover 发表于 2012-11-1 21:48 static/image/common/back.gif
加大延时试一试。

总觉得不是这个问题,好吧我试试。。

大呵欠E 发表于 2012-11-1 22:45:45

xtxtt 发表于 2012-11-1 21:54 static/image/common/back.gif
黑方块有显示吗?

反正他都是亮的,有些乱码附上实物图

jlhgold 发表于 2012-11-1 23:23:15

因为用法不一样!!!无法上拉,所以没有逻辑高!

lycreturn 发表于 2012-11-2 09:32:16

主函数里面 for循环 很明显的错误是 j++不是j--

lycreturn 发表于 2012-11-2 09:34:34

还有table1[]里面只有10个字符 for 循环10次就写完了但你循环了16次 后面就可能显示乱码~

longu 发表于 2012-11-2 14:40:53

硬件连接问题,或者软件逻辑问题,分开找试试

lryxr2507 发表于 2012-11-2 15:57:04

这个可能需要调节对比度电位器,调试时需要慢慢地左右反复调节,我也遇到过这个情况,经调节对比度电位器后就正常了.

龙格 发表于 2012-11-2 17:22:02

大呵欠E 发表于 2012-11-1 22:39 static/image/common/back.gif
那为什么我用4个p0的口控制4位数码管的位选可以呢,我也没加上拉电阻啊??不解。。 ...

数码管 共阳极 低电平点亮

lxa0 发表于 2012-11-3 15:01:52

大呵欠E 发表于 2012-11-1 22:45 static/image/common/back.gif
反正他都是亮的,有些乱码附上实物图

看你的这2个图片
lcd是好的
这种情况我以前也遇到过
原因是lcd的那3个控制引脚接错了

739211964 发表于 2012-11-3 15:43:51

初始化函数里将使能端拉低:
e=0;

大呵欠E 发表于 2012-11-4 20:24:43

lycreturn 发表于 2012-11-2 09:32 static/image/common/back.gif
主函数里面 for循环 很明显的错误是 j++不是j--

嗯 对 粗心。。可是尽管改了还是不能正常显示

大呵欠E 发表于 2012-11-4 20:25:29

lxa0 发表于 2012-11-3 15:01 static/image/common/back.gif
看你的这2个图片
lcd是好的
这种情况我以前也遇到过


没接错啊,我看了 几遍,应该没错的

5612404 发表于 2012-11-4 21:25:27

电压要主意,有的是5V.有的3.3

大呵欠E 发表于 2012-11-4 22:22:05

jlhgold 发表于 2012-11-1 23:23 static/image/common/back.gif
因为用法不一样!!!无法上拉,所以没有逻辑高!

加了10k的上拉电阻还是不行   是乱码啊。。给图片给你看。。到底是怎么回事?????

大呵欠E 发表于 2012-11-4 22:24:20

lryxr2507 发表于 2012-11-2 15:57 static/image/common/back.gif
这个可能需要调节对比度电位器,调试时需要慢慢地左右反复调节,我也遇到过这个情况,经调节对比度电位器后就 ...

乱码的对比度调节的可以了

yklstudent 发表于 2012-11-5 07:13:07

至少能显示一些乱码了 也算前进一步了 再接再厉就能成功了

大呵欠E 发表于 2012-11-5 09:42:49

739211964 发表于 2012-11-3 15:43 static/image/common/back.gif
初始化函数里将使能端拉低:
e=0;

不是拉了吗

lryxr2507 发表于 2012-11-5 10:29:07

你晶振用多大的?这里应该用12M的晶振,如果用其它晶振就需要从新计算延时函数.(从目前的现象来看很有可能是延时不对).

大呵欠E 发表于 2012-11-5 17:48:46

lryxr2507 发表于 2012-11-5 10:29 static/image/common/back.gif
你晶振用多大的?这里应该用12M的晶振,如果用其它晶振就需要从新计算延时函数.(从目前的现象来看很有可能是 ...

好了原因是我用P0口同时控制的数码管位选的4个IO口干扰了,其次是P0口没加上拉电阻,我擦终于被我找出来了,各个模块要分开啊。。。。

大呵欠E 发表于 2012-11-5 17:49:41

jlhgold 发表于 2012-11-1 23:23 static/image/common/back.gif
因为用法不一样!!!无法上拉,所以没有逻辑高!

好了原因是我用P0口同时控制的数码管位选的4个IO口干扰了,其次是P0口没加上拉电阻,我擦终于被我找出来了,各个模块要分开啊。。。。

jlhgold 发表于 2012-11-5 17:58:45

这都能干扰!

大呵欠E 发表于 2012-11-5 18:02:15

jlhgold 发表于 2012-11-5 17:58 static/image/common/back.gif
这都能干扰!

是啊,我都不敢相信,你说共阴的数码管还会干扰,难道有电流流入。。呵呵

jlhgold 发表于 2012-11-5 19:01:38

啊,你数码管直接接在io口上面的啊?

大呵欠E 发表于 2012-11-5 19:59:04

jlhgold 发表于 2012-11-5 19:01 static/image/common/back.gif
啊,你数码管直接接在io口上面的啊?

嗯。。对啊。。本来我只想做一个温度传感器的 后来觉得太浪费单片机资源了 就又加了1602 和步进电机。。

jlhgold 发表于 2012-11-5 20:04:51

晕 如果在做 你可以弄一个74244或者74245放中间 也可以用串转并 接数码管
页: [1]
查看完整版本: 单片机lcd1602问题 求高人指教 好人一定好报