'Рабочий код на графический ЖКИ 128*64 с контроллером ST7920, модель JN12864J V1.2
'Подключено 8-битной шиной,
'Вывод Psb подключить на плюс питания (через резистор 1-10 ком) - это выбор параллельной шины обмена
'В теле кода есть два обращения к порту напрямую, учитывайте при переназначении выводов!
' изменить fuse для откл JTAG !!! иначе PortC не весь будет работать
$regfile = "m16def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 20
$framesize = 40
$baud = 9600
Const Delay_us_glcd = 55
Declare Sub Lcdstart()
Declare Sub Lcdimgcls()
Declare Sub Lcdcommand(ir As Byte)
Declare Sub Lcdwrite(dr_en As Byte)
Declare Function Lcdget() As Byte
Declare Sub Showstr(zf As String)
Declare Sub Point(x As Byte , Y As Byte)
Declare Sub Lcdline(px1 As Byte , Py1 As Byte , Px2 As Byte , Py2 As Byte )
Declare Sub Lcdcircle(px1 As Byte , Py1 As Byte , Rcircle As Byte)
Outport Alias Portb
Getport Alias Pinb
Config Outport = Output
Rs Alias Portc.4 'H: Data L: Instruction Code
Rw Alias Portc.5 'H: Read L: Write
E Alias Portc.6
Glcd_light Alias Portc.2
Led Alias Portc.3
Speaker Alias Portc.7
Config Portc = Output
Dim Yg As Word , Xg As Word , T_x As Byte , T_y As Byte
Dim Mybyte As Byte , Mybyte_1 As Byte , Mybyte_2 As Byte
Dim Myword As Word
Dim Lcdstr As String * 32
Dim Lcdx As Byte , Lcdy As Byte
Dim Pstx As Byte , Psty As Byte
Dim Xx1 As Byte , Yy1 As Byte , Xx2 As Byte , Yy2 As Byte
Dim K As Single , Mysingle As Single
Dim Dx As Integer , Dy As Integer
Dim X As Byte , Y As Byte , Xi As Byte , Yi As Byte
Dim Xadrs As Byte , Yadrs As Byte , Xpos As Byte
Dim Byteh As Byte , Bytel As Byte
Const Pi = 3.1416
'======================================================================================
For Mybyte = 220 To 100 Step -30
Mybyte_1 = Mybyte + 20
Sound Speaker , 350 , Mybyte ' Нога, длительность, частота. Чем выше частота, тем дольше
Toggle Led : Waitms 50
Next
Glcd_light = 1 ' Включим подсветку ЖКИ
Do
Call Lcdstart
Mybyte = &B_1000_0000 : Lcdcommand Mybyte
Lcdstr = "Danilin Alexandr " : Showstr Lcdstr
Mybyte = &B_1001_1000 : Lcdcommand Mybyte
Lcdstr = "Ugolok-Mastera.ru" : Showstr Lcdstr
Wait 2
Call Lcdstart
Mybyte = &B_0011_0100 : Lcdcommand Mybyte ' EXTENDEN instruction
Mybyte = &B_0011_0110 : Lcdcommand Mybyte ' GRAGIC display On
Call Lcdimgcls
' Рисуем прямоугольник
Psty = 0
For Pstx = 0 To 127 Step 1
Point Pstx , Psty
Next
Pstx = 127
For Psty = 0 To 63 Step 1
Point Pstx , Psty
Next
Psty = 63
For Pstx = 127 To 0 Step -1
Point Pstx , Psty
Next
Pstx = 0
For Psty = 63 To 1 Step -1
Point Pstx , Psty
Next
Wait 2
' Рисуем линии
Xx1 = 1 : Yy1 = 1 : Xx2 = 127 : Yy2 = 63
Lcdline Xx1 , Yy1 , Xx2 , Yy2
Xx1 = 0 : Yy1 = 63 : Xx2 = 127 : Yy2 = 0
Lcdline Xx1 , Yy1 , Xx2 , Yy2
Wait 2
' Рисуем круги
Pstx = 30 : Psty = 18 : Mybyte = 15
Lcdcircle Pstx , Psty , Mybyte
Pstx = 61 : Psty = 18 : Mybyte = 15
Lcdcircle Pstx , Psty , Mybyte
Pstx = 92 : Psty = 18 : Mybyte = 15
Lcdcircle Pstx , Psty , Mybyte
Pstx = 45 : Psty = 35 : Mybyte = 15
Lcdcircle Pstx , Psty , Mybyte
Pstx = 76 : Psty = 35 : Mybyte = 15
Lcdcircle Pstx , Psty , Mybyte
Wait 3
' Отображаем картинку
Restore Dta1
For Lcdy = 128 To 159 ' 128...159 =31
For Lcdx = 128 To 135 ' 128...143 =15 ' 128 to 135 = верх 136 to 143 = низ
Read Mybyte_1
Read Mybyte_2
Lcdcommand Lcdy
Lcdcommand Lcdx
Lcdwrite Mybyte_1 ' левая половина, Старщая = H
Lcdwrite Mybyte_2 ' правая половина, Младшая= L
Next
Next
For Lcdy = 128 To 159 ' 128...159 =31
For Lcdx = 136 To 143 ' 128...143 =15 ' 128 to 135 = верх 136 to 143 = низ
Read Mybyte_1
Read Mybyte_2
Lcdcommand Lcdy
Lcdcommand Lcdx
Lcdwrite Mybyte_1 ' левая половина, Старщая = H
Lcdwrite Mybyte_2 ' правая половина, Младшая= L
Next
Next
Wait 3
Loop
' ===============================================================================
Sub Lcdstart()
Reset Rw : Reset E : Waitms 50
Mybyte = &B_0011_0000 : Lcdcommand Mybyte : Waitms 150 ' Set 8-bit interface
Mybyte = &B_0011_0000 : Lcdcommand Mybyte
Mybyte = &B_0000_0001 : Lcdcommand Mybyte : Waitms 2 ' Clear Display
Mybyte = &B_0000_0110 : Lcdcommand Mybyte ' Entry Mode Set
Mybyte = &B_0000_1100 : Lcdcommand Mybyte ' Control Display
End Sub
Function Lcdget()as Byte
E = 0 : Rs = 1 : Rw = 1
E = 1
Config Outport = Input ' Input
' nop
Lcdget = Getport ' Read
' nop
E = 0
Rw = 0
Waitus Delay_us_glcd
Config Outport = Output
End Function
Sub Lcdcommand(ir As Byte)
E = 0
Rs = 0
E = 1
' nop
Outport = Ir
' nop
E = 0
Waitus Delay_us_glcd
End Sub
Sub Lcdwrite(dr_en As Byte)
E = 0
Rs = 1
E = 1
' nop
Outport = Dr_en
' nop
E = 0
Waitus Delay_us_glcd
End Sub
Sub Lcdimgcls()
Mybyte = &H00
For Lcdx = &H80 To &B10001111 ' 128...143 =15 (d143 h8F)
For Lcdy = &H80 To &B10011111 ' 128...159 =31 (d159 h9F)
Lcdcommand Lcdy
Lcdcommand Lcdx
Lcdwrite Mybyte
Lcdwrite Mybyte
Next
Next
End Sub
Sub Showstr(zf As String)
Local T As Byte , I As Byte , Zf1 As String * 1
Zf = Format(zf , "00")
For T = 1 To Len(zf)
Zf1 = Mid(zf , T , 1)
I = Asc(zf1)
Lcdwrite I
Next
End Sub
Sub Point(x As Byte , Y As Byte )
' (0,0)-(127,63)
Xadrs = X \ 16
Xpos = X Mod 16
Yadrs = Y \ 32
Yadrs = Yadrs * 8
Xadrs = Xadrs + Yadrs
Yadrs = Y Mod 32
Xadrs = Xadrs + &H80
Yadrs = Yadrs + &H80
Lcdcommand Yadrs
Lcdcommand Xadrs
Byteh = Lcdget()
Byteh = Lcdget()
Bytel = Lcdget()
If Xpos < 8 Then
Xpos = 7 - Xpos
Xpos = 2 ^ Xpos
Byteh = Byteh Or Xpos
Else
Xpos = 15 - Xpos
Xpos = 2 ^ Xpos
Bytel = Bytel Or Xpos
End If
Lcdcommand Yadrs
Lcdcommand Xadrs
Lcdwrite Byteh
Lcdwrite Bytel
End Sub
Sub Lcdline(px1 As Byte , Py1 As Byte , Px2 As Byte , Py2 As Byte )
Dy = Py2 - Py1 : Dx = Px2 - Px1
If Dy = 0 And Dx = 0 Then
Point Px1 , Py1
Exit Sub
End If
If Dy = 0 Then
If Px1 > Px2 Then
For X = Px1 To Px2 Step -1
Point X , Py1
Next
Else
For X = Px1 To Px2 Step 1
Point X , Py1
Next
End If
Exit Sub
End If
If Dx = 0 Then
If Py1 > Py2 Then
For Y = Py1 To Py2 Step -1
Point Px1 , Y
Next
Else
For Y = Py1 To Py2 Step 1
Point Px1 , Y
Next
End If
Exit Sub
End If
Xi = Abs(dx) : Yi = Abs(dy)
If Xi > Yi Then
K = Dy / Dx '°ґXЦбјЖЛг
If Px1 > Px2 Then
For X = Px1 To Px2 Step -1
Yi = X - Px1
Yi = K * Yi
Y = Py1 + Yi
Point X , Y
Next
Else
For X = Px1 To Px2 Step 1
Yi = X - Px1
Yi = K * Yi
Y = Py1 + Yi
Point X , Y
Next
End If
Else
K = Dx / Dy '°ґYЦбјЖЛг
If Py1 > Py2 Then
For Y = Py1 To Py2 Step -1
Xi = Y - Py1
Xi = K * Xi
X = Px1 + Xi
Point X , Y
Next
Else
For Y = Py1 To Py2 Step 1
Xi = Y - Py1
Xi = K * Xi
X = Px1 + Xi
Point X , Y
Next
End If
End If
End Sub
Sub Lcdcircle(px1 As Byte , Py1 As Byte , Rcircle As Byte)
For Myword = 0 To 359 Step 2
Mysingle = Myword
K = Deg2rad(mysingle)
Mysingle = Sin(k)
Mysingle = Mysingle * Rcircle
Xx1 = Mysingle + Px1
Mysingle = Cos(k)
Mysingle = Mysingle * Rcircle
Yy1 = Mysingle + Py1
Point Xx1 , Yy1
Next
End Sub
' ------------------------------------------
' Picture name: 111b_bmp
' Picture size: Width=128, Height=64 pixels
' ------------------------------------------
Dta1:
Data _
&H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , _
&H00 , &H3F , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFC , &H00 , _
&H03 , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HE0 , _
&H07 , &HE0 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H01 , &HF0 , _
&H0e , &H00 , &H3C , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H1E , &H00 , &H38 , _
&H1c , &H00 , &H7F , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &H00 , &H1C , _
&H38 , &H00 , &H7F , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &H00 , &H0C , _
&H30 , &H00 , &H3F , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFE , &H00 , &H06 , _
&H30 , &H00 , &H07 , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HF8 , &H00 , &H06 , _
&H30 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H06 , _
&H60 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H06 , _
&H60 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H06 , _
&H60 , &H3C , &H0F , &H00 , &H01 , &HFE , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H06 , _
&H60 , &H7F , &HFF , &H80 , &H03 , &HFF , &H00 , &H00 , &H00 , &H0E , &H00 , &H78 , &H00 , &H00 , &H00 , &H06 , _
&H60 , &HFF , &HFF , &HC0 , &H07 , &HFF , &H80 , &H00 , &H00 , &H1F , &H00 , &HFC , &H00 , &H00 , &H00 , &H06 , _
Dta2:
Data _
&H60 , &HFF , &HFF , &HC0 , &H0F , &HFF , &H80 , &H00 , &H00 , &H3F , &H81 , &HFE , &H00 , &H00 , &H00 , &H06 , _
&H60 , &HFF , &HFF , &HC0 , &H1F , &HFF , &H80 , &H00 , &H00 , &H3F , &H81 , &HFE , &H00 , &H00 , &H00 , &H06 , _
&H60 , &H7F , &HFF , &HC0 , &H1F , &HFF , &H00 , &H00 , &H00 , &H3F , &H81 , &HFE , &H00 , &H00 , &H00 , &H06 , _
&H60 , &H3F , &HFF , &HC0 , &H1F , &HFE , &H00 , &H00 , &H00 , &H3F , &H81 , &HFC , &H00 , &H00 , &H00 , &H06 , _
&H60 , &H1F , &HFF , &HC0 , &H1F , &HC0 , &H00 , &H00 , &H00 , &H3F , &H81 , &HFC , &H00 , &H00 , &H00 , &H06 , _
&H60 , &H00 , &H1F , &HC0 , &H1F , &HC0 , &H00 , &H00 , &H00 , &H3F , &H81 , &HFC , &H00 , &H00 , &H00 , &H06 , _
&H60 , &H00 , &H1F , &HC0 , &H1F , &HC0 , &H00 , &H7E , &H00 , &H3F , &H81 , &HFC , &H00 , &H00 , &H00 , &H06 , _
&H60 , &H00 , &H1F , &HC0 , &H1F , &HC0 , &H00 , &HFF , &HC0 , &H3F , &H81 , &HFC , &H00 , &H00 , &H00 , &H06 , _
&H60 , &H00 , &H1F , &HC0 , &H1F , &HC0 , &H01 , &HFF , &HE0 , &H3F , &H81 , &HFC , &H00 , &H0F , &H00 , &H06 , _
&H60 , &H00 , &H1F , &HC0 , &H1F , &HC0 , &H03 , &HFF , &HF0 , &H3F , &H81 , &HFC , &H00 , &HFF , &HE0 , &H06 , _
&H60 , &H00 , &H1F , &HE0 , &H1F , &HC0 , &H07 , &HFF , &HF8 , &H3F , &H81 , &HFC , &H01 , &HFF , &HF0 , &H06 , _
&H60 , &H00 , &H1F , &HE0 , &H1F , &HC0 , &H07 , &HFF , &HFC , &H3F , &H81 , &HFC , &H03 , &HFF , &HF8 , &H06 , _
&H60 , &H00 , &H1F , &HE0 , &H1F , &HC0 , &H07 , &HFF , &HFC , &H3F , &H81 , &HFC , &H07 , &HFF , &HFC , &H06 , _
&H60 , &H00 , &H0F , &HE0 , &H1F , &HC0 , &H0F , &HFF , &HFE , &H3F , &H81 , &HFC , &H07 , &HFF , &HFE , &H06 , _
&H60 , &H00 , &H0F , &HFF , &HFF , &HC0 , &H0F , &HF1 , &HFE , &H3F , &H81 , &HFC , &H0F , &HFF , &HFE , &H06 , _
Dta3:
Data _
&H60 , &H00 , &H0F , &HFF , &HFF , &HC0 , &H0F , &HF1 , &HFE , &H3F , &H81 , &HFC , &H0F , &HF1 , &HFE , &H06 , _
&H60 , &H00 , &H0F , &HFF , &HFF , &HC0 , &H1F , &HE0 , &HFE , &H3F , &H81 , &HFC , &H0F , &HF0 , &HFE , &H06 , _
&H60 , &H00 , &H0F , &HFF , &HFF , &HC0 , &H1F , &HF1 , &HFE , &H3F , &H81 , &HFC , &H0F , &HE0 , &HFE , &H06 , _
&H60 , &H00 , &H0F , &HFF , &HFF , &HC0 , &H1F , &HFF , &HFE , &H3F , &H81 , &HFC , &H0F , &HE0 , &H7E , &H06 , _
&H60 , &H00 , &H0F , &HFF , &HFF , &HC0 , &H1F , &HFF , &HFE , &H3F , &H81 , &HFC , &H0F , &HC0 , &H7E , &H06 , _
&H60 , &H00 , &H0F , &HFF , &HFF , &HC0 , &H1F , &HFF , &HFC , &H3F , &H81 , &HFC , &H0F , &HC0 , &H7E , &H06 , _
&H60 , &H00 , &H07 , &HF0 , &H1F , &HC0 , &H1F , &HFF , &HF8 , &H3F , &H81 , &HFC , &H0F , &HC0 , &H7E , &H06 , _
&H60 , &H00 , &H07 , &HF0 , &H1F , &HC0 , &H1F , &HFF , &HF0 , &H3F , &HC1 , &HFC , &H0F , &HC0 , &H7E , &H06 , _
&H60 , &H00 , &H07 , &HF0 , &H1F , &HC0 , &H1F , &HFF , &HC0 , &H3F , &HC1 , &HFC , &H0F , &HE0 , &H7E , &H06 , _
&H60 , &H00 , &H07 , &HF0 , &H1F , &HC0 , &H1F , &HFF , &H00 , &H3F , &HC1 , &HFC , &H0F , &HE0 , &HFE , &H06 , _
&H60 , &H00 , &H07 , &HF0 , &H1F , &HC0 , &H1F , &HE0 , &H00 , &H1F , &HC1 , &HFC , &H0F , &HF1 , &HFE , &H06 , _
&H60 , &H00 , &H07 , &HF0 , &H1F , &HC0 , &H1F , &HE0 , &H00 , &H1F , &HC1 , &HFC , &H0F , &HFF , &HFE , &H06 , _
&H60 , &H00 , &H07 , &HF0 , &H1F , &HC0 , &H0F , &HFF , &HE0 , &H1F , &HC1 , &HFC , &H0F , &HFF , &HFC , &H06 , _
&H60 , &H00 , &HEF , &HF0 , &H1F , &HC0 , &H07 , &HFF , &HF0 , &H3F , &HC1 , &HFC , &H07 , &HFF , &HF8 , &H06 , _
&H60 , &H01 , &HFF , &HF0 , &H1F , &HF8 , &H03 , &HFF , &HF0 , &H3F , &HC1 , &HFC , &H07 , &HFF , &HF8 , &H06 , _
Dta4:
Data _
&H60 , &H03 , &HFF , &HF0 , &H1F , &HFC , &H03 , &HFF , &HF0 , &H3F , &HC1 , &HFC , &H03 , &HFF , &HF0 , &H06 , _
&H60 , &H07 , &HFF , &HE0 , &H1F , &HFE , &H00 , &HFF , &HF0 , &H3F , &HC1 , &HFC , &H01 , &HFF , &HE0 , &H06 , _
&H60 , &H07 , &HFF , &HE0 , &H0F , &HFE , &H00 , &H7F , &HE0 , &H1F , &H80 , &HF8 , &H00 , &HFF , &HC0 , &H06 , _
&H60 , &H07 , &HFF , &HC0 , &H07 , &HFE , &H00 , &H01 , &HC0 , &H0F , &H00 , &H70 , &H00 , &H7F , &H00 , &H06 , _
&H60 , &H07 , &HFF , &H80 , &H03 , &HFC , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H06 , _
&H60 , &H03 , &HFF , &H00 , &H01 , &HF8 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H06 , _
&H60 , &H01 , &HFE , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H06 , _
&H60 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H06 , _
&H60 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H06 , _
&H60 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H06 , _
&H30 , &H07 , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &H80 , &H06 , _
&H30 , &H1F , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HE0 , &H06 , _
&H30 , &H3F , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HF0 , &H06 , _
&H38 , &H3F , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HF0 , &H0C , _
&H1c , &H1E , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &HE0 , &H1C , _
Dta5:
Data _
&H0e , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H38 , _
&H07 , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HF0 , _
&H03 , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HFF , &HE0 , _
&H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , &H00 , _