|
|
最近在做液晶屏 在用到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
|