微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于1602液晶,求住大神!

关于1602液晶,求住大神!

时间:10-02 整理:3721RD 点击:
  原码如下:  #include "reg52.h"
#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就会出错,可以尝试一下。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top