Hej. Nie jestem najlepszy w Bascomie, i mam kilka pytań. Potrzebowałem sterownik tekstu na LCD i dokładnie takie coś znalazłem jako kit AVT1274 poniżej na samym dole schemat - Sterownik ten przesuwa wczesniej wpisany z klawiatury PS/2 tekst tekst w dwóch linijkach wyświetlacza. Wszystko gra, jednak wyświetlacz zapamiętuje 256 znaków Doświadczalnie sprawdziłem, że do wyświetlania 256 znaków w dwóch linijkach wystarczy pamięć 24c02 nie 24c04 jednak celem moim jest przerobienie układu, do współpracy z pamięcią większą Przy zastosowaniu 24c04 mógłbym wpisać 2* 512 znaków jednak próbowałem i nic. Kiedy zwiększyłem zmienną Licznik w poniższym programie, układ po uruchomieniu odczytywał mi tak jakby od połowy wprowadzonego tekstu. Również chcę zastosować wyświetlacz 2* 24 znaki nie 2 * 40 znaków zmnieniałem w tym celu zmienną X i znów porażka. przy zapisywaniu jak i odczytywaniu kursor jakby losowo wybierał pozycje na wyświetlaczu nadpisujc wprowadzony tekst. Według mnie problem jest w adresowaniu pamięci Jakby ktoś mógł podpowiedzieć mi co jeszcze muszę zmodyfikować żeby uzyskać zamierzony efekt? z góry wielkie dzięki
Config Sda = P3.5
Config Scl = P3.7
Config Lcd = 24 * 2
Dim B1 As Byte , B2 As Byte , N As Byte , Status As Byte , Key As Byte
Dim Caps As Bit , Caps_lock As Bit , Ctrl As Bit , Alt As Bit , Tmp As Bit
Dim Temp As String * 1
Dim X As Byte
Dim Adres As Byte
Dim Adresw As Byte
Dim Licznik As Byte
Declare Sub Tx_byte(b1 As Byte)
Declare Sub Replay
Declare Sub Rx_byte
Declare Sub Kbd_status
Declare Sub Write_eeprom(licznik As Byte , Key As Byte)
Declare Sub Read_eeprom(licznik As Byte , Key As Byte)
Declare Sub Replay
Declare Sub Record
Kbd_data Alias P1.0
Kbd_clk Alias P1.1
Jumper1 Alias P3.1
Jumper2 Alias P3.0
S1 Alias P3.3
S2 Alias P3.2
Dim L_shift As Const &H12
Dim R_shift As Const &H59
Dim Ctrl_key As Const &H14
Dim Alt_key As Const &H11
Dim Caps_key As Const &H58
Dim Scroll_key As Const &H7E
Dim Lines As Bit
Lcd "OK"
Wait 1
Cls
Set Jumper1
If Jumper1 = 0 Then
Lines = 0
Adres = 160
Adresw = 161
Call Record
End If
Set Jumper2
If Jumper2 = 0 Then
Lines = 1
Adres = 162
Adresw = 163
Call Record
End If
Cls
Call Replay
X = 1
Licznik = 1
Sub Record
X = 1
Licznik = 1
Cls
Reset Kbd_clk
Waitms 100
Set Kbd_clk
Do
Tx_byte &HFF
Rx_byte
If B1 = &HFA Then Exit Do
If B1 = &HAA Then Exit Do
Loop
Status = 2
Kbd_status
Do
Key = 0
Rx_byte
Select Case B1
Case Ctrl_key:
Set Ctrl
B1 = 0
Case Alt_key:
Set Alt
B1 = 0
Case L_shift:
Set Caps
B1 = 0
Case R_shift:
Set Caps
B1 = 0
Case &HE0:
B1 = 0
Case &HF0:
Rx_byte
If B1 = L_shift Then
Reset Caps
Elseif B1 = R_shift Then
Reset Caps
End If
If B1 = Ctrl_key Then
Reset Ctrl
Elseif B1 = Alt_key Then
Reset Alt
End If
B1 = 0
Case Caps_key:
Caps_lock = Caps_lock Xor 1
Status = Status Xor 4
Kbd_status
B1 = 0
Case Scroll_key:
Tmp = Ctrl And Alt
If Tmp = 1 Then
Status = Status Xor 1
Kbd_status
Waitms 100
Status = Status Xor 1
Kbd_status
End If
B1 = 0
Case Else:
If B1 > 131 Then
B1 = 0
End If
If Caps = 1 Then
Key = Lookup(b1 , With_shift)
Else
Key = Lookup(b1 , No_shift)
End If
If Caps_lock = 1 Then
If Caps = 0 Then
Temp = Chr(key)
Temp = Ucase(temp)
Key = Asc(temp)
End If
End If
End Select
If Key = 13 Then
Key = 32
End If
If B1 <> 0 Then
Shiftlcd Left
If Lines = 0 Then
Locate 1 , X
Else
Locate 2 , X
End If
Lcd Chr(key);
Call Write_eeprom(licznik , Key)
Incr Licznik
Incr X
If X = 41 Then X = 1 ' tu zostało zmienione na 25 (wyswietlacz 2*24)
End If
End If
If Licznik = 255 Then ' tu zostało zmienione do 511
Call Replay
Exit Do
End If
Waitms 10
Loop
End Sub
'****tu wydaje mi się,żewszystko w porządku
'****wstawka w assemblerze do odbierania i nadawania znaków z klawiatury
Sub Rx_byte
Set Kbd_clk
mov {n},#0
jb Kbd_clk,*+0
' START bnit
jnb Kbd_data,L_cont
sjmp .L_error
' DATA bits
!L_cont:
Incr N
acall zero2one
mov a,{b1}
mov c,Kbd_data
rrc a
mov {b1},a
mov a,{n}
cjne a,#8,L_cont
' PARITY bit
acall zero2one
mov a,{b2}
mov c,Kbd_data
rrc a
' STOP bit
acall zero2one
mov c,Kbd_data
rrc a
rrc a
rrc a
rrc a
rrc a
rrc a
rrc a
anl a,#3
mov {b2},a
' check STOP bit
anl a,#2
jz .L_error
' PARITY checking
mov a,{b1}
mov c,psw.0
rlc a
anl a,#1
xch a,{b2}
anl a,#1
xrl a,{b2}
jz .L_error
sjmp .L_end
L_error:
Waitms 1
mov a,#0
mov {b1},a
L_end:
Reset Kbd_clk
End Sub
Sub Tx_byte(b1 As Byte)
B2 = 8
Reset Kbd_clk
Waitms 10
Reset Kbd_data
Set Kbd_clk
' START BIT
acall zero2one
' DATA BITS
mov a,{b1}
!L_tx_data:
rrc a
mov Kbd_data,c
acall zero2one
djnz {b2},L_tx_data
' PARITY BIT
mov a,{b1}
mov c,psw.0
cpl c
mov Kbd_data,c
acall zero2one
' STOP BIT
Set Kbd_data
acall zero2one
' KBD ACK BIT
acall zero2one
Reset Kbd_clk
End Sub
!zero2one:
jnb Kbd_clk,*+0
jb Kbd_clk,*+0
ret
Sub Kbd_status:
Tx_byte &HED
Rx_byte
Tx_byte Status
Rx_byte
End Sub
Sub Write_eeprom(licznik As Byte , Key As Byte)
I2cstart
I2cwbyte Adres
I2cwbyte Licznik
I2cwbyte Key
I2cstop
Waitms 10
End Sub
Sub Read_eeprom(licznik As Byte , Key As Byte)
I2cstart
I2cwbyte Adres
I2cwbyte Licznik
I2cstart
I2cwbyte Adresw
I2crbyte Key , 9
I2cstop
End Sub
Sub Replay
X = 1
Licznik = 1
Cursor Off
Cls
N = 200
Do
For Licznik = 1 To 255 ' tu zmieniałem jako zmienną word do 511 i nic. Adres = 160 : Adresw = 161
Call Read_eeprom(licznik , Key)
Locate 1 , X
Lcd Chr(key);
Adres = 162 : Adresw = 163
Call Read_eeprom(licznik , Key)
Locate 2 , X
Lcd Chr(key)
Shiftlcd Left
Waitms N
Set S1
If S1 = 0 Then
N = N + 10
If N > 255 Then
N = 255
End If
End If
Set S2
If S2 = 0 Then
N = N - 10
If N < 100 Then
N = 100
End If
End If
Incr X
If X = 41 Then ' tu też zmieniałem ilość znaków do 25 i nic
X = 1
End If
P3.4 = Not P3.4
Next Licznik
Loop
End Sub
No_shift:
Data 0
Data 137 , 0 , 133 , 131 , 129 , 130 , 140 , 0 , 138 , 136
Data 134 , 132 , 9 , 96 , 0 , 0 , 0 , 0 , 0 , 0 , 113
Data 49 , 0 , 0 , 0 , 122 , 115 , 97 , 119 , 50 , 0
Data 0 , 99 , 120 , 100 , 101 , 52 , 51 , 0 , 0 , 32
Data 118 , 102 , 116 , 114 , 53 , 0 , 0 , 110 , 98 , 104
Data 103 , 121 , 54 , 0 , 0 , 0 , 109 , 106 , 117 , 55
Data 56 , 0 , 0 , 44 , 107 , 105 , 111 , 48 , 57 , 0
Data 0 , 46 , 47 , 108 , 59 , 112 , 45 , 0 , 0 , 0
Data 39 , 0 , 91 , 61 , 0 , 0 , 0 , 0 , 13 , 93
Data 0 , 92 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0
Data 48 , 46 , 50 , 53 , 54 , 56 , 27 , 0 , 139 , 43
Data 51 , 45 , 42 , 57 , 0 , 0 , 0 , 0 , 0 , 135
With_shift:
Data 0
Data 137 , 0 , 133 , 131 , 129 , 130 , 140 , 0 , 138 , 136
Data 134 , 132 , 9 , 126 , 0 , 0 , 0 , 0 , 0 , 0 , 81
Data 33 , 0 , 0 , 0 , 90 , 83 , 65 , 87 , 64 , 0
Data 0 , 67 , 88 , 68 , 69 , 36 , 35 , 0 , 0 , 32
Data 86 , 70 , 84 , 82 , 37 , 0 , 0 , 78 , 66 , 72
Data 71 , 89 , 94 , 0 , 0 , 0 , 77 , 74 , 85 , 38
Data 42 , 0 , 0 , 60 , 75 , 73 , 79 , 41 , 40 , 0
Data 0 , 62 , 63 , 76 , 58 , 80 , 95 , 0 , 0 , 0
Data 34 , 0 , 123 , 43 , 0 , 0 , 0 , 0 , 13 , 125
Data 0 , 124 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0
Data 48 , 46 , 50 , 53 , 54 , 56 , 27 , 0 , 139 , 43
Data 51 , 45 , 42 , 57 , 0 , 0 , 0 , 0 , 0 , 135
'-----------------------------[End of Program]----------------------------------
Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięPrzesuwanie tekstu na LCD a adresowanie pamięci
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
- Załączniki
-
- Schemat podĹÂączenia pamiÄci
- schemat.JPG (4.05KiB)Przejrzano 1197 razy
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 40 gości