Hello,
I'm new here. I have some trouble with my QC12864B LCD display.
It works fine with the "Hello World" code with configuartion: U8GLIB_ST7920_128X64_4X u8g(10);
But with my code it show nothing.
the wirering:
Can somebody help me please?
the code is:
#include <U8glib.h>
#include <PinChangeInt.h>
#include <PinChangeIntConfig.h>
U8GLIB_ST7920_128X64_4X u8g(10);
#define NO_PORTB_PINCHANGES
#define NO_PORTC_PINCHANGES
#define NO_PIN_STATE
#define TRUE 1
#define FALSE 0
#define clock 8
#define data 9
#define clock1 6
#define data1 7
#define clock2 4
#define data2 5
#define UP A0
#define ZERO A1
#define DOWN A2
#define EDIT A3
#define bit_read_time 10
unsigned char bit_timer[3];
unsigned char bit_timer_flag[3];
unsigned char bit_counter[3];
unsigned char bit_buffer[3][24];
unsigned char bit_temp[3];
unsigned long time[3];
long bit_result[3];
long bit_result_temp[3];
long bit_result_offset[3];
unsigned char Display [3] [6];
unsigned char menue = 0;
unsigned char menue_edit = 0;
unsigned char menue_edit_state;
unsigned char pinstate[4];
unsigned char error_flag = 0;
void draw(void) {
// graphic commands to redraw the complete screen should be placed here
if (error_flag == FALSE)
{ u8g.setFont(u8g_font_fub11);
//u8g.setFont(u8g_font_osb21);
u8g.drawStr(0,17 , "X");
u8g.drawStr(0,39, "Y");
u8g.drawStr(0,61 , "Z");
u8g.drawBox(96,15,2,2);
u8g.drawBox(96,37,2,2);
u8g.drawBox(96,59,2,2);
switch (menue){
case 0:
u8g.drawStr(10,18 , "*");
if (menue_edit_state == TRUE)
{ switch (menue_edit){
case 0: u8g.drawLine(112, 18, 124, 18);break;
case 1: u8g.drawLine(98, 18, 110, 18);break;
case 2: u8g.drawLine(82, 18, 94, 18);break;
case 3: u8g.drawLine(68, 18, 80, 18);break;
case 4: u8g.drawLine(54, 18, 66, 18);break;
}
}
break;
case 1:
u8g.drawStr(10,40 , "*");
if (menue_edit_state == TRUE)
{ switch (menue_edit){
case 0: u8g.drawLine(112, 40, 124, 40);break;
case 1: u8g.drawLine(98, 40, 110, 40);break;
case 2: u8g.drawLine(82, 40, 94, 40);break;
case 3: u8g.drawLine(68, 40, 80, 40);break;
case 4: u8g.drawLine(54, 40, 66, 40);break;
}
}
break;
case 2:
u8g.drawStr(10,62 , "*");
if (menue_edit_state == TRUE)
{ switch (menue_edit){
case 0: u8g.drawLine(112, 62, 124, 62);break;
case 1: u8g.drawLine(98, 62, 110, 62);break;
case 2: u8g.drawLine(82, 62, 94, 62);break;
case 3: u8g.drawLine(68, 62, 80, 62);break;
case 4: u8g.drawLine(54, 62, 66, 62);break;
}
}
break;
}
//----------------------------------------
u8g.setFont(u8g_font_fub17);
for (int i=0; i<=2;i++)
{
u8g.setPrintPos(112,17 + (i*22));
u8g.print(Display[i] [0]);
u8g.setPrintPos(98,17 + (i*22));
u8g.print(Display[i][1]);
u8g.setPrintPos(82,17 + (i*22));
u8g.print(Display[i][2]);
if (Display[i][3] == 0 && Display[i][4] == 0) u8g.drawStr(68,20 + (i*22), " ");
else {
u8g.setPrintPos(68,17 + (i*22));
u8g.print(Display[i][3]);}
if (Display[i][4] == 0 ) u8g.drawStr(54,17 + (i*22), " ");
else {
u8g.setPrintPos(54,17 + (i*22));
u8g.print(Display[i] [4]);}
if (Display[i][5] == 0) u8g.drawStr(37,15 + (i*22), " ");
else {u8g.drawStr(37,15 + (i*22), "-");}
}
//----------------------------------------
}
else {u8g.setFont(u8g_font_fub11);
u8g.drawStr(0,20 , " change to mm");
u8g.drawStr(0,40 , " and press edit");
}
}
void cal_print_number (long Zahl,unsigned char zeile)
{
unsigned char Zehntausender;
unsigned char Tausender;
unsigned char Hunderter;
unsigned char Zehner;
unsigned char Einer;
unsigned char minus;
if (Zahl < 0)
{ minus = TRUE;
Zahl = -Zahl;
}else minus= FALSE;
Zehntausender = Zahl / 10000;
Tausender = (Zahl/1000) - Zehntausender*10 ;
Hunderter = (Zahl/100) - Zehntausender*100 - Tausender*10;
Zehner = (Zahl/10) - Zehntausender*1000 - Tausender*100 - Hunderter*10;
Einer = Zahl - Zehntausender*10000 - Tausender*1000 - Hunderter*100 - Zehner*10;
Display[zeile][0] = Einer;
if ((Tausender == 0) && (Zehntausender == 0) && (Hunderter ==0 ) && (Zehner == 0))
{ Display[zeile][1] = FALSE;
}else Display[zeile][1] = Zehner;
if ((Tausender == 0) && (Zehntausender == 0) && (Hunderter ==0))
{ Display[zeile][2] = FALSE;
}else Display[zeile][2] = Hunderter;
if ((Tausender == 0) && (Zehntausender == 0))
{ Display[zeile][3] = FALSE;
}else Display[zeile][3] = Tausender;
if ((Zehntausender == 0))
{ Display[zeile][4] = FALSE;
}else Display[zeile][4] = Zehntausender;
if (minus==TRUE)
{ Display[zeile][5] = TRUE;
}else Display[zeile][5] = FALSE;
}
void convert_bit_buffer(char buffer){
long bit_result_temp = 0;
for (int_fast8_t i = 0; i < 16; i++) {
bit_result_temp = (bit_result_temp << 1) | bit_buffer[buffer][15-i];
}
if (bit_buffer [buffer][20] == TRUE) bit_result_temp = -bit_result_temp;
if (bit_buffer[buffer][23] == TRUE) error_flag = TRUE;
bit_result[buffer] = bit_result_temp;
}
void setup(void) {
pinMode(clock, INPUT); //set the pin to input
digitalWrite(clock, HIGH); //use the internal pullup resistor
pinMode(data, INPUT); //set the pin to input
digitalWrite(data, HIGH); //use the internal pullup resistor
PCintPort::attachInterrupt(clock, trigger,RISING );
pinMode(clock1, INPUT); //set the pin to input
digitalWrite(clock1, HIGH); //use the internal pullup resistor
pinMode(data1, INPUT); //set the pin to input
digitalWrite(data1, HIGH); //use the internal pullup resistor
PCintPort::attachInterrupt(clock1, trigger1,RISING );
pinMode(clock2, INPUT); //set the pin to input
digitalWrite(clock2, HIGH); //use the internal pullup resistor
pinMode(data2, INPUT); //set the pin to input
digitalWrite(data2, HIGH); //use the internal pullup resistor
PCintPort::attachInterrupt(clock2, trigger2,RISING );
pinMode(UP, INPUT); //set the pin to input
digitalWrite(UP, HIGH); //use the internal pullup resistor
pinMode(ZERO, INPUT); //set the pin to input
digitalWrite(ZERO, HIGH); //use the internal pullup resistor
pinMode(DOWN, INPUT); //set the pin to input
digitalWrite(DOWN, HIGH); //use the internal pullup resistor
pinMode(EDIT, INPUT); //set the pin to input
digitalWrite(EDIT, HIGH); //use the internal pullup resistor
// flip screen, if required
// u8g.setRot180();
// set SPI backup if required
//u8g.setHardwareBackup(u8g_backup_avr_spi);
// assign default color value
if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
u8g.setColorIndex(255); // white
}
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
u8g.setColorIndex(3); // max intensity
}
else if ( u8g.getMode() == U8G_MODE_BW ) {
u8g.setColorIndex(1); // pixel on
}
else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
u8g.setHiColorByRGB(255,255,255);
}
}
void loop(void) {
u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );
for (int i=0;i<=2;i++)
{
if ( bit_timer_flag[i] == TRUE)
{ time[i] = millis();
bit_timer_flag[i] = FALSE;
}
if (bit_read_time <= millis() - time[i]){bit_counter[i]=0; time[i] = millis();}
bit_result_temp[i] = bit_result[i]+bit_result_offset[i];
cal_print_number(bit_result_temp[i],i);
}
if (!digitalRead(EDIT) && menue_edit_state == TRUE && pinstate[0] == FALSE){ menue_edit_state = FALSE; menue_edit = 0;delay(5);pinstate[0] = TRUE;}
else if (!digitalRead(EDIT) && pinstate[0] == FALSE && menue_edit_state == FALSE)
{ menue++;
error_flag = FALSE;
if (menue >= 3) menue = 0;
delay(5);
pinstate[0] = TRUE;
}
if (!digitalRead(ZERO)&& menue_edit_state == FALSE) bit_result_offset[menue] = -bit_result[menue];
if (!digitalRead(DOWN)&& pinstate[3] == FALSE && menue_edit_state == FALSE){ bit_result_offset[menue] = -(bit_result[menue] - (bit_result[menue]/2))+ (bit_result_offset[menue]/2);pinstate[3] = TRUE;delay(5);}
if (!digitalRead(UP)&& menue_edit_state == FALSE) {menue_edit_state = TRUE; pinstate[2] = TRUE;}
if (menue_edit_state == TRUE)
{
if (!digitalRead(ZERO) && pinstate[1] == FALSE)
{ menue_edit++;
if (menue_edit >= 5) menue_edit = 0;
delay(5);
pinstate[1] = TRUE;
}
switch (menue_edit){
case 0:
if (!digitalRead(UP)&& pinstate[2] == FALSE){bit_result_offset[menue] = bit_result_offset[menue] + 1; pinstate[2] = TRUE;delay(5);}
if (!digitalRead(DOWN)&& pinstate[3] == FALSE){bit_result_offset[menue] = bit_result_offset[menue] - 1; pinstate[3] = TRUE;delay(5);}
break;
case 1:
if (!digitalRead(UP)&& pinstate[2] == FALSE){bit_result_offset[menue] = bit_result_offset[menue] + 10; pinstate[2] = TRUE;delay(5);}
if (!digitalRead(DOWN)&& pinstate[3] == FALSE){bit_result_offset[menue] = bit_result_offset[menue] - 10; pinstate[3] = TRUE;delay(5);}
break;
case 2:
if (!digitalRead(UP)&& pinstate[2] == FALSE){bit_result_offset[menue] = bit_result_offset[menue] + 100; pinstate[2] = TRUE;delay(5);}
if (!digitalRead(DOWN)&& pinstate[3] == FALSE){bit_result_offset[menue] = bit_result_offset[menue] - 100; pinstate[3] = TRUE;delay(5);}
break;
case 3:
if (!digitalRead(UP)&& pinstate[2] == FALSE){bit_result_offset[menue] = bit_result_offset[menue] + 1000; pinstate[2] = TRUE;delay(5);}
if (!digitalRead(DOWN)&& pinstate[3] == FALSE){bit_result_offset[menue] = bit_result_offset[menue] - 1000; pinstate[3] = TRUE;delay(5);}
break;
case 4:
if (!digitalRead(UP)&& pinstate[2] == FALSE){bit_result_offset[menue] = bit_result_offset[menue] + 10000; pinstate[2] = TRUE;delay(5);}
if (!digitalRead(DOWN)&& pinstate[3] == FALSE){bit_result_offset[menue] = bit_result_offset[menue] - 10000; pinstate[3] = TRUE;delay(5);}
break;
}
}
if (digitalRead(EDIT)) pinstate[0] = FALSE;
if (digitalRead(ZERO)) pinstate[1] = FALSE;
if (digitalRead(UP)) pinstate[2] = FALSE;
if (digitalRead(DOWN)) pinstate[3] = FALSE;
}
void trigger()
{
if (!digitalRead(data)) bit_temp[0] =0;
else bit_temp[0] =1;
if (bit_counter[0] == 0)
{ bit_timer_flag[0] = TRUE;
}
if (bit_counter[0] <= 24)
{ bit_buffer[0][bit_counter[0]]= bit_temp[0];
bit_counter[0]++;
}
if (bit_counter[0] >= 24){bit_counter[0]=0;time[0]=0; convert_bit_buffer(0);}
}
void trigger1()
{ if (!digitalRead(data1)) bit_temp[1] =0;
else bit_temp[1] =1;
if (bit_counter[1] == 0)
{ bit_timer_flag[1] = TRUE;
}
if (bit_counter[1] <= 24)
{ bit_buffer[1][bit_counter[1]]= bit_temp[1];
bit_counter[1]++;
}
if (bit_counter[1] >= 24){bit_counter[1]=0;time[1]=0; convert_bit_buffer(1);}
}
void trigger2()
{
if (!digitalRead(data2)) bit_temp[2] =0;
else bit_temp[2] =1;
if (bit_counter[2] == 0)
{ bit_timer_flag[2] = TRUE;
}
if (bit_counter[2] <= 24)
{ bit_buffer[2][bit_counter[2]]= bit_temp[2];
bit_counter[2]++;
}
if (bit_counter[2] >= 24){bit_counter[2]=0;time[2]=0; convert_bit_buffer(2);}
}