本帖最后由 qhzbob 于 2015-11-25 20:49 编辑
请教版主,我在这个频率测量的程序里面添加了lcd12864的显示程序,结果就不能显示了,不知道是什么原因, 单独的12864显示程序测试是通过的,12864的引脚也没有占用D2口,12864的.cpp文件如下:
#include "LCD12864RSPI.h"
extern "C"
{
#include "Arduino.h"
#include <wiring.h>
#include <inttypes.h>
#include <stdio.h> //not needed yet
#include <string.h> //needed for strlen()
#include <avr/pgmspace.h>
}
LCD12864RSPI:CD12864RSPI()
{
this->DEFAULTTIME = 80; // 80 ms default time
this->delaytime = DEFAULTTIME;
}
//*********************延时函数************************//
void LCD12864RSPI::delayns(void)
{
delayMicroseconds(delaytime);
}
void LCD12864RSPI::WriteByte(int dat)
{
digitalWrite(latchPin, HIGH);
delayns();
shiftOut(dataPin, clockPin, MSBFIRST, dat);
digitalWrite(latchPin, LOW);
}
void LCD12864RSPI::WriteCommand(int CMD)
{
int H_data,L_data;
H_data = CMD;
H_data &= 0xf0; //屏蔽低4位的数据
L_data = CMD; //xxxx0000格式
L_data &= 0x0f; //屏蔽高4位的数据
L_data <<= 4; //xxxx0000格式
WriteByte(0xf8); //RS=0,写入的是指令;
WriteByte(H_data);
WriteByte(L_data);
}
void LCD12864RSPI::WriteData(int CMD)
{
int H_data,L_data;
H_data = CMD;
H_data &= 0xf0; //屏蔽低4位的数据
L_data = CMD; //xxxx0000格式
L_data &= 0x0f; //屏蔽高4位的数据
L_data <<= 4; //xxxx0000格式
WriteByte(0xfa); //RS=1,写入的是数据
WriteByte(H_data);
WriteByte(L_data);
}
void LCD12864RSPI::Initialise()
{
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
digitalWrite(latchPin, LOW);
delayns();
WriteCommand(0x30); //功能设定控制字
WriteCommand(0x0c); //显示开关控制字
WriteCommand(0x01); //清除屏幕控制字
WriteCommand(0x06); //进入设定点控制字
}
void LCD12864RSPI::CLEAR(void)
{
WriteCommand(0x30);//
WriteCommand(0x01);//清除显示
}
void LCD12864RSPI:isplayString(int X,int Y,uchar *ptr,int dat)
{
int i;
switch(X)
{
case 0: Y|=0x80;break;
case 1: Y|=0x90;break;
case 2: Y|=0x88;break;
case 3: Y|=0x98;break;
default: break;
}
WriteCommand(Y); // 定位显示起始地址
for(i=0;i<dat;i++)
{
WriteData(ptr);//显示汉字时注意码值,连续两个码表示一个汉字
}
}
lcd的三个引脚分别是D4,D8,D9。setup函数如下:
void setup()
{
Serial.begin(57600);
// TIMSK1 = 0x01;
// TCCR1A = 0x00;
// attachInterrupt(0, interrupt, RISING);
LCDA.Initialise(); // 屏幕初始化
delay(100);
}
注释掉以上三行才会显示,到底怎么修改才可以兼容? |