Picproje Elektronik Sitesi

DERLEYİCİLER => PIC Assembly => Konuyu başlatan: TA7R - 17 Nisan 2015, 23:04:40

Başlık: Lcd Glcd dönüşümü
Gönderen: TA7R - 17 Nisan 2015, 23:04:40
Merhaba ,
Yapmak istediğim DDS-VFO lara ait bir kaç proje var , ikisinde de asm kaynak kodları ve şema mevcut , Vfo da 2x16 lcd değil de 64x128 Glcd kullanmak istiyorum , yazıları daha büyük fontta yazdırmak , belki sağa sola sabit bir kaç grafik yerleştirmek vs ...
Projelerden birinde 2 adet birbiri ile de haberleşen 16f877 kullanılmış ancak 2x16 lcd ye kumanda eden picin başka işlevleri de var portlar dolu .
Diğer projede ise bir adet 16f84 kullanılmış , lcd , rotary encoder , key , dds modülle haberleşme vs ile  ...
Böyle bir dönüşüm kolaymıdır , nasıl yapmak nerden başlamak gerekir.
İki 16f877 li projeye bir pic daha mı eklemek gerekir?
Başlık: Ynt: Lcd Glcd dönüşümü
Gönderen: RaMu - 17 Nisan 2015, 23:59:48
Bildiğin her şey kolay bilmediğin zor,
bu söz burayada çok uygun.

Asm ile lcd ve glcd kontrol eden kodları yazdıysanız
veya en azından hazır bir örneği inceleyip iyice anladıysanız
böyle bir projeyi yapabilirsiniz.

Portların dolu olması önemli değil çözülür.
Asm glcd örnekleri forumda vardı,
benim denediğimde vardı (paylaşmışta olabilrim hatırlamıyorum).


Ama C öğrenip çok daha kısa sürede
ve kolaylıkla yapabilirsiniz.
Başlık: Ynt: Lcd Glcd dönüşümü
Gönderen: TA7R - 29 Nisan 2015, 17:11:23
Merhaba , çözmeye çalıştığım asm yazılımında anlayamadığım eşitlemeler yapılmış , tırnak içinde nokta ve tırnak içinde tire karekterleri var bunlar ne iş görüyor , yazılımının bu bölümünde ne yapılmış ? Elimdeki kitaplarla çözemedim .

; Info for power-up display                                                   
MCODE_REV_0  equ  '7'     ; Current code version is 7.4                     
MCODE_REV_1  equ  '.'     ;                                                   
MCODE_REV_2  equ  '4'     ;                                                   
MCODE_REV_3  equ  '6'     ;

#ifdef AD9850
; changed from 30 to 62
MCODE_REV_4  equ  '6'     ;
MCODE_REV_5  equ  '2'     ;
#endif

#ifdef AD9851
MCODE_REV_4  equ  '6'     ;
MCODE_REV_5  equ  '0'     ;
#endif                                                   

#ifdef MULTBY2
MCODE_REV_6  equ  'x'     ;
MCODE_REV_7  equ  '2'     ;
#else
#ifdef MULTBY4
MCODE_REV_6  equ  'x'     ;
MCODE_REV_7  equ  '4'     ;
#else
MCODE_REV_6  equ  ' '     ;
MCODE_REV_7  equ  ' '     ;
#endif
#endif
Başlık: Ynt: Lcd Glcd dönüşümü
Gönderen: RaMu - 29 Nisan 2015, 18:29:37
İki nokta var burada;
biri equ diğeri #if #ifdef vs.

equ nun buradaki kullanımı
birşeyi başka bir şey ile ifade etme
sembol gibi düşünülebilir
tabi burada atanan ifade bir sabit.

Misal afaki bir örnek vereyim
led toggle yapan bir program yazdık
programda bekleme süresini belirleyen altprogramda
değişken olan sayaç değerlerine ilk yükleme değerlerini
movlw 04h;
movwf sayac1;

gibi atıyoruz,
bunun yerine, programın başında

bekle_sabit equ  04h

deyip

daha sonra bekleme rutininde

movlw bekle_sabit       ; bu kısım yukarıdaki tanımlamadan ötürü movlw  04h  ile aynı olur   
movwf sayac1              ;


#ifdef ise şöyle
#ifdef  karşısında birşey
....
#endif
eğer karşısındaki şey programda tanımlanmış ise
(#define   karşısındaki şey seklinde)
endif e kadar olan kısmı derler.
bunlar preprocessor önişlemci komutları,
programın nasıl derleneceğini belirleyen komutlar.

Yani yukarıdaki programda
programın hangi kısmı ne zaman neye göre derlensin diye böylebir sistem yapılmış.

Başlık: Ynt: Lcd Glcd dönüşümü
Gönderen: TA7R - 29 Nisan 2015, 18:35:37
@Ramu hocam , çok teşekkür ederim. Ben de öyle düşünmüştüm ama  tırnak içinde (  '.'   ) nokta ve tırnak içinde (  '-'  ) tire nasıl değer olarak atanır ?  Şimdi düşünüyorum da LCD ye karakter yazdırmak için mi mesela 14.100 Mhz in noktasını  mı tanımlıyor acaba ?
Başlık: Ynt: Lcd Glcd dönüşümü
Gönderen: RaMu - 29 Nisan 2015, 18:59:59
Evet.
Tırnak içinde yazılan değerin direk ascii karşılığını
derleyici kendi sayı değeri olarak çevirir,
misal

movlw  'A'
movlw  41h
movlw  .65

hepsi aynıdır, hepside W register ına decimal 65 sayısını yükler,
wiev disassembly listing den kontrol edilebilir.

mesaj birleştirme:: 29 Nisan 2015, 19:02:27

Aslında nokta büyük ihtimalle
versiyon numarası için yazılmıştır verdiğin kısımda.
Ama mantık aynı.
Başlık: Ynt: Lcd Glcd dönüşümü
Gönderen: TA7R - 29 Nisan 2015, 20:03:54
Pic asambly de 35 adet işlemci komutu dışında kullanılabilen diğer komut vb .. nerden bulabilirim ? Elimde asambly öğretiyorum iddeasında olan iki üç kitap var ama sadece 35 komutu vermişler.
Başlık: Ynt: Lcd Glcd dönüşümü
Gönderen: RaMu - 29 Nisan 2015, 20:22:08
16f için sadece 35 komut var zaten.

İngilizce kaynak olur mu?
Başlık: Ynt: Lcd Glcd dönüşümü
Gönderen: TA7R - 30 Nisan 2015, 09:17:35
Hocam elimeki kitap da öyle yazıyor ama sonra "deyim" diyor "       "org"  mesela . Bana bu deyim meyim söylem möylem , asm programı yazılırken  ne kullanılabiliyorsa hepsini içeren bir kaynak lazım ama zannedersem Türkçe olarak yok . E-book da olabilir .  Bu deyim konusu da kafamı karıştırdı ya yeteri kadar. Eğer programı yazarken sizin atadığınız bir etiket değilse , programa veya pic e bir iş yaptırıyorsa bu deyim meyim olmaz resmen komut olur. Burda benim bilmediğim şey şu mu , komutlar var pic e iş yaptırıyor , komutlar var programa iş yaptırıyor , böyle mi yani ? 
Not : aradıklarımın bir kısmını "http://robot.ee.hacettepe.edu.tr/Dosyalar/makaleler/Pic_Assembly_ve_Makrolar.pdf" adresinde buldum , mesela bendeki programda #define kullanılmıştı. Üniversitelerde o kadar hocamız var ,bir tanesi Allah rızası için doğru dürüst bir Pic Asambler kitabı yazsa olmaz mı ?
Şimdiki merakım şu programda hiç bir atama yapılmadan peş peşe 30 - 40 etiket yazılmış . Mesela ;
...
CBLOCK  RAMSTART
ENC_HISTORY                     ; Last 4 samples of encoder state.
                COUNT_0                         ; Counter for delay routine.
                COUNT_1                         ; General counter variables.

                COUNT_2                         ; ** All variables from here to the end **
                COUNT_3                         ;    of RAM are cleared at power up.
                COUNT_4                         ;
                TEMP_1                          ; Temporary storage.
                TEMP_2                          ;        "
                TEMP_3                          ;        "
                ENC_COUNTER                     ; 1 to 38 = CW. -1 to -38 = CCW.
                INT_COUNT                       ; 8 to 1. Decremented every 1.024 mS.
                SW_B_CNT                        ; CAL switch pressed counter. (x 8mS)
                SW_B_OLD                        ; State of old switch count.
                SW_C_CNT                        ; TX switch pressed counter.  (x 8mS)
                SW_BC_CNT                       ; RIT switch pressed counter. (x 8mS)
                SW_BC_OLD                       ; State of old switch count.
                TIMEOUT_L                       ; 16 bit display timeout down counter,
                TIMEOUT_H                       ; return to main display when = 0.
                EEPROM_WRITE                    ; EEPROM write update down counter.
                FLAGS                           ; 8 misc flags.
                FLAG2                           ;       "

                FREQUENCY:5                     ; 40 bit frequency.
                STEP_NUM                        ; LCD cursor pos & step size num.(0-7)
                                                ; (Do not separate frequency & STEP_SIZE)
                STEP_RATE                       ;
                DDS_OLD:5                       ; 40 bit previous DDS freq.

                ARG1_10                         ; MSD.    11 byte ASCII buffer.
                ARG1_9                          ; MSD. \
                ARG1_8                          ;       |
                ARG1_7                          ;       |
                ARG1_6                          ;       |
                ARG1_5                          ;       | 80 bit maths buffer.
                ARG1_4                          ;       |
                ARG1_3                          ;       |
                ARG1_2                          ;       |
                ARG1_1                          ;       |
                ARG1_0                          ; LSD. /

                ARG2_4                          ; MSD. \
                ARG2_3                          ;       |
                ARG2_2                          ;       | 40 bit maths buffer.
                ARG2_1                          ;       |
                ARG2_0                          ; LSD. /

                ARG3_4                          ; MSD. \
                ARG3_3                          ;       |
                ARG3_2                          ;       | 40 bit maths buffer.
                ARG3_1                          ;       |
                ARG3_0                          ; LSD. /

                ARG4_4                          ; MSD. \
                ARG4_3                          ;       |
                ARG4_2                          ;       | 40 bit maths buffer.
                ARG4_1                          ;       |
                ARG4_0                          ; LSD. /

                ENDC
--    Bu atanmamış etiketler ne işe yarıyor ?
--    CBLOCK  RAMSTART      nedir bunlar  ?  biri komut diğeri etiket mi , atama mı ?
Başlık: Ynt: Lcd Glcd dönüşümü
Gönderen: RaMu - 30 Nisan 2015, 13:49:39
Eminim güzel kitaplar var ama
ben kitapdan öğrenmediğim için
kitap tavsiyesi veremiyorum.
Birde sadece pic için asm biliyorum
daha pc tarafında veya diğer mikrodenetleyici ve
microişlemciler için vs. kullanılanı var.

Pic için dediğiniz gibi oluyor,
mikrodenetleyicinin program hafızasına yazılacak olan
program için 35 adet (16f için) komut var,
bunun yanında kullandığımız ide (misal mplab) ve
kullandığımız derleyici (misal mpasm) için
komutlar (önişlemci komutları) deyimler var.

Asm yazarken dahi işleri kolaylaştırmak lazım
bu nedenle bu önişlemci komutları mevcut.

cblock -başlangıç adresi-
...
endc

burada cblock karşısına başlangıç adresi veriliyor,
misal equ tanımlamalarını 0x20 den başlatıyoruzya
cblock 20h diye yazıyoruz,
sonra equ ile tanımlayacaktık değişkenleri ama
artık cblock yazdık ardına tüm değişkenlerimizi yazıyoruz,
oda sırayla adreslere değişkenleri eşitliyor
örneğin


deg1  equ 20h
deg2  equ 21h
deg3  equ 22h

diyeceğimize

cblock 20h
deg1
deg2
deg3
endc

demek aynı işi yapar.

sizin kodda RAMSTART dediği
kullandığınız mcu kullanıcı(user) ram bölgesi nereden başlıyorsa
(misal 16f877 için 20h adresi)
bu değerin atanmış olduğu bir sabittir
bunuda kullanıcı kendi atamıştır %90.
bir yerde RAMSTART equ 20h veya
(doğrumu hatırlamıyorum #define RAMSTART 20h )
diye bir atama vardır programda.

Bunlarda mcu dan mcu ya kolay aktarılabilecek
veya kolay değişiklik yapılabilecek asm kodları yazmak için yöntem diyebiliriz.

Aslında ide-derleyici kullanmadan da asm kod yazabilirsiniz
http://danamlund.dk/pic_microcontroller_blinking_led_without_cheating.html (http://danamlund.dk/pic_microcontroller_blinking_led_without_cheating.html)


Ben genelde merak ettiğim şeyi nete yazıp aradım öğrendim
birde microchip in kaynaklarından faydalandım
http://ww1.microchip.com/downloads/en/DeviceDoc/33014L.pdf (http://ww1.microchip.com/downloads/en/DeviceDoc/33014L.pdf)
Başlık: Ynt: Lcd Glcd dönüşümü
Gönderen: TA7R - 30 Nisan 2015, 14:59:09
@Ramu hocam çok teşekkür ederim , bir kaç tane yazılım var aynı iş için bunları inceliyorum yukarıdaki kodlarda #define RAMStart yok ama  yazarken gözümden kaçmış INCLUDE "DD_SYNTH.DAT" dosyası var. Basitleştirmek için ek dosyaları olmayan yazılımda yoğunlaşıyorum , bununla alakalı bir sorum var.

; * Assign names to IO pins.                                                 *
; ****************************************************************************
;
;   B register bits:
;
DDS_clk equ     0x02              ; AD9850/AD9851 write clock
DDS_dat equ     0x03              ; AD9850/AD9851 serial data input
LCD_busy equ    0x03              ; LCD busy bit
LCD_e   equ     0x04              ; 0=disable, 1=enable
LCD_rw  equ     0x05              ; 0=write, 1=read
LCD_rs  equ     0x06              ; 0=instruction, 1=data
DDS_load equ    0x07              ; Update pin on AD9850/AD9851
;
;   A register bits:
;
speaker   equ  0x02              ; Speaker (always exit with a low output)   
pb_3      equ   0x02              ; PB also on this pin                       
pb_2      equ   0x03              ; Bandswitch Pushbutton,                     
pb_1      equ   0x04              ; Tuning-increment/Calibrate Pushbutton     
;

Göreceğiniz gibi işlemcinin pinlerine bağlı elemanlar adreslenmiş ancak , burda hiç bank veya port değiştirilmeden mesela 0x02 adresine ad9850 dds clk bağlamış (yukarıda da picin şeması var ) dds clk RB2 pinine bağlı milkro işlemcinin. Sonra hiç bank port değiştirmeden hemen devamında 0x02 ye speaker bağlamış şemada bu RA2 pininde
hemen altındaki kodda da yine 0x02 adresine pb_3 bağlamış ...
yani 0x02 hem RB2 için adresleniyor hem RA2  burda program veya pic  bu adresi nasıl karıştırmıyor ?

Target Controller -      PIC16F628A in PIC-EL board                           
;                          __________                                         
;     PB_3-Speaker----RA2 |1       18| RA1---------ENCODER A                   
;     PB_2-Bandswitch-RA3 |2       17| RA0---------ENCODER B                   
;     PB_1-Tuning etc-RA4 |3       16| OSC1--------XTAL                       
;     +5V-----------!MCLR |4       15| OSC2--------XTAL                       
;     Ground----------Vss |5       14| VDD---------+5 V                       
;     LCD D4----------RB0 |6       13| RB7---------DDS_LOAD                   
;     LCD D5----------RB1 |7       12| RB6---------LCD_rs  (LCD Pin 4)         
;     LCD D6/DDS_CLK--RB2 |8       11| RB5---------LCD_rw  (LCD Pin 5)           
;     LCD D7/DDS_DATA-RB3 |9       10| RB4---------LCD_e   (LCD Pin 6)         
;                          ----------                                 
Başlık: Ynt: Lcd Glcd dönüşümü
Gönderen: RaMu - 30 Nisan 2015, 15:08:39
Burada bir kelimeye veya sembol diyelim
rakam atanmış,
bu sayede misal
eğer
DDS_clk equ     0x02              ; AD9850/AD9851 write clock
yazılırsa;

("ad9850 clk RB2 pinine bağlı")
BSF PORTB,2
yerine
BSF PORTB,DDS_clk equ

diyebiliriz demek oluyor,

Farklı kelimelere aynı rakam değeri atanabilir,
bunda bir problem yoktur,
bu sayede

speaker   equ  0x02              ; Speaker (always exit with a low output)   
yazarsak;
BSF  PORTA,2
yerine
BSF  PORTA,speaker
yazılabilir.


Bu işlemlerin pic içinde işleyek programla hiçbir ilgisi yok,
hepsi derleyici için yapılıyor.

mesaj birleştirme:: 30 Nisan 2015, 15:12:11

Faydası ne?
Şimdi bu programda normalde
LCD_e   equ     0x04              ; 0=disable, 1=enable
LCD_rw  equ     0x05              ; 0=write, 1=read


yazılmış,
biz lcd_e pini ile
lcd_rw pinini yerlerini değiştirmek istiyoruz,
LCD_e   equ     0x05              ; 0=disable, 1=enable
LCD_rw  equ     0x04              ; 0=write, 1=read

şeklinde değiştirmemiz yeterli.

Aksi halde
lcd_e ve lcd_rw nin
bsf portx,5
vs. gibi kullanılan bütün
komutlarını tek tek oturup değiştirmek zorunda kalacaktık.
Başlık: Ynt: Lcd Glcd dönüşümü
Gönderen: TA7R - 30 Nisan 2015, 15:14:00
Yani şöyle anladım , burda genel adresleme yapılıyor , asıl komutlar yazılırken bank/port seçimi yapılacak o zaman program o port için bu adrese bakacak . Verdiğiniz linkleri inceliyorum , teşekkürler selam ve saygılar.
Başlık: Ynt: Lcd Glcd dönüşümü
Gönderen: RaMu - 30 Nisan 2015, 15:25:47
Ben teşekkür ederim,
sorunuz olursa çekinmeyin.

Birde bu projeyi yaptıktan sonra
birde C ile yapın aynı işi.

AD985x in datasheet inide incelemekte fayda var,
programı anlamanızı çok kolaylaştırır,
bir asm programın ne işi nasıl yaptığını anlamak çok zordur.
Başlık: Ynt: Lcd Glcd dönüşümü
Gönderen: TA7R - 30 Nisan 2015, 15:42:48
Hocam benim bu programı tamamiyle anlayıp böyle programlar yazmam imkansız. Yapmaya çalıştığım şey lcd ekranı (ve mecburen pic i) değiştirip  18f452 + glcd bağlamak . Düşündüğüm yol ise  asm yazılımını pic-lcd değişikliğiyle mikroc içinde kullanmak .
Başlık: Ynt: Lcd Glcd dönüşümü
Gönderen: RaMu - 30 Nisan 2015, 17:07:51
Asm yi karıştırmayın,
sadece mikroc kullanın çok çok daha kolay olur.

Asm nin kodlarına dahi bakmanıza gerek yok,
program neler yapıyor ne iş görüyor bunu
programın çalışmasından dahi anlamak projeyi yapmanız için yeterli.

Ayrıca daha öncede söyledim pici de değiştirmeniz gerekmiyor.
Başlık: Ynt: Lcd Glcd dönüşümü
Gönderen: TA7R - 03 Mayıs 2015, 22:43:31
MErhaba , ne kadar araştırdysam hep GLCD ye resim  yazdırma programları var . Asm ile GLCD nin istediğimiz satırında değişik fontlarla yazı (karakter) yazdırabileceğimiz bir örnek uygulama arıyorum .
Başlık: Ynt: Lcd Glcd dönüşümü
Gönderen: RaMu - 04 Mayıs 2015, 09:50:50
Şu konuda resim için olanla başlamıştım:
https://www.picproje.org/index.php/topic,28106.msg251351.html#msg251351 (https://www.picproje.org/index.php/topic,28106.msg251351.html#msg251351)
Alıntı yapılan: Mujdat117 - 21 Eylül 2011, 14:50:59
MERHABA 320X240 GLCD İLE ÇALIMADIM FAKAT 128X64 GLCD İLE ASM KODLARIYLA ÖRNEK YAPTIM HATTA BU SİTEDEDE YAYINLADI ARTI KONVERT PROGRAMI YAZDIM AŞAĞIDAKİ LİNKLERDEN ULAŞABLİRSİNİZ UMARIM FAYDASINI GÖRÜRSÜNÜZ.
https://www.picproje.org/index.php/topic,34714.0.html (https://www.picproje.org/index.php/topic,34714.0.html)
https://www.picproje.org/index.php/topic,34937.0.html (https://www.picproje.org/index.php/topic,34937.0.html)
VİDE GÖRÜNTÜLERİNİN OLDUĞU DİĞER LİNKLER
http://www.mcu-turkey.com/?p=14322 (http://www.mcu-turkey.com/?p=14322)
http://www.mcu-turkey.com/?p=15724 (http://www.mcu-turkey.com/?p=15724)

Sonra
http://www.microchip.com/forums/m457635-print.aspx (http://www.microchip.com/forums/m457635-print.aspx)
bu sitedeki kodu denedim, küçük fontunuda oluşturmuştum
ama font işi biraz zorlar.
Benim dedediğim hallerinden biri aşağıda:
https://www.mediafire.com/?2qg1ehprfh993gi (https://www.mediafire.com/?2qg1ehprfh993gi)

;===============================================================================
; GLCD Driver
;-------------------------------------------------------------------------------
;
;INTERNAL 4MHZ SELECTED
;

;----------------------------------
;HAZIRLAYAN R. MUHAMMET TULAY
;NOT!
;KODLAR EĞİTİM AMAÇLI HAZIRLANMIŞTIR
;KAYNAK:
;http://www.microchip.com/forums/m457635-print.aspx
;SİTESİNDE BULUNAN BITWISE NICKLI UYENIN YAZMIS OLDUGU, SPIKE NICKLI UYENIN
;YAYINLADIGI GLCD PROGRAMI KULLANILMIS GEREKLI DUZENLEMELER DEGISIKLIKLER EKLER
;TARAFIMCA YAPILMISTIR
;KULLANACAK KISILERE BASARILAR DILER VE TECRUBELERINI PAYLASMALARINI TEMENNİ EDERİM
;RaMu  ucanel@outlook.com
;-----------------------------------

;NOTES...
;.........PORTA IS SET TO A2D ON POWER UP.......
;
;4MHZ XTAL 1U/SEC CLOCK
;CONNECTIONS TO DISPLAYTECH 64128C
;
;************LCD******************
;PIN CONNECTION
;1 +VE +4.5 - 5.5V DC
;2 VSS GROUND
;3 VO -3V DC
;4 DB0\
;5 DB1 \
;6 DB2  \ DATA <>
;7 DB3   \
;8 DB4   / RESET IND
;9 DB5  / ON/OFF IND
;10 DB6 /
;11 DB7/ BUSY IND
;12 CS1 CHIP SELECT 1
;13 CS2 CHIP SELECT 2
;14 RESET RESET
;15 R/W READ/WRITE
;16 D/I DATA/INSTRUCTION
;17 E ENABLE
;18 FG FRAME GROUND
;19 +LED BACKLIGHT\ +4.2 - 4.6 V DC (150mA)
;20 -LED BACKLIGHT
;
;***********PIC********************  ;degismis olabilir isis çizime bakınız
;PORTA LCD
;RA0 EN ENABLE
;RA1 CS1 CHIP SELECT 1
;RA2 CS2 CHIP SELECT 2
;RA3 D/I DATA/INSTRUCTION
;RA4 R/W READ/WRITE
;RA5 SPARE
;RA6 SPARE
;RA7 RESET DISPLAY RESET
;----------------------------------------
;PORTB LCD
;RB0 RB0\
;RB1 RB1 \
;RB2 RB2  \
;RB3 RB3   \ 8 BIT DATA LINE
;RB4 RB4   /
;RB5 RB5  /
;RB6 RB6 /
;RB7 RB7/
;
;-------------------------------------------------------------------------------
ERRORLEVEL -203,-205,-206,-302,-305
         list   p=16f877a            ; kullanılan pic tanıt
#include <p16f877a.inc>        ;

;===============================================================================
; Fuse Settings
;-------------------------------------------------------------------------------
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &  _LVP_OFF & _DEBUG_OFF & _CPD_OFF; _WRT_ENABLE_OFF &
;-------------------------------------------------------------------------------

;===============================================================================
; Hardware Configuation ;ILGILI PINLERIN GIRIS CIKIS TANIMLAMALARI YAPILMALI
;-------------------------------------------------------------------------------

GLCD_RES_TRIS    EQU     TRISD           ; /RES       
GLCD_RES         EQU     .7
GLCD_CS1_TRIS    EQU     TRISD           ; /CS1
GLCD_CS1         EQU     .2
GLCD_CS2_TRIS    EQU     TRISD           ; /CS2
GLCD_CS2         EQU     .3
GLCD_R_W_TRIS    EQU     TRISD           ; R/W
GLCD_R_W         EQU     .5
GLCD_D_I_TRIS    EQU     TRISD           ; D/I
GLCD_D_I         EQU     .4
GLCD_EN_TRIS     EQU     TRISD           ; EN
GLCD_EN          EQU     .6


GLCD_RES_PORT    EQU PORTD     
GLCD_CS1_PORT    EQU PORTD
GLCD_CS2_PORT    EQU PORTD
GLCD_R_W_PORT    EQU     PORTD
GLCD_D_I_PORT    EQU PORTD
GLCD_EN_PORT     EQU PORTD

GLCD_DATA_TRIS   EQU     TRISB           ; D0-D7
GLCD_DATA_PORT   EQU     PORTB

;===============================================================================
; Data Areas
;-------------------------------------------------------------------------------
PAGE_NO         EQU     20H         ;PAGE NO STORE
ROW_NO          EQU     21H              ;ROW NO STORE
TEMP_L          EQU     22H              ;TEMP REGISTER

GLYPH           EQU     23H

;==============================================================================
; Interrupt Handler
;------------------------------------------------------------------------------

;.Interrupt      code    h'004'

;               retfie                  ; Just a place holder

;==============================================================================
; Power On Reset
;------------------------------------------------------------------------------

;.ResetVector    code    h'000'
ORG 00H
                lgoto   PowerOnReset

;------------------------------------------------------------------------------
PowerOnReset:
    banksel ADCON1          ;SELECT BANK OF ADCON1
                movlw   h'06'           ;SET ALL PINS
                movwf   ADCON1          ;AS DIGITAL I/P'S

BANKSEL GLCD_RES_TRIS ;YUKARIDA EQU
BCF GLCD_RES_TRIS,GLCD_RES ;ILE
BANKSEL GLCD_RES_PORT ;PORT
BCF GLCD_RES_PORT,GLCD_RES ;VE

BANKSEL GLCD_CS1_TRIS ;TRIS
BCF GLCD_CS1_TRIS,GLCD_CS1 ;OLARAK
BANKSEL GLCD_CS1_PORT ;ILGILI
BCF GLCD_CS1_PORT,GLCD_CS1 ;PORT

BANKSEL GLCD_CS2_TRIS ;VE
BCF GLCD_CS2_TRIS,GLCD_CS2 ;TRISLERE
BANKSEL GLCD_CS2_PORT ;ATANAN
BCF GLCD_CS2_PORT,GLCD_CS2 ;GLCD RESET

BANKSEL GLCD_R_W_TRIS ;GLCD CHIP SELECT1
BCF GLCD_R_W_TRIS,GLCD_R_W ;GLCD CHIP SELECT2
BANKSEL GLCD_R_W_PORT ;GLCD READ WRITE
BCF GLCD_R_W_PORT,GLCD_R_W ;GLCD D_I

BANKSEL GLCD_D_I_TRIS ;PINLERI
BCF GLCD_D_I_TRIS,GLCD_D_I ;BURADA
BANKSEL GLCD_D_I_PORT ;CIKIS
BCF GLCD_D_I_PORT,GLCD_D_I ;OLARAK

BANKSEL GLCD_EN_TRIS ;ATANIR
BCF GLCD_EN_TRIS,GLCD_EN ;VE
BANKSEL GLCD_EN_PORT ;TEK TEK
BCF GLCD_EN_PORT,GLCD_EN ;BCF ILE SIFIRLANIR


BANKSEL GLCD_DATA_TRIS ;EQU ILE DATA PORTU
CLRF GLCD_DATA_TRIS ;OLARAK SECILMIS PORT
BANKSEL GLCD_DATA_PORT ;CIKIS OLARAK
CLRF GLCD_DATA_PORT ;ATANIR, SIFIRLANIR

;-------------------------------------------------------------------------------
;glcd init ediliyor
                call    GLCDSetup        ;DO LCD SETUP
                call    GLCDDisplayOn    ;TURN DISPLAY ON
                call    GLCDDISPLAYSL ;SET DISPLAY START LINE  ;? ? ?

;-------------------------------------------------------------------------------
;Giriş işlmleri yapıldı, glcd fonksiyonları (altprogramları) aş. şek. kullanılıyor:
;aşağıdada görüleceği gibi GLCDSelectLeft ve Right ile
;yazdırma konumu seçilmek zorunda
;left de 8 karakter yazıldıktan sonra
;right programcı tarafından seçilmek zorunda (Glcd CS1 CS2 olayı)
;programam ufak bir ekle buda otomatik hale getirilebilir.

                call    GLCDSelectLeft
                clrw                    ;LOAD W WITH 0
                call    GLCDSetPage ;SET THE PAGE
                clrw                    ;LOAD W WITH 0
                call    GLCDSetRow ;SET THE ROW

                movlw   'H'
                call    CharOut
                movlw   'e'
                call    CharOut
                movlw   'l'
                call    CharOut
                movlw   'l'
                call    CharOut
                movlw   'o'
                call    CharOut


movlw   'M'
                call    CharOut
                movlw   'e'
                call    CharOut
                movlw   'l'
                call    CharOut
               ; movlw   'l'
               ; call    CharOut
                ;movlw   'o'
                ;call    CharOut



                movlw   .1 ;YAZMAYA 1. SATIRDAN BASLA (0. SATIR ILK SATIRDIR)
                call    GLCDSetPage
                ;clrw
MOVLW 18H ;SATIRIN 18H SUTUNUNDAN YAZMAYA BASLA (TOPLAM 64 SUTUN VAR)
                call    GLCDSetRow

                movlw   'R'
                call    CharOut ;TABLODAN R HARFININ 8 BYTE DATASINI ALIR YAZAR
                movlw   'a'
                call    CharOut
                movlw   'M'
                call    CharOut
                movlw   'u'
                call    CharOut
; goto $
;------------------------------------------------------------------------------

; Diaplay the entire font to test the LCD

                call    GLCDSelectLeft
                movlw   .2
                call    GLCDSetPage
                clrw
                call    GLCDSetRow

                movlw   h'20'
                call    CharOut
                movlw   h'21'
                call    CharOut
                movlw   h'22'
                call    CharOut
                movlw   h'23'
                call    CharOut
                movlw   h'24'
                call    CharOut
                movlw   h'25'
                call    CharOut
                movlw   h'26'
                call    CharOut
                movlw   h'27'
                call    CharOut

                call    GLCDSelectRight
                movlw   .2
                call    GLCDSetPage
                clrw
                call    GLCDSetRow

                movlw   h'28'
                call    CharOut
                movlw   h'29'
                call    CharOut
                movlw   h'2a'
                call    CharOut
                movlw   h'2b'
                call    CharOut
                movlw   h'2c'
                call    CharOut
                movlw   h'2d'
                call    CharOut
                movlw   h'2e'
                call    CharOut
                movlw   h'2f'
                call    CharOut

                call    GLCDSelectLeft
                movlw   .3
                call    GLCDSetPage
                clrw
                call    GLCDSetRow

                movlw   h'30'
                call    CharOut
                movlw   h'31'
                call    CharOut
                movlw   h'32'
                call    CharOut
                movlw   h'33'
                call    CharOut
                movlw   h'34'
                call    CharOut
                movlw   h'35'
                call    CharOut
                movlw   h'36'
                call    CharOut
                movlw   h'37'
                call    CharOut

                call    GLCDSelectRight
                movlw   .3
                call    GLCDSetPage
                clrw
                call    GLCDSetRow

                movlw   h'38'
                call    CharOut
                movlw   h'39'
                call    CharOut
                movlw   h'3a'
                call    CharOut
                movlw   h'3b'
                call    CharOut
                movlw   h'3c'
                call    CharOut
                movlw   h'3d'
                call    CharOut
                movlw   h'3e'
                call    CharOut
                movlw   h'3f'
                call    CharOut

                call    GLCDSelectLeft
                movlw   .4
                call    GLCDSetPage
                clrw
                call    GLCDSetRow

                movlw   h'40'
                call    CharOut
                movlw   h'41'
                call    CharOut
                movlw   h'42'
                call    CharOut
                movlw   h'43'
                call    CharOut
                movlw   h'44'
                call    CharOut
                movlw   h'45'
                call    CharOut
                movlw   h'46'
                call    CharOut
                movlw   h'47'
                call    CharOut

                call    GLCDSelectRight
                movlw   .4
                call    GLCDSetPage
                clrw
                call    GLCDSetRow

                movlw   h'48'
                call    CharOut
                movlw   h'49'
                call    CharOut
                movlw   h'4a'
                call    CharOut
                movlw   h'4b'
                call    CharOut
                movlw   h'4c'
                call    CharOut
                movlw   h'4d'
                call    CharOut
                movlw   h'4e'
                call    CharOut
                movlw   h'4f'
                call    CharOut

                call    GLCDSelectLeft
                movlw   .5
                call    GLCDSetPage
                clrw
                call    GLCDSetRow

                movlw   h'50'
                call    CharOut
                movlw   h'51'
                call    CharOut
                movlw   h'52'
                call    CharOut
                movlw   h'53'
                call    CharOut
                movlw   h'54'
                call    CharOut
                movlw   h'55'
                call    CharOut
                movlw   h'56'
                call    CharOut
                movlw   h'57'
                call    CharOut

                call    GLCDSelectRight
                movlw   .5
                call    GLCDSetPage
                clrw
                call    GLCDSetRow

                movlw   h'58'
                call    CharOut
                movlw   h'59'
                call    CharOut
                movlw   h'5a'
                call    CharOut
                movlw   h'5b'
                call    CharOut
                movlw   h'5c'
                call    CharOut
                movlw   h'5d'
                call    CharOut
                movlw   h'5e'
                call    CharOut
                movlw   h'5f'
                call    CharOut

                call    GLCDSelectLeft
                movlw   .6
                call    GLCDSetPage
                clrw
                call    GLCDSetRow

                movlw   h'60'
                call    CharOut
                movlw   h'61'
                call    CharOut
                movlw   h'62'
                call    CharOut
                movlw   h'63'
                call    CharOut
                movlw   h'64'
                call    CharOut
                movlw   h'65'
                call    CharOut
                movlw   h'66'
                call    CharOut
                movlw   h'67'
                call    CharOut

                call    GLCDSelectRight
                movlw   .6
                call    GLCDSetPage
                clrw
                call    GLCDSetRow

                movlw   h'68'
                call    CharOut
                movlw   h'69'
                call    CharOut
                movlw   h'6a'
                call    CharOut
                movlw   h'6b'
                call    CharOut
                movlw   h'6c'
                call    CharOut
                movlw   h'6d'
                call    CharOut
                movlw   h'6e'
                call    CharOut
                movlw   h'6f'
                call    CharOut

                call    GLCDSelectLeft
                movlw   .7
                call    GLCDSetPage
                clrw
                call    GLCDSetRow

                movlw   h'70'
                call    CharOut
                movlw   h'71'
                call    CharOut
                movlw   h'72'
                call    CharOut
                movlw   h'73'
                call    CharOut
                movlw   h'74'
                call    CharOut
                movlw   h'75'
                call    CharOut
                movlw   h'76'
                call    CharOut
                movlw   h'77'
                call    CharOut

                call    GLCDSelectRight
                movlw   .7
                call    GLCDSetPage
                clrw
                call    GLCDSetRow

                movlw   h'78'
                call    CharOut
                movlw   h'79'
                call    CharOut
                movlw   h'7a'
                call    CharOut
                movlw   h'7b'
                call    CharOut
                movlw   h'7c'
                call    CharOut
                movlw   h'7d'
                call    CharOut
                movlw   h'7e'
                call    CharOut
                movlw   h'7f'
                call    CharOut

                goto    $               ; Then loop forever

;===============================================================================
; Graphical LCD Control Subroutines ;GLCD ALTPROGRAMLAR
;-------------------------------------------------------------------------------
; Initialises the I/O pins used to communicate with the graphics LCD module and
; tells it to reset.

GLCDSetup:
                ;banksel GLCD_RES_TRIS ;BUNLAR PROG. BASINDA HALLEDILDI
                ;bcf GLCD_RES_TRIS,GLCD_RES ;SET DIRECTION OF RESET PIN O/P
                ;banksel GLCD_RES_PORT
                ;bcf GLCD_RES_PORT,GLCD_RES ;SET PORT O/P LOW (starts reset)
                ;banksel GLCD_RES_TRIS
                ;bcf GLCD_CS1_TRIS,GLCD_CS1 ;SET DIRECTION OF CS1 PIN O/P
                ;bcf GLCD_CS2_TRIS,GLCD_CS2 ;SET DIRECTION OF CS2 PIN O/P
                ;bcf GLCD_EN_TRIS,GLCD_EN ;SET DIRECTION OF E PIN O/P
                ;bcf GLCD_R_W_TRIS,GLCD_R_W ;SET DIRECTION OF RW PIN O/P
                ;bcf GLCD_D_I_TRIS,GLCD_D_I ;SET DIRECTION OF DI PIN O/P
                banksel GLCD_EN_PORT
                bcf GLCD_EN_PORT,GLCD_EN    ;SET E LOW
;BANKSEL LCD_RES_PORT ;GEREKSİZ EKLERDEN
                bsf GLCD_RES_PORT,GLCD_RES ;RELEASE FROM RESET   

                call GLCDSelectLeft
                goto GLCDWait ; and wait until ready

;-------------------------------------------------------------------------------
; Instruct all the controller chips to turn their displays on.

GLCDDisplayOn:
                movlw b'00111111'
                goto GLCDCtrlAll

;-------------------------------------------------------------------------------
; Instruct all the controller chips to turn their displays off.

GLCDDisplayOff:
                movlw B'00111110'
                goto GLCDCtrlAll

;-------------------------------------------------------------------------------
;SETS DISPLAY DATA RAM (ADDRESS 00) TO TOP OF PAGE

GLCDDISPLAYSL:
                movlw B'11000000'
                call GLCDSelectLeft
                goto GLCDSendCtrl

;-------------------------------------------------------------------------------
; Sends a command byte to all the display controllers.

GLCDCtrlAll:
                bsf    GLCD_CS1_PORT,GLCD_CS1
                bsf    GLCD_CS2_PORT,GLCD_CS2

;-------------------------------------------------------------------------------
; Sends the command byte in WREG to the currently selected controller chip

GLCDSendCtrl:
                bcf GLCD_D_I_PORT,GLCD_D_I ; Set D/I = LO for commands
                goto DoOutput        ;SEND COMMAND

;-------------------------------------------------------------------------------
; Sends the data byte in WREG to the currently selected controller chip

GLCDSendData:
        bsf GLCD_D_I_PORT,GLCD_D_I ; Set D/I = HI for data
DoOutput        bcf GLCD_R_W_PORT,GLCD_R_W ; Set R/W = LO for output
                banksel GLCD_DATA_TRIS ;SELECT TRISB BANK
                clrf GLCD_DATA_TRIS ;SET TRISB TO OUTPUTS
                banksel GLCD_DATA_PORT ;SELECT PORTB BANK
                movwf GLCD_DATA_PORT ; .. and latch byte
                nop
                bsf GLCD_EN_PORT,GLCD_EN ; Then strobe EN
                nop
                bcf GLCD_EN_PORT,GLCD_EN

                btfss GLCD_D_I_PORT,GLCD_D_I ; SEE IF SENDING DATA
                goto    GLCDWait
                incf ROW_NO,W ; Bump ROW tracker
                andlw B'00111111' ; .. and wrap round
                movwf ROW_NO

;-------------------------------------------------------------------------------
; Reads the status byte from the currently selected controller and waits
; for it to become zero. (note roll thro from above)

GLCDWait:
                call    GLCDReadBusy ;READ STATUS BYTE
                btfsc   TEMP_L,7 ;LOOK AT BUSY PIN
                goto    GLCDWait ;(BSY)
                return ;(CLEAR)
;-------------------------------------------------------------------------------
; Reads the status byte from the active controller chip.

GLCDReadBusy:
                bcf GLCD_D_I_PORT,GLCD_D_I     ; Set D/I = LO for command
                goto DoInput

;-------------------------------------------------------------------------------
;READS A DATA BYTE ( IN TEMP REG ) FROM THE ACTIVE CONTROLLER CHIP

GLCDReadData:
                bsf GLCD_D_I_PORT,GLCD_D_I ; Set D/I = HI for data
DoInput         bsf GLCD_R_W_PORT,GLCD_R_W ; Set R/W = HI for input
                banksel GLCD_DATA_TRIS ;SET BANK TO TRISB
                movlw h'ff' ;MAKE I/P'S
                movwf GLCD_DATA_TRIS ;DO IT
                banksel GLCD_DATA_PORT ;SET BANK TO PORTB
                nop
                bsf GLCD_EN_PORT,GLCD_EN ; Strobe EN ON
                nop
                movf GLCD_DATA_PORT,W ;READ BYTE FROM DISPLAY IN W
                movwf TEMP_L ;PUT W IN TEMP REG
                bcf GLCD_EN_PORT,GLCD_EN ;EN OFF
                banksel GLCD_DATA_TRIS ;SET BANK TO TRISB
                clrf GLCD_DATA_TRIS ;MAKE O/P'S
                banksel GLCD_DATA_PORT
                return

;-------------------------------------------------------------------------------
; Sets the chip select lines so the left hand side of the screen is enabled

GLCDSelectLeft:
                bsf GLCD_CS1_PORT,GLCD_CS1
                bcf GLCD_CS2_PORT,GLCD_CS2
                return

;-------------------------------------------------------------------------------
; Sets the chip select lines so the right hand side of the screen is enabled

GLCDSelectRight:
                bcf GLCD_CS1_PORT,GLCD_CS1
                bsf GLCD_CS2_PORT,GLCD_CS2
                return

;-------------------------------------------------------------------------------
; Generates and sends a command to set the selected page

GLCDSetPage:
                andlw B'00000111'
                movwf PAGE_NO
                iorlw B'10111000'
                goto GLCDSendCtrl

;-------------------------------------------------------------------------------
; Generates and sends a command to set the selected row

GLCDSetRow
                andlw b'00111111'
                movwf ROW_NO
                iorlw b'01000000'
                goto GLCDSendCtrl

;===============================================================================
; Character Font Display
;-------------------------------------------------------------------------------

; Draw the 8x8 glyph for the character in WREG

CharOut:
                andlw   h'7f'           ; Ensure character in supported range
                addlw   -h'20'                 
                movwf   GLYPH           ; Multiply by 8 to get table offset
                clrf    PCLATH
                bcf     STATUS,C
                rlf     GLYPH,F
                rlf     GLYPH,F
                rlf     PCLATH,F
                rlf     GLYPH,F
                rlf     PCLATH,F
                movlw   high GlyphData  ; Add to table address to get target
                addwf   PCLATH,F
                movlw   low GlyphData
                addwf   GLYPH,F
                btfsc   STATUS,C
                incf    PCLATH,F

                call    ShowGlyphData   ; Repeat for each pixel column
                call    ShowGlyphData
                call    ShowGlyphData
                call    ShowGlyphData
                call    ShowGlyphData
                call    ShowGlyphData
                call    ShowGlyphData
ShowGlyphData:
                call    GetGlyphData    ; Get next byte of glyph data
                call    GLCDSendData     ; .. and display
                incf    GLYPH,F         ; Then bump data address one place
                btfsc   STATUS,Z
                incf    PCLATH,F
                return

; Recovers a byte of glyph data from the table. (dt createS RETLW instructions)

GetGlyphData:
                movf    GLYPH,W         ; Do a computed jump
                movwf   PCL
GlyphData:
                dt      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                dt      0x00,0x00,0x00,0x5F,0x5F,0x00,0x00,0x00
                dt      0x00,0x07,0x07,0x00,0x00,0x07,0x07,0x00
                dt      0x24,0x7E,0x7E,0x24,0x7E,0x7E,0x24,0x00
                dt      0x00,0x24,0x2E,0x6B,0x6B,0x3A,0x12,0x00
                dt      0x00,0x66,0x36,0x18,0x0C,0x66,0x62,0x00
                dt      0x30,0x7A,0x4F,0x5D,0x37,0x72,0x50,0x00
                dt      0x00,0x00,0x00,0x07,0x07,0x00,0x00,0x00
                dt      0x00,0x00,0x00,0x3E,0x7F,0x63,0x41,0x00
                dt      0x00,0x41,0x63,0x7F,0x3E,0x00,0x00,0x00
                dt      0x08,0x2A,0x3E,0x1C,0x1C,0x3E,0x2A,0x08
                dt      0x00,0x08,0x08,0x3E,0x3E,0x08,0x08,0x00
                dt      0x00,0x80,0xE0,0x60,0x00,0x00,0x00,0x00
                dt      0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00
                dt      0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00
                dt      0x00,0x60,0x30,0x18,0x0C,0x06,0x03,0x00
                dt      0x00,0x3E,0x7F,0x49,0x45,0x7F,0x3E,0x00
                dt      0x00,0x40,0x42,0x7F,0x7F,0x40,0x40,0x00
                dt      0x00,0x42,0x63,0x71,0x59,0x4F,0x46,0x00
                dt      0x00,0x21,0x61,0x45,0x4F,0x7B,0x31,0x00
                dt      0x00,0x18,0x1C,0x16,0x7F,0x7F,0x10,0x00
                dt      0x00,0x27,0x67,0x45,0x45,0x7D,0x39,0x00
                dt      0x00,0x3E,0x7F,0x49,0x49,0x79,0x30,0x00
                dt      0x00,0x01,0x71,0x79,0x0D,0x07,0x03,0x00
                dt      0x00,0x36,0x7F,0x49,0x49,0x7F,0x36,0x00
                dt      0x00,0x06,0x4F,0x49,0x69,0x3F,0x1E,0x00
                dt      0x00,0x00,0x00,0x36,0x36,0x00,0x00,0x00
                dt      0x00,0x00,0x40,0x76,0x36,0x00,0x00,0x00
                dt      0x00,0x00,0x08,0x1C,0x36,0x63,0x41,0x00
                dt      0x00,0x24,0x24,0x24,0x24,0x24,0x24,0x00
                dt      0x00,0x41,0x63,0x36,0x1C,0x08,0x00,0x00
                dt      0x00,0x02,0x03,0x51,0x59,0x0F,0x06,0x00
                dt      0x00,0x3E,0x7F,0x41,0x5D,0x57,0x5E,0x00
                dt      0x00,0x7C,0x7E,0x13,0x13,0x7E,0x7C,0x00
                dt      0x00,0x7F,0x7F,0x49,0x49,0x7F,0x36,0x00
                dt      0x00,0x3E,0x7F,0x41,0x41,0x63,0x22,0x00
                dt      0x00,0x7F,0x7F,0x41,0x63,0x3E,0x1C,0x00
                dt      0x00,0x7F,0x7F,0x49,0x49,0x49,0x41,0x00
                dt      0x00,0x7F,0x7F,0x09,0x09,0x09,0x01,0x00
                dt      0x00,0x3E,0x7F,0x41,0x49,0x79,0x79,0x00
                dt      0x00,0x7F,0x7F,0x08,0x08,0x7F,0x7F,0x00
                dt      0x00,0x00,0x41,0x7F,0x7F,0x41,0x00,0x00
                dt      0x00,0x20,0x60,0x40,0x40,0x7F,0x3F,0x00
                dt      0x00,0x7F,0x7F,0x1C,0x36,0x63,0x41,0x00
                dt      0x00,0x7F,0x7F,0x40,0x40,0x40,0x40,0x00
                dt      0x7F,0x7F,0x06,0x0C,0x06,0x7F,0x7F,0x00
                dt      0x00,0x7F,0x7F,0x0E,0x1C,0x7F,0x7F,0x00
                dt      0x00,0x3E,0x7F,0x41,0x41,0x7F,0x3E,0x00
                dt      0x00,0x7F,0x7F,0x09,0x09,0x0F,0x06,0x00
                dt      0x00,0x3E,0x7F,0x51,0x21,0x7F,0x5E,0x00
                dt      0x00,0x7F,0x7F,0x09,0x19,0x7F,0x66,0x00
                dt      0x00,0x26,0x6F,0x49,0x49,0x7B,0x32,0x00
                dt      0x00,0x01,0x01,0x7F,0x7F,0x01,0x01,0x00
                dt      0x00,0x3F,0x7F,0x40,0x40,0x7F,0x7F,0x00
                dt      0x00,0x1F,0x3F,0x60,0x60,0x3F,0x1F,0x00
                dt      0x7F,0x7F,0x30,0x18,0x30,0x7F,0x7F,0x00
                dt      0x00,0x63,0x77,0x1C,0x1C,0x77,0x63,0x00
                dt      0x00,0x07,0x0F,0x78,0x78,0x0F,0x07,0x00
                dt      0x00,0x61,0x71,0x59,0x4D,0x47,0x43,0x00
                dt      0x00,0x00,0x00,0x7F,0x7F,0x41,0x41,0x00
                dt      0x00,0x03,0x06,0x0C,0x18,0x30,0x60,0x00
                dt      0x00,0x41,0x41,0x7F,0x7F,0x00,0x00,0x00
                dt      0x08,0x0C,0x06,0x03,0x06,0x0C,0x08,0x00
                dt      0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00
                dt      0x02,0x06,0x0C,0x08,0x00,0x00,0x00,0x00
                dt      0x00,0x20,0x74,0x54,0x54,0x7C,0x78,0x00
                dt      0x00,0x7F,0x7F,0x44,0x44,0x7C,0x38,0x00
                dt      0x00,0x38,0x7C,0x44,0x44,0x44,0x00,0x00
                dt      0x00,0x38,0x7C,0x44,0x44,0x7F,0x7F,0x00
                dt      0x00,0x38,0x7C,0x54,0x54,0x5C,0x18,0x00
                dt      0x00,0x04,0x7E,0x7F,0x05,0x05,0x00,0x00
                dt      0x00,0x98,0xBC,0xA4,0xA4,0xFC,0x7C,0x00
                dt      0x00,0x7F,0x7F,0x04,0x04,0x7C,0x78,0x00
                dt      0x00,0x00,0x44,0x7D,0x7D,0x40,0x00,0x00
                dt      0x00,0x80,0x80,0xFD,0x7D,0x00,0x00,0x00
                dt      0x00,0x7F,0x7F,0x10,0x38,0x6C,0x44,0x00
                dt      0x00,0x00,0x41,0x7F,0x7F,0x40,0x00,0x00
                dt      0x7C,0x7C,0x0C,0x18,0x0C,0x7C,0x78,0x00
                dt      0x00,0x7C,0x7C,0x04,0x04,0x7C,0x78,0x00
                dt      0x00,0x38,0x7C,0x44,0x44,0x7C,0x38,0x00
                dt      0x00,0xFC,0xFC,0x44,0x44,0x7C,0x38,0x00
                dt      0x00,0x38,0x7C,0x44,0x44,0xFC,0xFC,0x00
                dt      0x00,0x7C,0x7C,0x04,0x04,0x0C,0x08,0x00
                dt      0x00,0x48,0x5C,0x54,0x54,0x74,0x24,0x00
                dt      0x00,0x04,0x04,0x3E,0x7E,0x44,0x44,0x00
                dt      0x00,0x3C,0x7C,0x40,0x40,0x7C,0x7C,0x00
                dt      0x00,0x1C,0x3C,0x60,0x60,0x3C,0x1C,0x00
                dt      0x1C,0x7C,0x60,0x30,0x60,0x7C,0x1C,0x00
                dt      0x00,0x44,0x6C,0x38,0x38,0x6C,0x44,0x00
                dt      0x00,0x9C,0xBC,0xA0,0xA0,0xFC,0x7C,0x00
                dt      0x00,0x44,0x64,0x74,0x5C,0x4C,0x44,0x00
                dt      0x00,0x00,0x08,0x3E,0x77,0x41,0x41,0x00
                dt      0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00
                dt      0x00,0x41,0x41,0x77,0x3E,0x08,0x00,0x00
                dt      0x0C,0x06,0x06,0x0C,0x18,0x18,0x0C,0x00
                dt      0x00,0x60,0x78,0x5E,0x46,0x58,0x60,0x00

                end


(https://lh5.googleusercontent.com/-9370HuKi75c/VUcWdGWyGBI/AAAAAAAABbU/wSg2l_KLRGA/w486-h384-no/glcd_asm_RaMu.PNG)
Başlık: Ynt: Lcd Glcd dönüşümü
Gönderen: TA7R - 04 Mayıs 2015, 11:31:38
Hocam çok teşekkür ederim. Son iki projenizi indirdim inceleyeceğim.