16x64 LED display Graphic & TEXT modes

Status
Not open for further replies.

gedo

Newbie level 1
Joined
Aug 10, 2006
Messages
1
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,286
atach file heve a source in mikroC & shematic

for all max chips CS /Load is same pin see shematic.

in graphic mode use 16x64 pixel any lcd editor to conver to hex code

MAIN MODULE
Code:
// Gedo 01.08.2006
#include "karakter.c"
#include "m7219.c"
#define satir1 &PortD
#define satir2 &PortB
void main() {
SPI_init();
  TRISD &= 0x00;            // LOAD
  TRISB &= 0x00;           // LOAD
  max7219_init1();        // initialize  max7219
// Text modu
ana:
kaydir("Deneme",satir1,5);   // asaya 1. satir gorunmezden gorunure
kaydir("Deneme",satir1,8);   // asaya ıkı satır arası gecıs
kaydir("Deneme",satir2,4);   // asya 2. satır gorunurden gorunmeze

kaydir("Deneme",satir2,6);   // yukarı 2. satır gorunmezden gorunure
kaydir("Deneme",satir1,7);   // yukarı ıkı satır arası gecıs
kaydir("Deneme",satir1,3);   // yukarı 1. satır gorunurden gorunmeze


kaydir("Deneme",satir1,0);   // 1. satır sabıt
kaydir("Deneme",satir2,0);   // 1. satır sabıt


kaydir("Deneme",satir1,1);   // 1. satır sagdan sola gorunmezden gorunure
kaydir("Deneme",satir2,2);   // 1. satır soldan saga gorunmezden gorun
   goto ana;
Grafik modunda
grafik(bmp);

}


MAX7219 Driver
Code:
//MAX 7219 chip_util Library
void max7219_init1() {

  PORTD &= 0x00;
  PORTB &= 0x00;           // SELECT MAX
  SPI_write(0x09);         // BCD mode for digit decoding
  SPI_write(0x00);
  PORTD |= 0xFF;
  PORTB |= 0xFF;              // DESELECT MAX

  PORTD &= 0x00;
  PORTB &= 0x00;           // SELECT MAX
  SPI_write(0x0A);
  SPI_write(0x0F);         // Segment luminosity intensity
  PORTD |= 0xFF;
  PORTB |= 0xFF;              // DESELECT MAX

  PORTD &= 0x00;
  PORTB &= 0x00;           // SELECT MAX
  SPI_write(0x0B);
  SPI_write(0x07);         // Display refresh
  PORTD |= 0xFF;
  PORTB |= 0xFF;              // DESELECT MAX

  PORTD &= 0x00;
  PORTB &= 0x00;           // SELECT MAX
  SPI_write(0x0C);
  SPI_write(0x01);         // Turn on the display
  PORTD |= 0xFF;
  PORTB |= 0xFF;              // DESELECT MAX

  PORTD &= 0x00;
  PORTB &= 0x00;           // SELECT MAX
  SPI_write(0x00);
  SPI_write(0x03);         // No test
  PORTD |= 0xFF;
  PORTB |= 0xFF;              // DESELECT MAX
}


Functions

Code:
int ii[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //port seçer
unsigned char i1,i2;
//unsigned char  img[128];
int KarakterNo, ColonSay,i;

unsigned char const bmp[128] = {
255, 255,1, 160,1, 160,5, 164,253, 167,1, 164,1, 160,
229, 161,37, 161,37, 161,61, 161,1, 160,5, 168,69, 168,
69, 168,69, 168,253, 175,1, 160,1, 160,1, 160,1, 160,
1, 160,1, 160,1, 160,1, 160,1, 160,1, 160,1, 160,1, 160,
1, 160,1, 160,1, 160,1, 160,1, 160,1, 160,1, 160,1, 160,
1, 160,1, 160,1, 160,1, 160,1, 160,1, 160,1, 160,1, 160,
1, 160,1, 160,1, 160,1, 160,1, 160,1, 160,1, 160,1, 160,
1, 160,1, 160,1, 160,1, 160,1, 160,1, 160,1, 160,1, 160,
1, 160,1, 160,255, 255};

const char KarakterTablosu[480] = {
0x00,0x00,0x00,0x00,0x00,	// 20 space
0x00,0x00,0x5f,0x00,0x00,	// 21 !
0x00,0x07,0x00,0x07,0x00,	// 22 "
0x14,0x7f,0x14,0x7f,0x14,	// 23 #
0x24,0x2a,0x7f,0x2a,0x12,	// 24 $
0x23,0x13,0x08,0x64,0x62,	// 25 %
0x36,0x49,0x55,0x22,0x50,	// 26 &
0x00,0x05,0x03,0x00,0x00,	// 27 '
0x00,0x1c,0x22,0x41,0x00,	// 28 (
0x00,0x41,0x22,0x1c,0x00,	// 29 )
0x14,0x08,0x3e,0x08,0x14,	// 2a *
0x08,0x08,0x3e,0x08,0x08,	// 2b +
0x00,0x50,0x30,0x00,0x00,	// 2c ,
0x08,0x08,0x08,0x08,0x08,	// 2d -
0x00,0x60,0x60,0x00,0x00,	// 2e .
0x20,0x10,0x08,0x04,0x02,	// 2f /
0x3e,0x51,0x49,0x45,0x3e,	// 30 0
0x00,0x42,0x7f,0x40,0x00,	// 31 1
0x42,0x61,0x51,0x49,0x46,	// 32 2
0x21,0x41,0x45,0x4b,0x31,	// 33 3
0x18,0x14,0x12,0x7f,0x10,	// 34 4
0x27,0x45,0x45,0x45,0x39,	// 35 5
0x3c,0x4a,0x49,0x49,0x30,	// 36 6
0x01,0x71,0x09,0x05,0x03,	// 37 7
0x36,0x49,0x49,0x49,0x36,	// 38 8
0x06,0x49,0x49,0x29,0x1e,	// 39 9
0x00,0x36,0x36,0x00,0x00,	// 3a :
0x00,0x56,0x36,0x00,0x00,	// 3b ;
0x08,0x14,0x22,0x41,0x00,	// 3c <
0x14,0x14,0x14,0x14,0x14,	// 3d =
0x00,0x41,0x22,0x14,0x08,	// 3e >
0x02,0x01,0x51,0x09,0x06,	// 3f ?
0x32,0x49,0x79,0x41,0x3e,	// 40 @
0x7e,0x11,0x11,0x11,0x7e,	// 41 A
0x7f,0x49,0x49,0x49,0x36,	// 42 B
0x3e,0x41,0x41,0x41,0x22,	// 43 C
0x7f,0x41,0x41,0x22,0x1c,	// 44 D
0x7f,0x49,0x49,0x49,0x41,	// 45 E
0x7f,0x09,0x09,0x09,0x01,	// 46 F
0x3e,0x41,0x49,0x49,0x7a,	// 47 G
0x7f,0x08,0x08,0x08,0x7f,	// 48 H
0x00,0x41,0x7f,0x41,0x00,	// 49 I
0x20,0x40,0x41,0x3f,0x01,	// 4a J
0x7f,0x08,0x14,0x22,0x41,	// 4b K
0x7f,0x40,0x40,0x40,0x40,	// 4c L
0x7f,0x02,0x0c,0x02,0x7f,	// 4d M
0x7f,0x04,0x08,0x10,0x7f,	// 4e N
0x3e,0x41,0x41,0x41,0x3e,	// 4f O
0x7f,0x09,0x09,0x09,0x06,	// 50 P
0x3e,0x41,0x51,0x21,0x5e,	// 51 Q
0x7f,0x09,0x19,0x29,0x46,	// 52 R
0x46,0x49,0x49,0x49,0x31,	// 53 S
0x01,0x01,0x7f,0x01,0x01,	// 54 T
0x3f,0x40,0x40,0x40,0x3f,	// 55 U
0x1f,0x20,0x40,0x20,0x1f,	// 56 V
0x3f,0x40,0x38,0x40,0x3f,	// 57 W
0x63,0x14,0x08,0x14,0x63,	// 58 X
0x07,0x08,0x70,0x08,0x07,	// 59 Y
0x61,0x51,0x49,0x45,0x43,	// 5a Z
0x00,0x7f,0x41,0x41,0x00,	// 5b [
0x02,0x04,0x08,0x10,0x20,	// 5c Yen Currency Sign
0x00,0x41,0x41,0x7f,0x00,	// 5d ]
0x04,0x02,0x01,0x02,0x04,	// 5e ^
0x40,0x40,0x40,0x40,0x40,	// 5f _
0x00,0x01,0x02,0x04,0x00,	// 60 `
0x20,0x54,0x54,0x54,0x78,	// 61 a
0x7f,0x48,0x44,0x44,0x38,	// 62 b
0x38,0x44,0x44,0x44,0x20,	// 63 c
0x38,0x44,0x44,0x48,0x7f,	// 64 d
0x38,0x54,0x54,0x54,0x18,	// 65 e
0x08,0x7e,0x09,0x01,0x02,	// 66 f
0x0c,0x52,0x52,0x52,0x3e,	// 67 g
0x7f,0x08,0x04,0x04,0x78,	// 68 h
0x00,0x44,0x7d,0x40,0x00,	// 69 i
0x20,0x40,0x44,0x3d,0x00,	// 6a j
0x7f,0x10,0x28,0x44,0x00,	// 6b k
0x00,0x41,0x7f,0x40,0x00,	// 6c l
0x7c,0x04,0x18,0x04,0x78,	// 6d m
0x7c,0x08,0x04,0x04,0x78,	// 6e n
0x38,0x44,0x44,0x44,0x38,	// 6f o
0x7c,0x14,0x14,0x14,0x08,	// 70 p
0x08,0x14,0x14,0x18,0x7c,	// 71 q
0x7c,0x08,0x04,0x04,0x08,	// 72 r
0x48,0x54,0x54,0x54,0x20,	// 73 s
0x04,0x3f,0x44,0x40,0x20,	// 74 t
0x3c,0x40,0x40,0x20,0x7c,	// 75 u
0x1c,0x20,0x40,0x20,0x1c,	// 76 v
0x3c,0x40,0x30,0x40,0x3c,	// 77 w
0x44,0x28,0x10,0x28,0x44,	// 78 x
0x0c,0x50,0x50,0x50,0x3c,	// 79 y
0x44,0x64,0x54,0x4c,0x44,	// 7a z
0x00,0x08,0x36,0x41,0x00,	// 7b <
0x00,0x00,0x7f,0x00,0x00,	// 7c |
0x00,0x41,0x36,0x08,0x00,	// 7d >
0x10,0x08,0x08,0x10,0x08,	// 7e Right Arrow 	->
0x78,0x46,0x41,0x46,0x78};	// 7f Left Arrow	<-
///////////////////////// GRAFİK MODU //////////////////////////////////////////
void grafik(unsigned char const img[128]){
int i;
int iii[8]={0,8,16,24,32,40,48,56}; // katlama sayar
for(i=1;i<9;i++){            //matrix sayar
 for(i1=1;i1<9;i1++){        //colon sayar
    PORTD=ii[i-1];
     SPI_write(i1);           // Sutun
     SPI_write(img[(i1-1)*2+iii[i-1]*2]);  // satır
    PORTD=0xff;
}}
for(i=1;i<9;i++){            //matrix sayar
 for(i1=1;i1<9;i1++){        //colon sayar
    PORTB=ii[i-1];
     SPI_write(i1);           // Sutun
     SPI_write(img[(i1*2)-1+iii[i-1]*2]);  // satır
    PORTB=0xff;
}}
}
//////////////////// KAYDIRMA ///////////////////////////////
void kaydir(const char *sdata,char *Portx,int efekt){
/************************************************************
kaydır fonksiyonunun parametreleri
sabit  = 0
saga   = 1  sagdan sola gorunmezden gorunure
sola   = 2  soldan saga gorunmezden gorunmeze
yukarı  = 3  gorunurden gorunmeze
asaya  = 4  gorunurden gorunmeze
asaya  = 5  gorunmezden gorunure
yukarı = 6  gorunmezden gorunure
***************************************
iki satir geçişli  parametreleri
***************************************
yukari =7 asadan yukarı satıra gecis
asaya  =8 yukarıdan asagıkı satıra gecis
 altta arayın içine girilen textin hexleri yükleniyor
************************************************************/
char Karakter;
char img1[64];
int tekrar;
i=1;
while(*sdata) {
Karakter=*sdata++;

	if ((Karakter<0x20)||(Karakter>0x7f)) {return;}
	KarakterNo = ((5*Karakter) - 160);
	for (ColonSay=1;ColonSay<6;ColonSay++)
	{
         img1[i]=KarakterTablosu[KarakterNo];
         KarakterNo++;
         i++;
}
img1[i]=0;
i++;
}

/////////////////////// efekt parametresine göre işlem yapacak /////////////////

if(efekt==0) tekrar=1;
if(efekt==1){tekrar=i;}
if(efekt==2){tekrar=i;}
else{tekrar=9;}
i=0;i1=0;i2=0;
for(ColonSay=0;ColonSay<tekrar;ColonSay++){
i2=0;
for(i=1;i<9;i++){            //matrix sayar
 for(i1=1;i1<9;i1++){
 i2++;        //colon sayar

switch (efekt){
case 0:
    *Portx=ii[i-1];
     SPI_write(i1);
     SPI_write(img1[i2]);// break; // << aşaya kayma
    *Portx=0xff;goto atla;
case 1:
    *Portx=ii[i-1];
     SPI_write(i1);
//     if(((i2+tekrar-colonsay-1)<tekrar)&&((i2+tekrar-colonsay-1)>0)){
      SPI_write(img1[i2+tekrar-colonsay-1]);//break; // << aşaya kayma
//      }else{SPI_write(0x00);}
    *Portx=0xff;goto atla;
case 2:
    *Portx=ii[i-1];
     SPI_write(i1);
     if((i2-tekrar+colonsay+1)>0){
     SPI_write(img1[i2-tekrar+colonsay+1]);// break;  // << aşaya kayma
} else{SPI_write(0x00);}
    *Portx=0xff;goto atla;
case 3:
    *Portx=ii[i-1];
     SPI_write(i1);
     SPI_write(img1[i2]>>colonsay);// break; // << aşaya kayma
    *Portx=0xff;goto atla;
case 4:
    *Portx=ii[i-1];
     SPI_write(i1);
     SPI_write(img1[i2]<<colonsay);// break;  // << aşaya kayma
    *Portx=0xff;goto atla;
case 5:
    *Portx=ii[i-1];
     SPI_write(i1);
     SPI_write(img1[i2]>>8-colonsay);// break; // << aşaya kayma
    *Portx=0xff;goto atla;
case 6:
    *Portx=ii[i-1];
     SPI_write(i1);
     SPI_write(img1[i2]<<9-colonsay);// break;  // << aşaya kayma
    *Portx=0xff;goto atla;
case 7:
    PortB=ii[i-1]; // satir 2 için çıkış
     SPI_write(i1);
     if(colonsay==0){goto atla;}
     SPI_write(img1[i2]>>colonsay-1);// break; // << aşaya kayma
    PortB=0xff;

    PortD=ii[i-1];  // satir 1 için giriş
     SPI_write(i1);
     SPI_write(img1[i2]<<9-colonsay);// break;  // << aşaya kayma
    PortD=0xff;
     goto atla;
case 8:
    PortD=ii[i-1];
     SPI_write(i1);
     SPI_write(img1[i2]<<colonsay);// break;  // << aşaya kayma
    PortD=0xff;
    
    PortB=ii[i-1];
     SPI_write(i1);
     SPI_write(img1[i2]>>8-colonsay);// break; // << aşaya kayma
    PortB=0xff;
     goto atla;
     }
 atla:
    *Portx=0xff;
}}
delay_ms(100);
}
}
 

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…