Например TDA7294

Форум РадиоКот • Просмотр темы - Шрифт для KS0108
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Сб янв 10, 2026 16:19:35

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Шрифт для KS0108
СообщениеДобавлено: Сб июл 04, 2015 18:17:34 
Первый раз сказал Мяу!

Зарегистрирован: Пт июн 05, 2015 13:55:13
Сообщений: 23
Откуда: Таганрог
Рейтинг сообщения: 0
Исходные данные: PIC16F877 + GLCD KS0108 + Proton v 3.5.6.5
Как вывести на экран шрифт размером 12х12 или чуть более ?
Если есть решение у кого ,поделитесь !


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Шрифт для KS0108
СообщениеДобавлено: Вс июл 05, 2015 07:37:24 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1398
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7323
Откуда: 845-й км.
Рейтинг сообщения: 1
Медали: 1
Получил миской по аватаре (1)
Если это тот что 128х64 из двух половинок, то вот для пропорционального шрифта высотой 24 пикселя. легко переделать на 8, 16, 32 итд (кратное 8).
Спойлер
Код:
; Подпрограмма вывода сообщения по указателю msg_ptr
; координаты msg_x (0...127) и msg_y (0...7)
; бит clrarea означает красить чёрным (0) или белым (1).
; аргументы сохраняются. Используется FSR.
writemsg:
   movlw   3      ; число записываемых слайсов
   movwf   slicecnt
wrnextslice:
   decf   slicecnt
   movlw   1 << _cs1      ; выбираем первый кристалл
   btfsc   msg_x, 6
   movlw   1 << _cs2      ; выбираем второй кристалл
   movwf   porta
   movlw   b'00111111'
   andwf   msg_x, w
   addlw   setx
   call   wrLCDreg      ; устанавливаем адрес по-горизонтали
   movf   slicecnt, w
   sublw   2
   addwf   msg_y, w
   andlw   b'00000111'
   addlw   sety
   call   wrLCDreg
;
   movf   msg_x, w
   movwf   msgxcounter
   btfsc   msgxcounter, 6      ; Переменная msgxcounter содержит два признака:
   bsf   msgxcounter, 7      ; 6-й бит - переход границы полуэкранов
   bcf   msgxcounter, 6      ; 7-й - переход уже был.
   movf   msg_ptr, w
   movwf   FSR
;
wrnextchar:
   bcf   status, c      ; Берем из таблицы ctable сколько байт занимает
   rlf   indf, w         ; выводимый символ.
   banksel   EEadr
   addlw   low(ctable)
   movwf   EEadr
   movlw   high(ctable)
   movwf   EEadrH
   skpnc
   incf   EEadrH
   banksel   EEcon1
   bsf   EEcon1, EEPGD
   bsf   EEcon1, RD
   nop
   nop
   banksel   EEdata
   movf   EEdata, w
   banksel   bytecount
   movwf   bytecount
;
   banksel   EEadr         ; В следующей ячейке этой же таблицы хранится
   incf   EEadr         ; смещение начала символа от начала таблицы
   skpnz
   incf   EEadrH
   banksel   EEcon1
   bsf   EEcon1, EEPGD
   bsf   eecon1, rd
   nop
   nop
;
   banksel   slicecnt      ; К нему прибавляем значение счетчика слайсов
   movf   slicecnt, w
   banksel   EEadr
   addwf   EEdata, w
   movwf   EEadr
   clrw
   skpnc
   movlw   1
   addwf   EEdatH, w
   movwf   EEadrH      ;
;
   movlw   low(ftable)
   addwf   EEadr
   skpnc
   incf   EEadrH
   movlw   high(ftable)
   addwf   EEadrH
;
wrnextbyte:
   banksel   EEcon1
   bsf   EEcon1, eepgd
   bsf   EEcon1, rd
   nop
   nop
   banksel   EEdata
   movf   EEdata, w
   banksel   0
   btfsc   clrarea
   xorlw   0xff
   call   wrLCDdata
;
   banksel   EEadr
   movlw   3
   addwf   EEadr
   skpnc
   incf   EEadrH
   banksel   bytecount
;
   decf   bytecount   
   incf   msgxcounter
   btfsc   msgxcounter, 6
   goto   secondside
;
contsecside:
   movf   bytecount   ; если не все байты символа записаны - к следующему
   bnz   wrnextbyte
;
   incf   FSR      ; Передвигаем указатель на следующий символ
   movlw   0xff      ; и проверяем на код 0xFF - признак конца строки
   xorwf   indf, w
   bnz   wrnextchar
;
checkslice:
   movf   slicecnt
   skpz
   goto   wrnextslice
   return
;
;
secondside:
   btfsc   msgxcounter, 7   ; проверяем до какой границы дошли
   goto   checkslice   ; если до правой - дальше ничего не рисуем
   movlw   1 << _cs2   ; выбираем правый кристалл
   movwf   porta
   movf   slicecnt, w
   sublw   2
   addwf   msg_y, w
   andlw   b'00000111'
   addlw   sety
   call   wrLCDreg
;
   movlw   setx
   call   wrLCDreg   ; координата X всегда равна 0
   bcf   msgxcounter, 6
   bsf   msgxcounter, 7
   goto   contsecside
;


Шрифт располагается в ПЗУ программ. для примера черточка и двоеточие:
Код:
ftable:
.....
charC:
   data   b'00000000', b'00000000', b'00000000'
   data   b'00000000', b'00111100', b'00000000'
   data   b'00000000', b'00111100', b'00000000'
   data   b'00000000', b'00111100', b'00000000'
   data   b'00000000', b'00111100', b'00000000'
   data   b'00000000', b'00111100', b'00000000'
   data   b'00000000', b'00111100', b'00000000'
   data   b'00000000', b'00111100', b'00000000'
   data   b'00000000', b'00000000', b'00000000'
charD:
   data   b'00000000', b'00000000', b'00000000'
   data   b'00000111', b'00000001', b'11000000'
   data   b'00001111', b'10000011', b'11100000'
   data   b'00001111', b'10000011', b'11100000'
   data   b'00001111', b'10000011', b'11100000'
   data   b'00000111', b'00000001', b'11000000'
   data   b'00000000', b'00000000', b'00000000'
charE:
ctable:
   data   (char1-char0)/3, (char0-char0)   ; 0
   data   (char2-char1)/3, (char1-char0)   ; 1
   data   (char3-char2)/3, (char2-char0)   ; 2
   data   (char4-char3)/3, (char3-char0)   ; 3
   data   (char5-char4)/3, (char4-char0)   ; 4
   data   (char6-char5)/3, (char5-char0)   ; 5
   data   (char7-char6)/3, (char6-char0)   ; 7
   data   (char8-char7)/3, (char7-char0)   ; 8
   data   (char9-char8)/3, (char8-char0)   ; 9
   data   (charA-char9)/3, (char9-char0)   ; 10
   data   (charB-charA)/3, (charA-char0)   ; 11
   data   (charC-charB)/3, (charB-char0)   ; 12
   data   (charD-charC)/3, (charC-char0)   ; 13
   data   (charE-charD)/3, (charD-char0)   ; 14
   data   (charE-charD)/3, (charD-char0)   ; 15

c_dash   EQU   12
c_col   EQU   13


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Шрифт для KS0108
СообщениеДобавлено: Пн июл 06, 2015 21:37:18 
Первый раз сказал Мяу!

Зарегистрирован: Пт июн 05, 2015 13:55:13
Сообщений: 23
Откуда: Таганрог
Рейтинг сообщения: 0
uldemir
Спасибо за пример, но "я тут BASIC`ами в основном балуюсь"
В общем в старых версиях Proton выводится штатным операторам ( PPrint) вполне корректно .


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Шрифт для KS0108
СообщениеДобавлено: Пн июл 06, 2015 21:59:03 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1398
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7323
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
суть не в ассемблере или васике, а в структурах данных и манипуляциях с ними. Остальное - часности.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y