关于1602液晶,求住大神!
#define uchar unsigned char
#define uint unsigned int
sbit LCDRS=P2^5; //数据/命令选择端
sbit LCDRW=P2^6; //读/写选择端
sbit LCDEN=P2^7; //使能信号
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com (uchar com)
{
LCDRS=0;
LCDRW=0;
P0=com;
delay(5);
LCDEN=1;
delay(5);
LCDEN=0;
delay(5);
LCDRS=1;
LCDRW=1;
}
void init()
{
LCDEN=0;
write_com(0x38);
write_com(0x0f);
write_com(0x06);
write_com(0x80);
}
void write_data(uchar date)
{
LCDRS=1;
P0=date;
delay(5);
LCDEN=1;
delay(5);
LCDEN=0;
delay(5);
}
void main ()
{
init();
write_data('1');
delay(5);
write_data('1');
while(1);
}
结果光标向右移动了两个单位,但是没有显示11。
求解
抢我的群无多抢我的群无多群无多
OK了
这个是如何处理好的 还望分享一下经验
液晶操作前必须写命令0x80,将光标置于左上角第一个位置,再对其写入显示数据,关于写数据函数,写命令函数不用这么复杂,延时只要大于700us就可以了,最后也不用将LCDRS LCDRW置1.个人经验而已,还望指正
是不是("1")改成('1')呀。
我没有用"1"啊,用的是'1',应该是没有的吧,前者字符串后者字符
说出来可能很尴尬,在我的原理图上RD.RW.LCDEN是按顺序的结果接在单片机IO口上却不是,RD,RW位置调换了,所以没有显示数字
0X80这个我写在初始化函数里面了呀,写命令/指令函数还望兄台赐教,延时的话确实是大于700US就可以的,那个LCDRS,LCDRW也是不用置1也可以的,我刚开始不是很懂所以只能完全照着时序图写,嘿嘿,多谢指点
学习一下经验教训 搞单片看来要细心加细心了
嗯嗯
这是我用来开发1602液晶的写数据/写命令函数:
void wdat(unsigned char data)//写数据
{
RS=1;
RW=0;
EN=0;
Px=data;//写入数据
EN=1;
delay1ms(1);延时1ms,确保液晶稳定工作。
EN=0;
}
void wcmd(unsigned char cmd)
{
RS=0;
RW=0;
EN=0;
Px=cmd;
EN=1;
delay1ms(1);
EN=0;
}
在给你传授一个小技巧,每次液晶启动后,都要写一次0x80的命令,然后才可以写类似0x80+0xXX的光标定位命令,例如我要一开机就将1这个字符输出到第二个显示位置,第一个位置不显示字符,就可以先写入0x80;紧接着就写0x80+0x01将光标定位到第二个位置,1这个字符就输出到了第二个位置,如果你没有先写0x80这个命令,而是直接写0x80+0x01就会出错,可以尝试一下。
