Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Исходники » ST7920 графический ЖКИ 128*64 и Bascom


ST7920 графический ЖКИ 128*64 и Bascom

Сообщений 1 страница 30 из 74

1

Может кому пригодится рабочий код на графический ЖКИ 128*64 с контроллером ST7920, модель JN12864J V1.2

подключено 8-битной шиной, вывод Psb  подключить на плюс питания (через резистор 1-10 ком) - это выбор параллельной шины обмена
ДЛЯ AVR ATMEGA8

в теле кода есть два обращения к порту напрямую, учитывайте при переназначении выводов!

Код:
'Рабочий код на графический ЖКИ 128*64 с контроллером ST7920, модель JN12864J V1.2
'Подключено 8-битной шиной,
'Вывод Psb  подключить на плюс питания (через резистор 1-10 ком) - это выбор параллельной шины обмена
'В теле кода есть два обращения к порту напрямую, учитывайте при переназначении выводов!

'Для AVR ATMEGA8



$regfile = "m8def.dat"
$crystal = 8000000

$hwstack = 32
$swstack = 20
$framesize = 40

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
Config Rs = Output

Rw Alias Portc.3                   'H: Read    L: Write
Config Rw = Output

E Alias Portc.2
Config E = Output

Rst Alias Portc.0
Config Rst = Output


Dim Mybyte 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
Dim 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


   Call Lcdstart

   Mybyte = &B_1001_1000 : Lcdcommand Mybyte

   Lcdstr = "ST7920.BascomAvr" : Showstr Lcdstr


   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
      Point Pstx , Psty
   Next


   Pstx = 0
   For Psty = 0 To 63
      Point Pstx , Psty
   Next


   Pstx = 127
   For Psty = 0 To 63
      Point Pstx , Psty
   Next


   Psty = 63
   For Pstx = 0 To 127
      Point Pstx , Psty
   Next



   Pstx = 35 : Psty = 17 : Mybyte = 15
   Lcdcircle Pstx , Psty , Mybyte

   Pstx = 66 : Psty = 17 : Mybyte = 15
   Lcdcircle Pstx , Psty , Mybyte

   Pstx = 97 : Psty = 17 : Mybyte = 15
   Lcdcircle Pstx , Psty , Mybyte

   Pstx = 50 : Psty = 34 : Mybyte = 15
   Lcdcircle Pstx , Psty , Mybyte

   Pstx = 81 : Psty = 34 : Mybyte = 15
   Lcdcircle Pstx , Psty , Mybyte


   Xx1 = 0 : Yy1 = 49 : Xx2 = 127 : Yy2 = 49
   Lcdline Xx1 , Yy1 , Xx2 , Yy2


Wait 2


   Xx1 = 0 : Yy1 = 0 : Xx2 = 127 : Yy2 = 49
   Lcdline Xx1 , Yy1 , Xx2 , Yy2

   Xx1 = 0 : Yy1 = 49 : Xx2 = 127 : Yy2 = 0
   Lcdline Xx1 , Yy1 , Xx2 , Yy2



End



Sub Lcdstart()
   Reset Rst : Waitms 50 : Set Rst

   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       ' Clear Display
   Waitms 2

   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 80
   Config Outport = Output
End Function



Sub Lcdcommand(ir As Byte)
   E = 0
   Rs = 0
   E = 1
   nop
   Outport = Ir
   nop
   E = 0
   Waitus 80
End Sub


Sub Lcdwrite(dr_en As Byte)
   E = 0
   Rs = 1
   E = 1
   nop
   Outport = Dr_en
   nop
   E = 0
   Waitus 80
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 Lcdimgcls()
   Mybyte = &H00
   For Lcdx = &H80 To &B10001111
      For Lcdy = &H80 To &B10011111
         Lcdcommand Lcdy
         Lcdcommand Lcdx
         Lcdwrite Mybyte
         Lcdwrite Mybyte
      Next
   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
      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
      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

+1

2

Неплохо бы:
а) ссылочку где покупал ну или нечто подобное
б) схему подключения - чисто так для наглядности
в) комментарии в программе - что зачем - проще разбираться

Отредактировано pchela5 (2012-07-31 16:44:24)

0

3

покупал на Ebay
введёте указанный тип ЖКИ и смотрите тип контроллера
НО покупать не советую - он не поддерживается библиотеками Баском. Т.е., с ним неудобно работать из-за этого.

схема - рисовать лень,  всё же в коде видно и комментарии есть. В добавок, в разных версиях может быть (и есть) разная распиновка

комметарии зачем? всё по названию переменных, плдпрограмм и функций видно
Showstr - показать строку
Point - отобразить точку
Lcdline - линия
Lcdcircle - окружность

0

4

пример как выше, плюс отображение графики

Код:
'Рабочий код на графический ЖКИ 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 , _

+1

5

Рад сообщить, 12864B v2.0 заработал, но всё очень крупное и ушло куда-то не туда. Производитель типа - 點陣液晶顯屏 尺寸  :D
На psd сопротивление 1к.
Причём шину данных даже переворачивал и всё равно чего-то казал.
http://sa.uploads.ru/t/JGIxC.jpg

Отредактировано Ev3658 (2014-11-29 23:54:58)

0

6

Ev3658 написал(а):

Но оказывается он ещё и SPI может работать. Может кто видел описание? Рылся целые сутки, но нигде не встречал, всё какое-то не то.

Здесь вариант работы по SPI

+1

7

СПАСИБО!!!!!  :rofl:
http://habrastorage.org/getpro/habr/post_images/742/457/907/7424579074f90a111e467edbbcf1b22e.png

Опробовал, сперва не пошло.
Оказалось в "Lcd_hbl Alias Portd.5" чего-то замудрённое, на другой порт перебросил, попёрло. Подсказал добрый осциллограф.

Вот, ещё нарыл одну интересную информацию!!!
http://habrahabr.ru/post/213459/
http://sa.uploads.ru/t/Uombq.jpg
P:S: Вместо Русского Китайскай  :hobo: и это не помогает - http://roboforum.ru/forum2/topic6495.html

Отредактировано Ev3658 (2014-11-30 16:15:06)

0

8

У него что, знакогенератор на борту?

Если нужны шрифты:

здесь описано и показано, как это сделать.

Отредактировано sasha_1973 (2014-11-30 17:22:21)

+1

9

sasha_1973 написал(а):

У него что, знакогенератор на борту?

Совершенно точно, зашиты символы. Вник в исходник и был удивлён ) там просто код символа отсылают, а экран затирают "20" символом  :canthearyou:
Перед тем, как знаки рисовать, нужно разобраться, как рисовать точки по SPI.

Отредактировано Ev3658 (2014-11-30 20:15:08)

0

10

Ev3658 написал(а):

нужно разобраться, как рисовать точки по SPI.

Отредактировано Ev3658 (Вчера 20:15:08)


в моём коде, что выше указан, всё это есть
не ленитесь

куда выложить даташит на этот контроллер?

0

11

В коде используется шина 8 бит и ещё 3 бита управления, соблазн SPI очень велик, всего 3 бита, экономия выводов.

Александр Д. написал(а):

...куда выложить даташит на этот контроллер?

Скормите ev3658&я.ру ) Или сюда как ниудь )

Отредактировано Ev3658 (2014-12-01 11:31:24)

0

12

привыкните писать в одну тему!! угадывай, куда вы напишите в очередной раз...

вы невнимательны!!!
'Подключено последовательной шиной, вывод 15 (Psb) подключить на минус   
подключить MT-12864A

0

13

Александр Д. написал(а):

привыкните писать в одну тему!! угадывай, куда вы напишите в очередной раз...

вы невнимательны!!!
'Подключено последовательной шиной, вывод 15 (Psb) подключить на минус   
подключить MT-12864A

У меня не то, что MT-12864B v2.0, а даже "MT" нет, просто написано 12864B v2.0. И наклейка с приветом 點陣液晶顯屏  :D
Пробовал как написано в этой теме - работает, но с глюками. Я этот экран ещё пробовал по SPI подключать, это в другой теме было написано, но он работает как текстовый и вместо русского привет из 點陣液晶顯屏.
Не подскажите, почему с графикой такое?
http://sa.uploads.ru/t/JGIxC.jpg

Отредактировано Ev3658 (2014-12-04 11:55:08)

0

14

Выкладываю кусок рабочего кода для экспериментаторов, выдрал команды с первого поста, спасибо  :glasses:

Код:
$regfile = "m128def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32






Op Alias Portd
Config Op = Output


Rs Alias Portg.3                                            'H: Data    L: Instruction Code
Config Rs = Output

Rw Alias Portg.4                                            'H: Read    L: Write
Config Rw = Output

E Alias Portg.1
Config E = Output

Rst Alias Portg.2
Config Rst = Output


'Waitms 40
'Rst = 0
'Waitms 40
'Rst = 1
'Waitms 40
'Rst = 0

Reset Rst

Waitms 150
Set Rst

Reset Rw
Reset E

Waitms 50


E = 0
Rs = 0
Rw = 0
Waitms 1
E = 1
Op = &B_0011_0000                                           'устанавливаем 8 бит передачу данных и набор базовых команд
Waitms 1
E = 0
Waitms 120


E = 0
Rs = 0
Rw = 0
Waitms 50
E = 1
Op = &B_0000_1100                                           'включение дисплея и отклчюение курсора и его моргания
Waitms 50
E = 0
Waitms 120

E = 0
Rs = 1
Rw = 0
Waitms 50
E = 1
Op = Asc( "D")  'отправляем букву как данные, а не команду, глазни RS
Waitms 50
E = 0
Rw = 1

Waitms 120
Wait 5

Появится буква "Д"

А есть у кого команды на русском языке?
Не могу вкурить ещё, как графику выводить.
Описание команд взял от седова - http://habrahabr.ru/post/213459/

Чего-то раскурить не могу  :hobo:
С LCD что-то принимаем, после сам синтаксис = ситаксис OR ситаксис, если не трудно, поделитесь пищей для мозга? Пожалуйста.

Код:
 
...
...
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 80
   Config Outport = Output
End Function
...
...

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
...
...

Или проще, как поставить точку (пиксель в области экрана?
Координаты задаю командой, посылаю два байта, дальеш данные буквы -  буква смещается. А как точку перемещать, как её включить то?

Добавлено спустя 1 день 16 часов 31 минуту 23 секунды:
http://sf.uploads.ru/t/LxiQ3.jpg

Отредактировано Ev3658 (2014-12-15 18:33:09)

0

15

Съездил на радио рынок, проверил первый пример на 3х других LCD, у всех одно и тоже:
http://sa.uploads.ru/t/JGIxC.jpg
Только линий не видно. Линии как-то в начале были с другого МК (мега32), но после они пропали, на другом МК Мега128 тоже самое. Кварц 8 мегагерц.
Datasheet сравнил с кодами в первом примере, всё совпадает. Но на деле LCD отказывается выводить графику.  :canthearyou:

0

16

Ты попробуй выше 8 мгц задрать, у меня при меньше всегда глючило вывод. Вроде об этом даже в хелпе было.

Отредактировано Skull (2014-12-16 13:13:49)

0

17

Не помогло. Кварц и 16 и 14 и 8 ставил. В коде указывал. Задержки в код ставил. рисует квадратами, как будто адреса другие.
Адрес X-Y совпадает, а адресация пикселов ячейки нет.
Фотоаппарат сел, но вот кадр успел, рисуется медленно закрашенными секторами:
https://pp.vk.me/c623920/v623920961/cfa0/XgkjpU--0BY.jpg

Отредактировано Ev3658 (2014-12-16 18:12:48)

0

18

Ой... оёёёй... как же мне стыдно...  :shine:
Ща, стыд отойдёт и я напишу, почему всё не работало  :nope:

+1

19

Ev3658 написал(а):

напишу, почему всё не работало


Ждём с нетерпением!

"Не ошибается тот, кто ничего не делает!"

0

20

Я не сделал обратную связь. Забыл, что один и тот-же порт может иметь два алиаса. Подумал в начале, что просто на LCD выходят какие-то данные при приёме и закомментировал Lcdget = Getport .
Вот не пойму, зачем обратная связь с МК? Для проверки данных или чего тут, может подскажите, облегчите мозгу жизнь )

Отредактировано Ev3658 (2014-12-17 19:05:34)

0

21

В некоторых SSD1306 для более быстрой передачи (свободен или нет).

0

22

А тут другое шаманство, принимает, что-то по порту.

Код:
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 80
   Config Outport = Output
End Function

Дальше использует то, что принял:

Код:
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

Данные принимают из регистра данных (DR).
Причём два раза в Byteh и 1 раз в Bytel

0

23

ПАРНИ, Я В ШОКЕ
Вместо того, чтобы прочитать документацию, вы экспериментировали и бились головой... я же дал исходники с комментариями!
Достаточно было почитать даташит и глянуть на код...
мда - как много вам открытий чудных готовит просвещенья дух....
Хочешь что-то изобрести - загляни, однако, в учебник...

0

24

Александр Д. написал(а):

ПАРНИ, Я В ШОКЕ
Вместо того, чтобы прочитать документацию, вы экспериментировали и бились головой... ...

Ошибаетесь товарищ.  :flag:
https://legalrc.biz/data/avatars/l/61/61410.jpg
Мы документацию даже перевели. :writing:

СПАСИБО БОЛЬШОЕ :yep:  вам за исходный код, поражаюсь над использованием MOD и OR функций :glasses: !
Вы уж извините, двоешник школьный :hobo: , самоучка :idea: , образование не какое, вот учусь на практике. Хочется не использовать готовое, а понять корневой принцип работы, взял на вооружение ограничение значения функцией MOD  :crazy:

Отредактировано Ev3658 (2014-12-18 11:53:31)

0

25

можно подумать, я - гений...
я вообще электрик ))

+2

26

Александр Д. написал(а):

можно подумать, я - гений...
я вообще электрик ))

Ну я тоже ))) Слесарь электрик )))
А может в кратце расскажите в таком стиле:
Команды:
для верхней части экрана
Посылаем адрес GDRAM X (0-15)
Посылаем адрес GDRAM Y (0-63)

Данные:
Отсылаем данные 16 бит в CGRAM
для нижней части экрана
Посылаем адрес GDRAM X (0-15)
Посылаем адрес GDRAM Y (0-63)

Данные:
Отсылаем данные 16 бит в CGRAM

Или сразу надо отсылать адреса верхней части и нижней части экрана. Не могу понять перевод:

Просто не понимаю, как поставить 1 точку в нужном месте?

Графический RAM (GDRAM)
Графический RAM Дисплей поддерживает 64x256 биты битовых памяти. GDRAM адрес указан в письменном виде 2 последовательных байтов для вертикального адрес и горизонтальной адрес. Данные два байта написать GDRAM для одного адреса.
Адрес счетчика автоматически увеличивается на единицу для следующих данных двух байтов.Процедура выполняется следующим образом.
1. Установите вертикальный адрес (Y) для GDRAM
2. Установите горизонтальные адрес (X) для GDRAM
3. Написать D15~D8 в GDRAM 中 (первый байт)
4. Написать D7~D0 в GDRAM 中 (второй байт)


:idea:
Я понял, для чего считывали из LCD данные!!!!
Устанавливали адрес, дальше считывали не пойму, почему два раза lower byte и 1 раз hight byte.
Потом проверяли где есть отключенные точки и если они отключены, а в координате она включена, то включали, логический OR рулит ).   
Короче эффект наложения при рисовании графики. Кстати, так ведь экран можно превратить временно во флешку )
Но почему два раза считывали 8 бит в Byteh и 1 раз в Bytel?
тадаммм!  :crazyfun:
https://pp.vk.me/c624030/v624030961/f1e8/hPX3vFaIw3A.jpg

Отредактировано Ev3658 (2014-12-18 15:09:35)

0

27

Ибо грешен я  :shine:
Простите за будущий пост. С детства Declare SUB Call и т.п. разобраться не могу.
Так уж чего-то я намудрил с вашими исходниками, добавил, намазюкал. Скоро выложу с возможностью рисовать и выводить текст.
Но есть шанс мне ещё искупить свои грехи, правда нужна тупая инфомрация.
Если вызываю процедуру Call Point(x.y) в процедуре Text1(strin,x,y), оно должно работать? У меня моск вскипел. Не работает процедура в процедуре ((( Там лимит есть дерева углубления?
Если я это не познаю, всё...всё будет в Gosub`ах и Goto  :D

Отредактировано Ev3658 (2014-12-20 01:38:54)

0

28

Ev3658 написал(а):

Если я это не познаю, всё...всё будет в Gosub`ах и Goto

Самое правильное решение!

В процедурах и функциях, Bascom ведёт себя довольно непредсказуемо.

+2

29

Помогите пожалуйста. Тёмный лес у меня. Не могу, ошибка 112.

Код:
Declare Sub Text1(txt1 As String * 20 , X3 As Byte , Y3 As Byte) 
...
..
..
..
..
Dim P As Byte
Dim O As Word
Dim S As String * 1
Dim M As Byte
Dim L As Byte
Dim Txt1 As String * 20

Dim P1 As Byte
Dim O1 As Word
Dim St1 As String * 1
Dim S1 As Word
Dim S2 As Word
Dim M1 As Byte
Dim L1 As Byte
Dim Lin1 As Byte
Dim X1 As Byte : Dim Y1 As Byte
Dim Y3 As Byte : Dim X3 As Byte
...
...
...


Txt1 = "asd"
   Call Text1(txt1 , 1 , 1) ' --------------две ошибки BYVAL should in declaration [[112]]

end 
......
Sub Text1(txt1 As String * 20 , X3 As Byte , Y3 As Byte)

X3 = 1
Txt1 = "sdd"
L1 = Len(txt1)
For P1 = 1 To L1
   St1 = Mid(txt1 , P1 , 1)
   S1 = Asc(st1)
   S1 = S1 - 32
   If S1 > 159 Then S1 = S1 - 64
   S1 = S1 * 6
   S2 = S1 + 6
   X1 = P1 - 1
   X1 = X1 * 6
   X1 = X1 + X3

   For O1 = S1 To S2
      Lin1 = Lookup(o1 , Fonts)
      Y1 = Y3
      For M1 = 0 To 7
         If Lin1.m1 = 1 Then
         Point X1 , Y1
         End If
         Y1 = Y1 + 1
      Next M1
   X1 = X1 + 1
   Next O1
Next P1

End Sub

Шрифт выводит нормально, но вот в SUB загнать не могу (.
Сам шрифт взял из Nocia-1100 library.inc

Код:
$inc Fonts , 960 , "fonts.inc"

Пробовал и BYVAL добавлять и так вызывать: Text1 "asd",1,1 и не в какую. даже локальные переменные и т.п. Ошибка либо 18 либо 112.
Причём вот так работает:

Код:
Declare Sub Text1()   
.....
...
Sub Text1()

И вот так тоже работает!!!!

Код:
Declare Sub Text1(byval Txt1 As String * 20)  
...
...
Text1 "Проверка" 
...
...
Sub Text1(byval Txt1 As String * 20)

Отредактировано Ev3658 (2014-12-21 01:41:09)

0

30

Ev3658 написал(а):

но вот в SUB загнать не могу

Шрифты закинул на mail.

Процедура, думаю непосредственно малевание символов, разложите сами

$map       ' Получаем карту распределения памяти в отчёте компиляции
  $regfile = "m328pdef.dat"       ' Используемый контроллер
  $crystal = 8000000       ' Частота работы контроллера
  $framesize = 32       ' Размер области используемой для преобразований
  $hwstack = 40       ' Размер аппаратного стека
  $swstack = 16       ' Размер программного стека


  Declare Sub Lcd_text(byval Copy_str As String * 20 , Byval Copy_x As Byte , Byval Copy_y As Byte)


'===============================================================================
  Do
'===============================================================================

     Restore Font_6x8
     Lcd_text "Приветик!" , 1 , 1

'===============================================================================
  Loop
End
'===============================================================================

'===============================================================================
  Sub Lcd_text(byval Copy_str As String * 20 , Byval Copy_x As Byte , Byval Copy_y As Byte)
'-------------------------------------------------------------------------------
    Local M As Byte , N As Byte , P As Byte
    Local X1 As Byte , Y1 As Byte , Длина_строки As Byte
    Local Символ_str As String * 1 , Строка_str As String * 20
    Local Код_символа As Byte
'-------------------------------------------------------------------------------

    X1 = Copy_x

    Y1 = Copy_y

    Строка_str = Copy_str

    Длина_строки = Len(строка_str)

'   if Длина_строки > ....   then
'       Длина_строки = ....
'   end if

    For M = 1 To Длина_строки

        Символ_str = Mid(строка_str , M , 1)

        Код_символа = Asc(символ_str)

        Код_символа = Код_символа - 32

'        If Код_символа > 159 Then
'            Код_символа = Код_символа - 64
'        End If

'        S1 = S1 * 6
'        S2 = S1 + 6
'        X1 = P1 - 1
'        X1 = X1 * 6
'        X1 = X1 + X3

'        For P = S1 To S2
            'Lin1 = Lookup(o1 , Fonts)
'            Y1 = Y3

            For N = 0 To 7

'                If Lin1.n = 1 Then
'                    'Point X1 , Y1
'                End If

'                Y1 = Y1 + 1

            Next N

'            X1 = X1 + 1

'        Next P

    Next M

  End Sub
'===============================================================================

'===============================================================================
  Шрифты:
'-------------------------------------------------------------------------------
'    $include "Шрифты\Font_5x8.font"       ' Полный шрифт, есть кириллица
    $include "Шрифты\Font_6x8.font"       ' Полный шрифт, есть кириллица
'    $include "Шрифты\Font_8x12.font"       ' Полный шрифт, есть кириллица
'    $include "Шрифты\Font_Seg_8x16.font"       ' Только цифры, некоторые знаки и служебные символы
'    $include "Шрифты\Font_Seg_10x16.font"       ' Только цифры, некоторые знаки и служебные символы
'    $include "Шрифты\Font_12x16.font"       ' Полный шрифт, есть кириллица
'    $include "Шрифты\Font_16x24.font"       ' Только цифры, некоторые знаки и служебные символы
'    $include "Шрифты\Font_Seg_16x32.font"       ' Только цифры, некоторые знаки и служебные символы
'    $include "Шрифты\Font_Seg_16x32_2.font"       ' Только цифры, некоторые знаки и служебные символы
'    $include "Шрифты\Font_25x32.font"       ' Полный шрифт, есть кириллица
'===============================================================================

Отредактировано sasha_1973 (2014-12-21 09:18:22)

+1


Вы здесь » Программирование ATMEL в BASCOM. » Исходники » ST7920 графический ЖКИ 128*64 и Bascom