单片机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);
} 加大延时试一试。 黑方块有显示吗? P0必须加上拉电阻!!!除非你不当IO用 jlhgold 发表于 2012-11-1 22:21 static/image/common/back.gif
P0必须加上拉电阻!!!除非你不当IO用
那为什么我用4个p0的口控制4位数码管的位选可以呢,我也没加上拉电阻啊??不解。。 mcu_lover 发表于 2012-11-1 21:48 static/image/common/back.gif
加大延时试一试。
总觉得不是这个问题,好吧我试试。。 xtxtt 发表于 2012-11-1 21:54 static/image/common/back.gif
黑方块有显示吗?
反正他都是亮的,有些乱码附上实物图 因为用法不一样!!!无法上拉,所以没有逻辑高! 主函数里面 for循环 很明显的错误是 j++不是j-- 还有table1[]里面只有10个字符 for 循环10次就写完了但你循环了16次 后面就可能显示乱码~ 硬件连接问题,或者软件逻辑问题,分开找试试 这个可能需要调节对比度电位器,调试时需要慢慢地左右反复调节,我也遇到过这个情况,经调节对比度电位器后就正常了. 大呵欠E 发表于 2012-11-1 22:39 static/image/common/back.gif
那为什么我用4个p0的口控制4位数码管的位选可以呢,我也没加上拉电阻啊??不解。。 ...
数码管 共阳极 低电平点亮 大呵欠E 发表于 2012-11-1 22:45 static/image/common/back.gif
反正他都是亮的,有些乱码附上实物图
看你的这2个图片
lcd是好的
这种情况我以前也遇到过
原因是lcd的那3个控制引脚接错了
初始化函数里将使能端拉低:
e=0; lycreturn 发表于 2012-11-2 09:32 static/image/common/back.gif
主函数里面 for循环 很明显的错误是 j++不是j--
嗯 对 粗心。。可是尽管改了还是不能正常显示
lxa0 发表于 2012-11-3 15:01 static/image/common/back.gif
看你的这2个图片
lcd是好的
这种情况我以前也遇到过
没接错啊,我看了 几遍,应该没错的 电压要主意,有的是5V.有的3.3 jlhgold 发表于 2012-11-1 23:23 static/image/common/back.gif
因为用法不一样!!!无法上拉,所以没有逻辑高!
加了10k的上拉电阻还是不行 是乱码啊。。给图片给你看。。到底是怎么回事????? lryxr2507 发表于 2012-11-2 15:57 static/image/common/back.gif
这个可能需要调节对比度电位器,调试时需要慢慢地左右反复调节,我也遇到过这个情况,经调节对比度电位器后就 ...
乱码的对比度调节的可以了 至少能显示一些乱码了 也算前进一步了 再接再厉就能成功了 739211964 发表于 2012-11-3 15:43 static/image/common/back.gif
初始化函数里将使能端拉低:
e=0;
不是拉了吗
你晶振用多大的?这里应该用12M的晶振,如果用其它晶振就需要从新计算延时函数.(从目前的现象来看很有可能是延时不对). lryxr2507 发表于 2012-11-5 10:29 static/image/common/back.gif
你晶振用多大的?这里应该用12M的晶振,如果用其它晶振就需要从新计算延时函数.(从目前的现象来看很有可能是 ...
好了原因是我用P0口同时控制的数码管位选的4个IO口干扰了,其次是P0口没加上拉电阻,我擦终于被我找出来了,各个模块要分开啊。。。。 jlhgold 发表于 2012-11-1 23:23 static/image/common/back.gif
因为用法不一样!!!无法上拉,所以没有逻辑高!
好了原因是我用P0口同时控制的数码管位选的4个IO口干扰了,其次是P0口没加上拉电阻,我擦终于被我找出来了,各个模块要分开啊。。。。 这都能干扰! jlhgold 发表于 2012-11-5 17:58 static/image/common/back.gif
这都能干扰!
是啊,我都不敢相信,你说共阴的数码管还会干扰,难道有电流流入。。呵呵 啊,你数码管直接接在io口上面的啊? jlhgold 发表于 2012-11-5 19:01 static/image/common/back.gif
啊,你数码管直接接在io口上面的啊?
嗯。。对啊。。本来我只想做一个温度传感器的 后来觉得太浪费单片机资源了 就又加了1602 和步进电机。。 晕 如果在做 你可以弄一个74244或者74245放中间 也可以用串转并 接数码管
页:
[1]