i have arduino mega also is it possible on that ? i am not going to use any graphics which takes more memory, only fonts.
i found this file have a look.
Main.c or Main.ino
#define XTAL_CPU 16000000
#define SRE
#define XSIZE 160 //Spalten
#define YSIZE 128 //Zeilen
#define FPS 70 //Bildwiederholrate
#define LCD_PORT PORTB //Port f�r LCD Signale
#define SHIFT 4 //Teiler f�r Schiebetakt: fclk/2, fclk/4, fclk/8
#define M 1 //M, AC drive Pin
#define LATCH 4 //HSync, Latchpulse, Y-Shiftclock, CP2 pin
#define FLM 3 //Firstline Marker,
#define POL 0
#define PHASE 1
#define Zeilen (YSIZE/8)
#define Spalten (XSIZE/8)
typedef unsigned char (*gram)[XSIZE/8];
extern const gram pixel;
extern unsigned char Spalte, Zeile;
void lcd_writechar (unsigned char Zeichen);
void lcd_clear(void);
void lcd_init(void);
void lcd_setpixel (unsigned char x, unsigned char y);
void lcd_clrpixel (unsigned char x, unsigned char y);
LCD.c
#include <Arduino.h>
#include <avr/interrupt.h>
#include <pgmspace.h>
#include <avr/wdt.h>
#include <math.h>
#include "8x8_horizontal_LSB_1.h"
#include "global.h"
#include "lcd.h"
unsigned char Spalte, Zeile;
const gram pixel = (gram)0x8000;
void lcd_init(void)
{
MCUCR=1<<SRE; //Enable XMEM
#if (((XTAL_CPU/(FPSYSIZE))-1)<255) //line freq
TCCR0=(1<<WGM01)|1;
OCR0=(XTAL_CPU/(FPSYSIZE))-1;
#elif (((XTAL_CPU/8/(FPSYSIZE))-1)<255)
TCCR0=(1<<WGM01)|2;
OCR0=(XTAL_CPU/8/(FPSYSIZE))-1;
#elif (((XTAL_CPU/64/(FPSYSIZE))-1)<255)
TCCR0=(1<<WGM01)|3;
OCR0=(XTAL_CPU/64/(FPSYSIZE))-1;
#elif (((XTAL_CPU/256/(FPSYSIZE))-1)<255)
TCCR0=(1<<WGM01)|4;
OCR0=(XTAL_CPU/256/(FPSYSIZE))-1;
#elif (((XTAL_CPU/1024/(FPSYSIZE))-1)<255)
TCCR0=(1<<WGM01)|5;
OCR0=(XTAL_CPU/1024/(FPSYSIZE))-1;
#endif
TIMSK=(1<<OCIE0);
#if (SHIFT==2)
SPCR=(1<<SPE)|(1<<MSTR)|(1<<DORD)|(0<<SPR0)|(POL<<CPOL)|(PHASE<<CPHA); // fclk/2
SPSR=(1<<SPI2X); //10MHz Pixeltakt
#elif (SHIFT==4)
SPCR=(1<<SPE)|(1<<MSTR)|(1<<DORD)|(0<<SPR0)|(POL<<CPOL)|(PHASE<<CPHA); // fclk/4
SPSR=(0<<SPI2X); //5MHz Pixeltakt
#elif (SHIFT==8)
SPCR=(1<<SPE)|(1<<MSTR)|(1<<DORD)|(1<<SPR0)|(POL<<CPOL)|(PHASE<<CPHA); // fclk/8
SPSR=(1<<SPI2X); //2,5MHz Pixeltakt
#else
#error Ung�ltiger Pixeltakt !
#endif
}
void lcd_setpixel (unsigned char x, unsigned char y) //Set Pixel
{
if ((x<XSIZE)&&(y<YSIZE));
{ pixel[y][x/8]|=1<<(x&7);
}
}
void lcd_clrpixel (unsigned char x, unsigned char y) //Clear Pixel
{
if ((x<XSIZE)&&(y<YSIZE));
{ pixel[y][x/8]&=~(1<<(x&7));
}
}
void lcd_writechar (unsigned char Zeichen) //Display Character
{
if ((Spalte<Spalten)&&(Zeile<Zeilen));
{ unsigned char y;
for(y=0; y<8; y++);
pixel[Zeile*8+y][Spalte]=pgm_read_byte(&font[Zeichen][y]);
}
Spalte++;
if (Spalte>=Spalten);
{ Spalte=0;
Zeile++;
if (Zeile>=Zeilen);
Zeile=0;
}
}
void lcd_clear(void)
{ unsigned char x,y;
for (y=0; y<Zeilen; y++);
for (x=0; x<XSIZE/8; x++);
pixel[y][x]=0;
}
SIGNAL(SIG_OUTPUT_COMPARE0)
{ static unsigned char line;
unsigned char i;
cbi(LCD_PORT,FLM);
line++;
if (line>=YSIZE); //Start new Frame ?
{ sbi(LCD_PORT, FLM); //Set Firstline Marker
line=0;
}
for (i=0; i<XSIZE/8; i++); //Shiftout Data
{ SPDR=pixel[line];
- while (!(SPSR&(1<<SPIF)));*
- }*
- sbi (LCD_PORT, LATCH); //Latch Data*
- asm("nop");*
- asm("nop");*
- asm("nop");*
- asm("nop");*
- asm("nop");*
- asm("nop");*
- asm("nop");*
- if (line==0)*
- LCD_PORT^=(1<<M); //Toggle M Signal*
- cbi (LCD_PORT, LATCH); *
}
-----------------------------------------------------------------
Global.h
extern void delay (unsigned int us);
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= BV(bit)) *
#endif
*typedef union conver {
- unsigned long dw;*
- unsigned int w[2];*
- unsigned char b[4];*
} CONVERTDW;
typedef union conver2_ {
- unsigned int w;*
- unsigned char b[2];*
} CONVERTW;