查看: 2536|回复: 1

[求助] 不再让CHipKIT Uno32寂寞 ——LCD1602显示(8线,问题解决)

[复制链接]

该用户从未签到

发表于 2012-8-8 13:11:31 | 显示全部楼层 |阅读模式
分享到:
原帖由
A670521546
发自:dev.eefocus.com
------------------------------------------------------------------------------------------------------------------------------------------
先利用手头有的,学基础吧,看到高手们发的都是比较深的,移植系统什么的,现在干不了那事,就干些自己能做的,慢慢来
当然参考了一下其他的资料。
图片什么的后面再补
现在是最基础的8线的。
还有四线的,以及Arduino里有一个库LiquidCrystal,是4位/8位并行接口LCD常用到的库,封装了很多常用的LCD功能,这些后面慢慢来研究,在学习不上
1.jpg


2.jpg

int DI=12;
int RW=11;
int DB[]={3,4,5,6,7,8,9,10};
int E=2;
unsigned char table[]={"Hello World!"};
unsigned char temp[]={"I Love UNO32"};
void LcdCommandWrite(int value)  //写命令
{
  int i=0;
  for(i=DB[0];i<=DI;i++)    //1602液晶信号识别是D7-D0(不是D0-D7),这里是用来反转信号。
  {
  digitalWrite(i,value&01);
  value>>=1;
  }
digitalWrite(E,LOW);
delayMicroseconds(1);
digitalWrite(E,HIGH);
delayMicroseconds(1);
digitalWrite(E,LOW);
delayMicroseconds(1);
}

void LcdDataWrite(int value) //写数据命令
{
  int i=0;
  digitalWrite(DI,HIGH);
  digitalWrite(RW,LOW);
  for(i=DB[0];i<=DB[7];i++)
  {
    digitalWrite(i,value&01);
    value>>=1;
  }
  digitalWrite(E,LOW);
  delayMicroseconds(1);
  digitalWrite(E,HIGH);
  delayMicroseconds(1);
  digitalWrite(E,LOW);
  delayMicroseconds(1);
}

void Init(void)  //初始化
{

  LcdCommandWrite(0x38);
  delay(20);
  LcdCommandWrite(0x38);
  delay(20);
  LcdCommandWrite(0x38);
  delay(20);
  LcdCommandWrite(0x06);
  delay(20);
  LcdCommandWrite(0x0C);
  delay(20);
  LcdCommandWrite(0x01);
  delay(20);
  LcdCommandWrite(0x80);
  delay(20);
}
void setup()
{
  int i=0;
  for(i=E;i<=DI;i++)
{
  pinMode(i,OUTPUT);
  // delay(100);
}

}
void loop()
{
  unsigned char i;
  Init();
  LcdCommandWrite(0x01);
  delay(10);
  LcdCommandWrite(0x80);
delay(5);//这个很重要,不然会出现下面我说到的问题
  for(i=0;i<13;i++)
  {
    LcdDataWrite(table);
    delay(5);
  }
  delay(10);
  LcdCommandWrite(0x80+0x40);
  delay(5);
  for(i=0;i<12;i++)
  {
    LcdDataWrite(temp);
    delay(5);
  }
  while(1);
}
  while(1);
}

这段代码有点问题是,第一个字符显示不了,所以我在数组里加了一个‘ ’来作为第一个字符,这里不知哪里有点问题,造成这样,现在找原因
现在已经解决问题了,只要在  LcdCommandWrite(0x80+0x01);后再加上一个延时delay(5);就可以了,就不会出现上面的问题,亲测。

不知道大家使用时会不会出现这个问题。
修改后代码如上,效果图:
3.jpg


回复

使用道具 举报

  • TA的每日心情
    奋斗
    2018-8-29 20:40
  • 签到天数: 1341 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2014-1-7 23:11:31 | 显示全部楼层
    多谢 学习啦!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-12-21 16:36 , Processed in 0.127941 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.