Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: ivan_fd  
Форум Picbasic.ru » Программирование МК » PicBasicPro » LCD 3310
LCD 3310
Uncle_Dizel Дата: Сб, 15.10.2011, 18:51  |                                                                                                                Сообщение # 1
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 40
Репутация: 2   ±
Замечания:   ±
На сайте с 09.06.2011

Статус: Offline

Нужна помощь с алгоритмом работы с LCD 3310 ( http://www.picbasic.co.uk/forum/content.php?r=174-Using-Nokia-3310-LCD )
пытаюсь написать программу которая выводила бы на экран хотя бы слово "ПРИВЕТ"
для примера взял такой текст программы, помогите по детально его разобрать ???

Добавлено (15.10.2011, 18.51.32)
---------------------------------------------
DEFINE LOADER_USED 1
DEFINE OSC 20

DC VAR PortB.6 Определяем порты которым подключен LCD 3310
DTA VAR PortB.5
RST VAR PortB.7
CLK VAR PortB.4

Chr VAR Byte Определяем переменные
BitMap VAR Word
CharCount VAR Byte
PosX VAR Byte
PosY VAR Byte
Column VAR Byte [6]
LCDstr VAR Byte [26]
LcdData VAR Byte

PAUSE 100
GOSUB LCD_INIT Подпрограмма инициализацией LCD 3310 (переходим по метке!) лучше сразу переходите по метке чтобы легче было понть
PAUSE 100
GOSUB LCD_Clear Подпрограмма очистки LCD 3310 (переходим по метке!)


LCD_Init: Подпрограмма инициализацией LCD 3310

LOW RST :pause 20 : HIGH RST : LOW DC ' RESET LCD.... LOW RST :pause 20 : эти двоеточия отделяют команды ???

LcdData= $21: GOSUB LCD_ByteOut ' LCD EXTENDED COMMANDS
LcdData= $c8: GOSUB LCD_ByteOut ' SET LCD Vop (CONTRAST)
LcdData= $06: GOSUB LCD_ByteOut ' SET TEMP COEFFICENT
LcdData= $13: GOSUB LCD_ByteOut ' LCD BIAS MODE
LcdData= $20: GOSUB LCD_ByteOut ' LCD STANDARD COMMANDS
LcdData= $0c: GOSUB LCD_ByteOut ' LCD IN NORMAL MODE
RETURN

LCD_ByteOut:
SHIFTOUT DTA,CLK,1,[LcdData] я так понел эта команда вывода на экран ? так вот LcdData= $21 это будет?
RETURN


LCD_Clear: Подпрограмма очистки LCD 3310 (переходим по метке!)
PosX=0:PosY=0:GOSUB LCD_GotoXY
RETURN

LCD_GotoXY:
LOW DC
LcdData=%01000000 | PosY :GOSUB LCD_ByteOut ( LcdData=%01000000 | PosY :GOSUB вот | это что за знак еще в команде?
LcdData=%10000000 | PosX :GOSUB LCD_ByteOut
RETURN

ЯНДЕКС Дата: 15.10.2011
anatol Дата: Сб, 15.10.2011, 19:06  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 472
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Сам по своей ссылке вглубь ходил? К примеру сюда http://www.picbasic.co.uk/forum....st70209
Uncle_Dizel Дата: Сб, 15.10.2011, 19:23  |                                                                                                                Сообщение # 3
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 40
Репутация: 2   ±
Замечания:   ±
На сайте с 09.06.2011

Статус: Offline

да смотрел там выкладывают готовые проекты, мне самому хочеться все разобрать
anatol Дата: Вс, 16.10.2011, 10:10  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 472
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Тогда к первоисточнику http://pdf1.alldatasheet.com/datashe....44.html
Учтите что есть еще китайские в которых массив всех точек 504 оригинал 816 китай. но размер изображения тот же.

Сообщение отредактировал anatol - Вс, 16.10.2011, 10:11
Uncle_Dizel Дата: Пт, 21.10.2011, 17:19  |                                                                                                                Сообщение # 5
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 40
Репутация: 2   ±
Замечания:   ±
На сайте с 09.06.2011

Статус: Offline

DC VAR PortB.6
DTA VAR PortB.5
RST VAR PortB.7
CLK VAR PortB.4

Chr VAR Byte
BitMap VAR Word
CharCount VAR Byte
PosX VAR Byte
PosY VAR Byte
Column VAR Byte [6]
LCDstr VAR Byte [26]
LcdData VAR Byte

PAUSE 100
GOSUB LCD_INIT
PAUSE 100
GOSUB LCD_Clear

Start:
PosX=0:PosY=0:GOSUB LCD_GotoXY

FOR Chr=0 TO 13
LOOKUP Chr,["NOKIA LCD TEST"],BitMap
LCDstr(Chr)=BitMap
NEXT Chr
GOSUB LCD_StringOut

Loop:
PAUSE 2000
LOW DC
LcdData= %00001101:GOSUB LCD_ByteOut ' Invert
PAUSE 2000
LcdData= %00001000:GOSUB LCD_ByteOut ' Blank
PAUSE 2000
LcdData= %00001100:GOSUB LCD_ByteOut ' Normal
GOTO loop

LCD_Init:

LOW RST :pause 20 : HIGH RST : LOW DC ' RESET LCD

LcdData= $21: GOSUB LCD_ByteOut ' LCD EXTENDED COMMANDS
LcdData= $c8: GOSUB LCD_ByteOut ' SET LCD Vop (CONTRAST)
LcdData= $06: GOSUB LCD_ByteOut ' SET TEMP COEFFICENT
LcdData= $13: GOSUB LCD_ByteOut ' LCD BIAS MODE
LcdData= $20: GOSUB LCD_ByteOut ' LCD STANDARD COMMANDS
LcdData= $0c: GOSUB LCD_ByteOut ' LCD IN NORMAL MODE
RETURN

LCD_ByteOut:
SHIFTOUT DTA,CLK,1,[LcdData]
RETURN

LCD_CharOut:
IF lcddata=32 THEN BitMap=216 ' SPACE
IF lcddata=42 THEN BitMap=240 ' *
IF lcddata=43 THEN BitMap=222 ' +
IF lcddata=45 THEN BitMap=228 ' -
IF lcddata=46 THEN BitMap=234 ' .
IF lcddata=58 THEN BitMap=246 ' :

IF LCDData > 47 THEN ' Numbers 0-9
IF lcddata < 59 THEN
BitMap=6*(lcddata-48)+156
ELSE ' Capital Letters A-Z
BitMap=(LcdData-65) * 6
ENDIF
ENDIF

FOR Chr=0 TO 5
READ BitMap+Chr,Column(Chr)
NEXT Chr
HIGH DC
SHIFTOUT DTA,CLK,1,[Column(0),Column(1),Column(2),Column(3),Column(4),Column(5)]
RETURN

LCD_StringOut:
FOR CharCount=0 TO 13
LcdData=LCDstr(CharCount)
PAUSE 80
GOSUB LCD_CharOut
NEXT CharCount
RETURN

LCD_Clear:
PosX=0:PosY=0:GOSUB LCD_GotoXY
HIGH DC
FOR Chr=1 TO 252
LcdData=0:GOSUB LCD_ByteOut
LcdData=0:GOSUB LCD_ByteOut
NEXT Chr
RETURN

LCD_GotoXY:
LOW DC
LcdData=%01000000 | PosY :GOSUB LCD_ByteOut
LcdData=%10000000 | PosX :GOSUB LCD_ByteOut
RETURN

'-------------------------------------------------
' Font DATA table
'-------------------------------------------------
' DEC Chr HEX
Data $7E,$11,$11,$11,$7E,$00 ' 65 A 41
Data $7F,$49,$49,$49,$36,$00 ' 66 B 42
Data $3E,$41,$41,$41,$22,$00 ' 67 C 43
Data $7F,$41,$41,$22,$1C,$00 ' 68 D 44
Data $7F,$49,$49,$49,$41,$00 ' 69 E 45
Data $7F,$09,$09,$09,$01,$00 ' 70 F 46
Data $3E,$41,$49,$49,$7A,$00 ' 71 G 47
Data $7F,$08,$08,$08,$7F,$00 ' 72 H 48
Data $00,$41,$7F,$41,$00,$00 ' 73 I 49
Data $20,$40,$41,$3F,$01,$00 ' 74 J 4A
Data $7F,$08,$14,$22,$41,$00 ' 75 K 4B
Data $7F,$40,$40,$40,$40,$00 ' 76 L 4C
Data $7F,$02,$0C,$02,$7F,$00 ' 77 M 4D
Data $7F,$04,$08,$10,$7F,$00 ' 78 N 4E
Data $3E,$41,$41,$41,$3E,$00 ' 79 O 4F
Data $7F,$09,$09,$09,$06,$00 ' 80 P 50
Data $3E,$41,$51,$21,$5E,$00 ' 81 Q 51
Data $7F,$09,$19,$29,$46,$00 ' 82 R 52
Data $46,$49,$49,$49,$31,$00 ' 83 S 53
Data $01,$01,$7F,$01,$01,$00 ' 84 T 54
Data $3F,$40,$40,$40,$3F,$00 ' 85 U 55
Data $1F,$20,$40,$20,$1F,$00 ' 86 V 56
Data $3F,$40,$38,$40,$3F,$00 ' 87 W 57
Data $63,$14,$08,$14,$63,$00 ' 88 X 58
Data $07,$08,$70,$08,$07,$00 ' 89 Y 59
Data $61,$51,$49,$45,$43,$00 ' 90 Z 5A
Data $3E,$51,$49,$45,$3E,$00 ' 48 0 30
Data $00,$42,$7F,$40,$00,$00 ' 49 1 31
Data $42,$61,$51,$49,$46,$00 ' 50 2 32
Data $21,$41,$45,$4B,$31,$00 ' 51 3 33
Data $18,$14,$12,$7F,$10,$00 ' 52 4 34
Data $27,$45,$45,$45,$39,$00 ' 53 5 35
Data $3C,$4A,$49,$49,$30,$00 ' 54 6 36
Data $01,$71,$09,$05,$03,$00 ' 55 7 37
Data $36,$49,$49,$49,$36,$00 ' 56 8 38
Data $06,$49,$49,$49,$3E,$00 ' 57 9 39
Data $00,$00,$00,$00,$00,$00 ' 32 20
Data $08,$08,$3E,$08,$08,$00 ' 43 + 2B
Data $08,$08,$08,$08,$08,$00 ' 45 - 2D
Data $00,$60,$60,$00,$00,$00 ' 46 . 2E
Data $14,$08,$3E,$08,$14,$00 ' 42 * 2A
Data $00,$36,$36,$00,$00,$00 ' 58 : 3A

Добавлено (21.10.2011, 17.19.38)
---------------------------------------------
если я все правильно понел, то это все работает так

Start:
PosX=0:PosY=0:GOSUB LCD_GotoXY

FOR Chr=0 TO 13
LOOKUP Chr,["NOKIA LCD TEST"],BitMap Chr(0)....переменная BitMap(N)...LCDstr(0)=BitMap...записываем в массив значение BitMap( получается в кодировке ASCII тоесть ( N=78)
LCDstr(Chr)=BitMap
NEXT Chr
GOSUB LCD_StringOut
переходим

LCD_StringOut:
FOR CharCount=0 TO 13
LcdData=LCDstr(CharCount) LcdData..присваиваем значение LCDstr(0) тоесть массив (0 адреса тоесть N=78)
PAUSE 80
GOSUB LCD_CharOut
NEXT CharCount
RETURN

LCD_CharOut:
IF lcddata=32 THEN BitMap=216 ' SPACE
IF lcddata=42 THEN BitMap=240 ' *
IF lcddata=43 THEN BitMap=222 ' +
IF lcddata=45 THEN BitMap=228 ' -
IF lcddata=46 THEN BitMap=234 ' .
IF lcddata=58 THEN BitMap=246 ' :

IF LCDData > 47 THEN ' Numbers 0-9
IF lcddata < 59 THEN
BitMap=6*(lcddata-48)+156
ELSE ' Capital Letters A-Z
BitMap=(LcdData-65) * 6
ENDIF
ENDIF

FOR Chr=0 TO 5
READ BitMap+Chr,Column(Chr) , тоесть у нас получаеться 78+0=78(значит считывает что лежит в 78 ячейки памяти и присваиваем Column(0), это так а как узнать что у нас лежит в 78 ячейки памети?
NEXT Chr
HIGH DC
SHIFTOUT DTA,CLK,1,[Column(0),Column(1),Column(2),Column(3),Column(4),Column(5)]
RETURN

ivan_fd Дата: Пт, 21.10.2011, 17:34  |                                                                                                                Сообщение # 6
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Uncle_Dizel, тот код, что выше рабочий? Выложите полностью проект.

По очереди не понимания задавайте вопросы. biggrin

Добавлено (21.10.2011, 17.34.22)
---------------------------------------------
Мой Вам совет, переходите на Протон. Не пожалеете.

Uncle_Dizel Дата: Пт, 21.10.2011, 18:13  |                                                                                                                Сообщение # 7
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 40
Репутация: 2   ±
Замечания:   ±
На сайте с 09.06.2011

Статус: Offline

должен быть рабочим, взял с какого то сайта,
большинство кода я понел вот сдесь не могу понять

FOR Chr=0 TO 5
READ BitMap+Chr,Column(Chr) , тоесть у нас получаеться 78+0=78(значит считывает что лежит в 78 ячейки памяти и присваиваем Column(0), это так а как узнать что у нас лежит в 78 ячейки памети?
NEXT Chr
HIGH DC
SHIFTOUT DTA,CLK,1,[Column(0),Column(1),Column(2),Column(3),Column(4),Column(5)]
RETURN
anatol Дата: Пт, 21.10.2011, 20:46  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 472
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Uncle_Dizel, Вы не поняли как формируется изображееие(+Chr) - это раз, не понимаете как читается значение в памяти (READ BitMap+Chr).
Пояснять не буду попробуйте на бумаге в клеточку нарисовать какую нибудь буковку.
ivan_fd Дата: Пт, 21.10.2011, 20:55  |                                                                                                                Сообщение # 9
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Quote (Uncle_Dizel)
тоесть у нас получаеться 78+0=78


Да символ N = 78 в ASCII таблице, у вашей программе таблица записана в EEPROM с символа А, то есть пропустили 65 символов.
Потому имеет место быть код BitMap=(LcdData-65) * 6 . Ну и с цифрами там немного по другому.
В Вашем случаи 78-65=13. То есть BitMap будет равен 13, и при chr = 0 мы берем с EEPROM с позиции 13 первый байт.... и так 6 раз
для одного символа.
Uncle_Dizel Дата: Вс, 23.10.2011, 23:00  |                                                                                                                Сообщение # 10
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 40
Репутация: 2   ±
Замечания:   ±
На сайте с 09.06.2011

Статус: Offline

'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright © 2011 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 21.10.2011 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************


DC VAR GPIO.0
DTA VAR GPIO.4
RST VAR GPIO.1
CLK VAR GPIO.5

Chr VAR Byte
BitMap VAR Word
CharCount VAR Byte
PosX VAR Byte
PosY VAR Byte
Column VAR Byte [6]

LcdData VAR Byte

PAUSE 100
GOSUB LCD_INIT
PAUSE 100
GOSUB LCD_Clear

Start:
PosX=0:PosY=0:GOSUB LCD_GotoXY

FOR Chr=0 TO 5
READ Chr,Column(Chr)
NEXT Chr
HIGH DC
SHIFTOUT DTA,CLK,1,[Column(0),Column(1),Column(2),Column(3),Column(4),Column(5)]
pause 10000
goto start


LCD_Init:

LOW RST :pause 20 : HIGH RST : LOW DC ' RESET LCD

LcdData= $21: GOSUB LCD_ByteOut
LcdData= $06: GOSUB LCD_ByteOut
LcdData= $13: GOSUB LCD_ByteOut
LcdData= $c8: GOSUB LCD_ByteOut

LcdData= $20: GOSUB LCD_ByteOut
LcdData= $0c: GOSUB LCD_ByteOut


RETURN

LCD_ByteOut:
SHIFTOUT DTA,CLK,1,[LcdData]
RETURN

LCD_Clear:
PosX=0:PosY=0:GOSUB LCD_GotoXY
HIGH DC
FOR Chr=1 TO 252
LcdData=0:GOSUB LCD_ByteOut
LcdData=0:GOSUB LCD_ByteOut
NEXT Chr
RETURN

LCD_GotoXY:
LOW DC
LcdData=%01000000 | PosY :GOSUB LCD_ByteOut
LcdData=%10000000 | PosX :GOSUB LCD_ByteOut
RETURN

'-------------------------------------------------
' Font DATA table
'-------------------------------------------------
' DEC Chr HEX
Data @0,$7E,$11,$11,$11,$7E,$00 ' 65 A 41




Добавлено (23.10.2011, 23.00.43)
---------------------------------------------
вот написал простейшею программу вывода одного символа на экран, компилятор без ошибок компилирует, загружаю включаю устройство и 0 ни чего не выводиться на экран?

anatol Дата: Вс, 23.10.2011, 23:15  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 472
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Uncle_Dizel. А для какого процессора писал. Какой генратор и тактовая? Остальные настройки?. Среди людей телепатов нет а у компилятора тем более. Максимум по умолчанию чтото выберет.
ЯНДЕКС Дата: 23.10.2011
Uncle_Dizel Дата: Пн, 24.10.2011, 10:45  |                                                                                                                Сообщение # 12
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 40
Репутация: 2   ±
Замечания:   ±
На сайте с 09.06.2011

Статус: Offline

МК pic12f629, тактируется от внутреннего генератора 4 Mгц,
ivan_fd Дата: Пн, 24.10.2011, 14:23  |                                                                                                                Сообщение # 13
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Попробуйте все это просимулировать в протеусе. Может Вы не правильно дисплей подключили?
Uncle_Dizel Дата: Чт, 01.12.2011, 18:13  |                                                                                                                Сообщение # 14
Группа: Пользователи
Ранг:  Пытаюсь разобраться
Сообщений: 40
Репутация: 2   ±
Замечания:   ±
На сайте с 09.06.2011

Статус: Offline

Добавлено (01.12.2011, 18.13.43)
---------------------------------------------
А проблема в следующем: при преобразовании значения, он преобразует его в "НЕХ", а "мне" нужно в "DEC", а это разные значения и в итоге, будет разный результат... Например: "1" в "DEC" она так и останется - "1" , а вот в "НЕХ" - $31 (пишу по памяти, могу ошибиться...)

если я правильно понел проблему можно просто написать подпрограмму в которой каждое значение символа в "НЕХ" присваивалось соответствующие значение в "DEC"
if a=30(HEX) then b = 48(DEC)
и так для чисел от (0..9)

...............................................DEC Chr HEX
Data $3E,$51,$49,$45,$3E,$00 ' 48 0 30
Data $00,$42,$7F,$40,$00,$00 ' 49 1 31
Data $42,$61,$51,$49,$46,$00 ' 50 2 32
Data $21,$41,$45,$4B,$31,$00 ' 51 3 33
Data $18,$14,$12,$7F,$10,$00 ' 52 4 34
Data $27,$45,$45,$45,$39,$00 ' 53 5 35
Data $3C,$4A,$49,$49,$30,$00 ' 54 6 36
Data $01,$71,$09,$05,$03,$00 ' 55 7 37
Data $36,$49,$49,$49,$36,$00 ' 56 8 38
Data $06,$49,$49,$49,$3E,$00 ' 57 9 39

Сообщение отредактировал Uncle_Dizel - Чт, 01.12.2011, 18:14
Matrix252005 Дата: Чт, 01.12.2011, 18:26  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 636
Репутация: 43   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Приятного времени суток.

СПС за ответ, но так, МК "потеряет" еще больше памяти...

И если уже таким образом делать, то тогда лучше:

if a=30(HEX) then b[0] = $3E,b[1] = $51,b[2] = $49,b[3] = $45,b[4] = $3E,b[5] = $00

Ну что то типа такого...


THE TRUTH IS OUT THERE.

С уважением, Николай.
Форум Picbasic.ru » Программирование МК » PicBasicPro » LCD 3310
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: