极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19180|回复: 3

关于arduino连接12864lcd的问题

[复制链接]
发表于 2016-8-29 11:12:39 | 显示全部楼层 |阅读模式
最近在做液晶屏   在用到12864LCD时照明都不显示,经过学习查找资料现经验分享给大家,希望共同进步,例程时借用别人的示波器的程序,原来的程序有点小问题无法编译,我已找到原因修改好了
1,先说lcd吧,买回来的液晶屏上面有个0Ω保险电阻应该是选择串口还是并口通讯的,默认电阻短接的时R9,按照论坛上的好多例程都不能用显示,而且PSB借口接低电平会造成整个电路的短路现象,一定要小心,翻了好多帖子在别的论坛看到有人提到这个问题了,自己从R9换到R10后能用了,但是PSB端口不能接高电平了,这应该时选择的原因,这算一个。
2,然后是关于lcd一定要接亮度调节的V0端口,接一个10K左右的滑动变阻器,调节亮度,不然屏幕白茫茫一片。
3,关于程序我就直接贴上来了
原程序    16行     Status = 64;    这句有问题,无法编译应该是  Status[i] = 64;   才对,大家注意。
下面是我修改的程序
库文件这个可以用
#include <U8glib.h> //声明库
U8GLIB_ST7920_128X64 u8g(3, 9, 8, U8G_PIN_NONE);
//声明液晶屏 3:E  8:RS  9:R/W
const int Input = A0;            //声明输入引脚
const int TimeAdd = 5;
const int TimeCdd = 2;               //声明按钮引脚
int x, y = 128;      //声明绘点坐标,初始值在液晶屏底部
int ax, ay = 128; //声明画线的前一个坐标
int Status[128]; //声明信号值储存数组
int TimeSet = 1;         //声明扫描速率变量
int delayTime = 0;     //声明扫描速率延时
void setup()
{
  for ( int i = 0; i < 128; i++)
  {
   Status[i] = 64;
  }
  pinMode(TimeAdd, INPUT);
  digitalWrite(TimeAdd, HIGH);
  pinMode(TimeCdd, INPUT);
  digitalWrite(TimeCdd, HIGH); //加载按钮引脚
}
void draw()
{
  y = map(analogRead(Input), 0, 1023, 62, 6); //获得信号值
  for (x = 0; x < 128; x++)
  {
    if (x != 127) {
      Status[x] = Status[x + 1]; //将信号数组左移
    } else {
      Status[127] = y;
    }
    u8g.drawPixel(x, Status[x]); //画点
    u8g.drawLine(x, ay, x, Status[x]); //画线
    ax = x; ay = Status[x]; //获得下一个画线坐标
  }
  //画网格
  u8g.setFont(u8g_font_4x6);  //设定字体
  u8g.drawStr(1, 5, "APE Arduino Oscilloscope V0.2");
  //绘制标题(示波器型号版本)
  u8g.drawLine(25.6,     6,   25.6,   64);  //画竖线
  u8g.drawLine(25.6 * 2,   6,   25.6 * 2, 64);
  u8g.drawLine(25.6 * 3,   6,   25.6 * 3, 64);
  u8g.drawLine(25.6 * 4,   6,   25.6 * 4, 64);
  u8g.drawLine(25.6 * 5,   6,   25.6 * 5, 64);

  u8g.drawLine(0, 35 - 15, 128, 35 - 15);  //画横线
  u8g.drawLine(0, 35,   128, 35);
  u8g.drawLine(0, 35 + 15, 128, 35 + 15);
}
void loop()
{
  u8g.firstPage();
  do {
    draw();  //绘制
  } while ( u8g.nextPage() );
  //检索按钮
  if (digitalRead(TimeAdd) == HIGH) //扫描速率减按钮
  {
    delay(50);
    TimeSet++;
    if (TimeSet == 5)
    {
      TimeSet = 4;
    }
  }
  if (digitalRead(TimeCdd) == HIGH) //扫描速率加按钮
  {
    delay(50);
    TimeSet--;
    if (TimeSet == 0)
    {
      TimeSet = 1;
    }
  }
  switch (TimeSet)    //根据按钮状态设定延时
  {
    case 1:
      delayTime = 0;
      break;
    case 2:
      delayTime = 60;
      break;
    case 3:
      delayTime = 300;
      break;
    case 4:
      delayTime = 500;
      break;
  }
  delay(delayTime);  //延时
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

 楼主| 发表于 2016-9-4 12:03:09 | 显示全部楼层
怎么都没人支持一下
回复 支持 反对

使用道具 举报

发表于 2016-10-13 13:50:45 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

发表于 2016-10-13 23:16:56 | 显示全部楼层
谢谢啦,学习ing
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-8 19:46 , Processed in 0.054110 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表