نویسنده: اوژن کی نژاد
همانطور که وعده داده شد، در این بخش در مورد فارسی نویسی روی LCD های مبتنی بر کنترل کننده T6963C و بطور خاص با دقت 240x128 توضیح داده می شود. برای نوشتن فونت های فارسی می توان به دو روش ارتباط مستقیم با T6963C و بدون استفاده از توابع بسکام و یا ساخت فونت بصورت نقطه به نقطه و با استفاده از دستور Pset عمل کرد. در این مقاله از روش دوم برای ایجاد فونت های فارسی 8x8 روی LCD استفاده شده است.
به این منظور یک روال به شکل زیر تعریف شده که با استفاده از آن می توان در مختصات دلخواه، فونت مورد نظر را نمایش داد:
Lcdfarsi (X , Y , FONT)
مقدار X در محدوده (30-1) و مقدار Y در محدوده (16-1) است و بجای فونت فهرستی از نمادها که قبلا هم در فارسی نویسی روی LCD های 128x64 معرفی شده بود، قرار می گیرد( مانند vav یا alef_chasbaan و مانند آن). برای احضار این روال باید از دستور Call استفاده شود. به عنوان مثال دستور زیر حرف "ق" را در بالا و سمت چپ صفحه نمایش می دهد:
Call Lcdfarsi(1 , 1 , Ghaaf_bozorg)
برای نوشتن یک جمله و صرفه جویی در نوشتن دستورالعمل ها، می توان در یک حلقه از دستور Lookup استفاده کرد که نمونه ای از آن در مثال انتهای مقاله آورده شده است.
اگر لازم باشد ترکیبی از حروف فارسی و لاتین نمایش داده شوند، برای حروف لاتین از ترکیب دستورات Locate و LCD استفاده می شود که این عمل هم در مثال انجام شده است. فونت فارسی از نظر شکل مشابه همان فونتی است که قبلا برای LCD های 128x64 با کنترل کننده ks108 طراحی شد.
مثال: برنامه زیر در سطر اول LCD از راست، عبارت فارسی" دانایی توانایی است" و در سطر سوم از سمت چپ عبارت"Knowledge is POWER" را نمایش می دهد:
' Written by Ozhan Keynezhad
$regfile = "m64def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 10
$framesize = 40
Const _0 = 0
Const _1 = 1
Const _2 = 2
Const _3 = 3
Const _4 = 4
Const _5 = 5
Const _6 = 6
Const _7 = 7
Const _8 = 8
Const _9 = 9
Const Virgool = 10
Const Khateh_chasban = 11
Const Alamat_soal = 12
Const A_ba_kolah = 13
Const Hamzeh_chasban = 14
Const Hamzeh_joda = 15
Const Alef = 16
Const Alef_chasbaan = 17
Const Be_bozorg = 18
Const Be_koochak = 19
Const Pe_bozorg = 20
Const Pe_koochak = 21
Const Te_bozorg = 22
Const Te_koochak = 23
Const Se_bozorg = 24
Const Se_koochak = 25
Const Jim_bozorg = 26
Const Jim_koochak = 27
Const Che_bozorg = 28
Const Che Koochak = 29
Const He_jimi_bozorg = 30
Const He_jimi_koochak = 31
Const Khe_bozorg = 32
Const Khe_koochak = 33
Const Daal = 34
Const Zaal = 35
Const Re = 36
Const Ze = 37
Const Zhe = 38
Const Sin_bozorg = 39
Const Sin_koochak = 40
Const Shin_bozorg = 41
Const Shin_koochak = 42
Const Saad_bozorg = 43
Const Saad_koochak = 44
Const Zaad_bozorg = 45
Const Zaad_koochak = 46
Const Taa = 47
Const Zaa = 48
Const Ein_bozorg = 49
Const Ein_akhar_chasban = 50
Const Ein_vasat = 51
Const Ein_koochak = 52
Const Ghein_bozorg = 53
Const Ghein_akhar_chasban = 54
Const Ghein_vasat = 55
Const Ghein_koochak = 56
Const Fe_bozorg = 57
Const Fe_koochak = 58
Const Ghaaf_bozorg = 59
Const Ghaaf_koochak = 60
Const Kaaf_bozorg = 61
Const Kaaf_koochak = 62
Const Gaaf_bozorg = 63
Const Gaaf_koochak = 64
Const Laam_bozorg = 65
Const Laam_alef = 66
Const Laam_koochak = 67
Const Mim_bozorg = 68
Const Mim_koochak = 69
Const Noon_bozorg = 70
Const Noon_koochak = 71
Const Vav = 72
Const He_koochak = 73
Const He_vasat = 74
Const He_chasbaan_avval = 75
Const Ye_chasbaan = 76
Const Ye_bozorg = 77
Const Ye_koochak = 78
Config Graphlcd = 240 * 128 , Dataport = Portc , Controlport = Portd , Ce = 7 , Cd = 4 , Wr = 5 , Rd = 6 , Reset = 3 , Fs = 2 , Mode = 8
Declare Sub Lcdfarsi(byval X As Byte , Byval Y As Byte , Byval Font As Byte)
Dim X As Byte
Dim Y As Byte
Dim Font As Byte
Dim X1 As Byte
Dim Y1 As Byte
Dim X2 As Byte
Dim Y2 As Byte
Dim Y3 As Byte
Dim Mask As Byte
Dim F As Byte
Dim F1 As Byte
Dim Table As Word
Dim N As Byte
Cls
Cursor Off
For N = 0 To 15
X = N + 15
Font = Lookup(n , Word_table)
Call Lcdfarsi(x , 1 , Font)
Next N
Locate 3 , 1
Lcd "Knowledge is POWER"
Do
Loop
End
'*************************************************************************
Sub Lcdfarsi(byval X As Byte , Byval Y As Byte , Byval Font As Byte )
If X > 30 Then X = 3
If X = 0 Then X = 1
If Y > 16 Then Y = 16
If Y = 0 Then Y = 1
If Font > Ye_koochak Then Font = Ye_koochak
X = X -1 : Y = Y -1
Table = Font * 8
X1 = X * 8
Y1 = Y * 8
For X = 0 To 7
F = Lookup(table , Font_table)
For Y = 0 To 7
Y3 = Y
Mask = 2 ^ Y3
F1 = F And Mask
X2 = X + X1
Y2 = Y + Y1
If F1 0 Then Pset X2 , Y2 , 1
Next Y
Table = Table + 1
Next X
End Sub
'*************************************************************************
Word_table:
Data Te_bozorg , Sin_koochak , Alef
Data Ye_chasbaan , Ye_koochak , Alef_chasbaan , Noon_koochak , Alef , Vav , Te_koochak
Data Ye_chasbaan , Ye_koochak , Alef_chasbaan , Noon_koochak , Alef , Daal
'*************************************************************************
Font_table:
Data &H00 , &H00 , &H30 , &H48 , &H30 , &H00 , &H00 , &H00
DATA &H00 , &H00 , &H00 , &HFC , &H00 , &H00 , &H00 , &H00
DATA &H00 , &H00 , &H00 , &HFC , &H10 , &H1C , &H00 , &H00
DATA &H00 , &HFC , &H10 , &H1C , &H10 , &H1C , &H00 , &H00
DATA &H00 , &HFC , &H10 , &H18 , &H14 , &H14 , &H00 , &H00
DATA &H00 , &HE0 , &H98 , &HC4 , &H98 , &HE0 , &H00 , &H00
DATA &H00 , &H80 , &HD8 , &H64 , &H24 , &H08 , &H00 , &H00
DATA &H00 , &H0C , &H70 , &HC0 , &H70 , &H0C , &H00 , &H00
DATA &H00 , &HC0 , &H38 , &H0C , &H38 , &HC0 , &H00 , &H00
DATA &H00 , &H00 , &H1C , &H14 , &HFC , &H00 , &H00 , &H00
DATA &H00 , &H00 , &H60 , &HD0 , &H40 , &H00 , &H00 , &H00
DATA &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20
DATA &H00 , &H00 , &H0C , &HB2 , &H02 , &H04 , &H00 , &H00
DATA &H00 , &H08 , &H04 , &H7C , &H04 , &H02 , &H00 , &H00
DATA &H20 , &H20 , &H34 , &H2A , &H2A , &H20 , &H20 , &H18
DATA &H00 , &H00 , &H20 , &H54 , &H2A , &H0A , &H00 , &H00
DATA &H00 , &H00 , &H00 , &H00 , &H7E , &H00 , &H00 , &H00
DATA &H00 , &H00 , &H00 , &H00 , &H1E , &H20 , &H20 , &H20
DATA &H00 , &H18 , &H20 , &H20 , &HA0 , &H20 , &H20 , &H18
DATA &H20 , &H20 , &H20 , &H20 , &HA0 , &H20 , &H20 , &H18
DATA &H00 , &H18 , &H20 , &H60 , &HA0 , &H60 , &H20 , &H18
DATA &H20 , &H20 , &H20 , &H60 , &HA0 , &H60 , &H20 , &H18
DATA &H00 , &H18 , &H20 , &H24 , &H20 , &H24 , &H20 , &H18
DATA &H20 , &H20 , &H20 , &H24 , &H20 , &H24 , &H20 , &H18
DATA &H00 , &H18 , &H20 , &H24 , &H22 , &H24 , &H20 , &H18
DATA &H20 , &H20 , &H20 , &H24 , &H22 , &H24 , &H20 , &H18
DATA &H00 , &H00 , &H70 , &H98 , &H8A , &HAA , &H8C , &H18
DATA &H20 , &H20 , &H20 , &H28 , &HA4 , &H14 , &H18 , &H30
DATA &H00 , &H00 , &H70 , &H98 , &HAA , &HCA , &HAC , &H18
DATA &H20 , &H20 , &H20 , &H68 , &HA4 , &H54 , &H18 , &H30
DATA &H00 , &H00 , &H70 , &H98 , &H8A , &H8A , &H8C , &H18
DATA &H20 , &H20 , &H20 , &H28 , &H24 , &H14 , &H18 , &H30
DATA &H00 , &H00 , &H00 , &H60 , &H94 , &H95 , &H98 , &H10
DATA &H20 , &H20 , &H20 , &H28 , &H25 , &H14 , &H18 , &H30
DATA &H00 , &H00 , &H00 , &H00 , &H20 , &H44 , &H48 , &H30
DATA &H00 , &H00 , &H00 , &H00 , &H20 , &H40 , &H4A , &H30
DATA &H00 , &H00 , &H00 , &H00 , &H80 , &H80 , &H40 , &H38
DATA &H00 , &H00 , &H00 , &H00 , &H80 , &H80 , &H40 , &H3A
DATA &H00 , &H00 , &H00 , &H00 , &H80 , &H84 , &H42 , &H34
DATA &H00 , &H60 , &H80 , &H70 , &H20 , &H30 , &H20 , &H18
DATA &H20 , &H20 , &H20 , &H30 , &H20 , &H30 , &H20 , &H18
DATA &H00 , &H60 , &H80 , &H70 , &H24 , &H32 , &H24 , &H18
DATA &H20 , &H20 , &H20 , &H30 , &H24 , &H32 , &H24 , &H18
DATA &H00 , &H60 , &H80 , &H60 , &H30 , &H28 , &H28 , &H18
DATA &H20 , &H20 , &H30 , &H20 , &H30 , &H28 , &H28 , &H18
DATA &H00 , &H60 , &H80 , &H60 , &H30 , &H28 , &H2A , &H18
DATA &H20 , &H20 , &H30 , &H20 , &H30 , &H28 , &H2A , &H18
DATA &H00 , &H20 , &H20 , &H3E , &H30 , &H28 , &H28 , &H18
DATA &H20 , &H20 , &H20 , &H3E , &H30 , &H28 , &H2A , &H18
DATA &H00 , &H00 , &H00 , &H00 , &H40 , &HB0 , &HA8 , &HA8
DATA &H00 , &H00 , &H00 , &H00 , &H60 , &HAC , &H94 , &HAC
DATA &H20 , &H20 , &H20 , &H2C , &H14 , &H2C , &H20 , &H20
DATA &H20 , &H20 , &H20 , &H20 , &H20 , &H30 , &H28 , &H28
DATA &H00 , &H00 , &H00 , &H00 , &H40 , &HB0 , &HAA , &HA8
DATA &H00 , &H00 , &H00 , &H00 , &H60 , &HAC , &H96 , &HAC
DATA &H20 , &H20 , &H20 , &H2C , &H15 , &H2C , &H20 , &H20
DATA &H20 , &H20 , &H20 , &H20 , &H20 , &H30 , &H2A , &H28
DATA &H00 , &H10 , &H20 , &H20 , &H20 , &H38 , &H2A , &H38
DATA &H20 , &H20 , &H20 , &H20 , &H20 , &H38 , &H2A , &H38
DATA &H00 , &H00 , &H70 , &H80 , &HBA , &HA8 , &HBA , &H70
DATA &H20 , &H20 , &H20 , &H20 , &H20 , &H3A , &H28 , &H3A
DATA &H00 , &H30 , &H20 , &H20 , &H20 , &H28 , &H34 , &H32
DATA &H20 , &H20 , &H20 , &H20 , &H20 , &H28 , &H34 , &H32
DATA &H00 , &H30 , &H20 , &H20 , &H24 , &H2A , &H34 , &H32
DATA &H20 , &H20 , &H20 , &H20 , &H24 , &H2A , &H34 , &H32
DATA &H00 , &H00 , &H60 , &H80 , &H80 , &H80 , &H80 , &H7E
DATA &H00 , &H00 , &H00 , &H00 , &H3E , &H20 , &H20 , &H1E
DATA &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H20 , &H1E
DATA &H00 , &H00 , &HE0 , &H10 , &H30 , &H48 , &H48 , &H30
DATA &H20 , &H20 , &H20 , &H20 , &H20 , &H50 , &H48 , &H30
DATA &H00 , &H00 , &H00 , &H70 , &H80 , &H84 , &H80 , &H70
DATA &H20 , &H20 , &H20 , &H20 , &H24 , &H20 , &H20 , &H18
DATA &H00 , &H00 , &H00 , &H00 , &H00 , &HB8 , &HA4 , &H7C
DATA &H00 , &H00 , &H00 , &H00 , &H00 , &H18 , &H24 , &H38
DATA &H20 , &H20 , &H30 , &H4C , &H78 , &H48 , &H30 , &H20
DATA &H20 , &H20 , &H20 , &H30 , &H4C , &H78 , &H48 , &H30
DATA &H00 , &H60 , &H80 , &H80 , &HA0 , &H50 , &H10 , &H20
DATA &H00 , &H60 , &H80 , &H80 , &H98 , &HA4 , &H64 , &H04
DATA &H20 , &H20 , &H20 , &HA0 , &H20 , &HA0 , &H20 , &H18
| نظر |
|
|
||||||||
|
||||||||
|
||||||||
|
||||||||