Команды и директивы компилятора PROTON
Синтаксис
Print Item { , Item... }
Команда Print выводит текстовое сообщение или графическую информацию на экран ЖКИ.
Компилятор PROTON рассчитан для работы с алфавитно-цифровыми ЖКИ, в которых используется контроллер Hitachi 44780 или их аналоги, а также с графическими ЖКИ, которые имеют встроенные контроллеры Samsung KS0108 либо Toshiba T6963.
Параметр Item - может быть константой, переменной, выражением, модификатором, или списком строковых переменных.
В этой команде могут использоваться следующие модификаторы:
Модификатор | Выполняемая функция |
At ypos (1 to n),xpos(1 to n) | Позиционирует (помещает) курсор на экране ЖК монитора в заданную строку и заданное знакоместо |
Cls | Очищает экран ЖК монитора и создается задержка в 30 мс |
BIN{1..32} | Выводит на экран двоичное значение (от 1 до 32 разрядов) |
Dec{1..10} | Выводит на экран десятичное значение (от 1 до 10 разрядов) |
HEX{1..8} | Выводит на экран шестнадцатеричное значение (от 1 до 8 разрядов) |
SBIN{1..32} | Выводит на экран двоичное значение со знаком (в старший разряд выводится знак, а в остальные до 31 разряда само значение) |
SDEC{1..10} | Выводит на экран десятичное значение со знаком (в старший разряд выводится знак, а в остальные до 9 разрядов само значение) |
SHEX{1..8} | Выводит на экран шестнадцатеричное значение со знаком (в старший разряд выводится знак, а в остальные ло 7 разрядов само значение) |
IBIN{1..32} | Выводит на экран двоичное значение с идентификатором «%» |
IDec{1..10} | Выводит на экран десятичное значение с идентификатором «#» |
IHEX{1..8} | Выводит на экран шестнадцатеричное значение с идентификатором «$» |
ISBIN{1..32} | Выводит на экран двоичное значение со знаком и идентификатором «%» |
ISDec{1..10} | Выводит на экран десятичное значение со знаком и идентификатором «#» |
ISHEX{1..8} | Выводит на экран шестнадцатеричное значение со знаком и идентификатором «$» |
Rep c\n | Выводит на экран знак с повторив его n раз |
Str array\n | Выводит на экран все или часть (n элементов) указанного множества |
CStr Cdata | Выводит на экран цепочки данных, определенные в команде Cdata |
Числа после модификаторов BIN, Dec, и HEX являются дополнительными. Они указывают на то, сколько знаков необходимо выводить на экран. Если они будут опущены, то на экран будут выведены все цифры значения.
Если должна быть показана переменная с плавающей запятой, то цифры после модификатора Dec определяют, сколько знаков остатка должно быть выведено, т.е. количество цифр после десятичной запятой.
С переменными определенными как Float, модификаторы BIN и HEX использоваться не могут.
Dim FLT As Float | |
FLT = 3.145 | |
Print DEC2 FLT | ' Отобразить на дисплее число с 2 знаками после запятой |
Если цифра после модификатора Dec опущена, то после десятичной запятой будут показаны 3 знака.
Dim FLT As Float | |
FLT = 3.1456 | |
Print Dec FLT | ' Отобразить на дисплее число с 3 знаками после запятой |
Если цифра модификатора Dec больше, чем число значащих разрядов после запятой, то вместо них будут показаны нули.
Dim FLT As Float | |
FLT = 3.1456 | |
Print DEC7 FLT | ' Отобразить на дисплее число с 7 знаками после запятой |
Использовать модификатор SDEC для значения, с плавающей запятой не требуется, поскольку модификатор Dec компилятора автоматически покажет в результате знак минус:
Dim FLT As Float | |
FLT = -3.1456 | |
Print Dec FLT | ' Отобразить на дисплее число с 3 знаками после запятой |
Внимание! Модификаторы HEX или BIN не могут использоваться с значениями имеющими тип Float.
Модификатор At xpos, ypos своим начальным значением координат имеют - 1. Например, чтобы поместить текст "HELLO WORLD" в первой строке и первой позиции, программа должна быть записана следующим образом:
Print At 1 , 1 , "HELLO WORLD"
Пример 1
Dim VAR1 As Byte | |
VAR1 = 252 | ' Присвоить переменной VAR1 значение 252 |
Print "Hello World" | ' Вывести в первой строке ЖКИ текст "Hello World" |
Print At 2, 1, "VAR1= " , Dec VAR1 | ' Вывести во второй строке ЖКИ десятичное значение VAR1 |
Print At 3, 1, "VAR1= " , HEX VAR1 | ' Вывести в третьей строке ЖКИ шестнадцатиричное значение VAR1 |
Print At 4, 1, "VAR1= " , BIN VAR1 | ' Вывести в четвертой строке ЖКИ двоичное значение VAR1 |
Пример 2
Dim WRD As Word | |
WRD = 65000 | ' Присвоить переменной WRD значение 65000 |
Print АT 1, 5, "Hello World" | ' Вывести в первой строке c пятого знакоместа ЖКИ текст "Hello World" |
Print At 2, 1, "WRD=" , Dec WRD | ' Вывести во второй строке ЖКИ десятичное значение WRD |
Print At 3, 1, "WRD=" , HEX WRD | ' Вывести в третьей строке ЖКИ шестнадцатеричное значение WRD |
Print At 4, 1, "WRD=" , BIN WRD | ' Вывести в четвертой строке ЖКИ двоичное значение WRD |
Если должна быть показана только часть целой переменной, то применив модификатор Dec, можно указать сколько знаков младших разрядов переменной должно быть отображено на ЖКИ. В этом случае цифры после модификатора Dec определяют сколько младших цифр будут выведены на ЖКИ.
Пример 3
Dim DWD As DWord | ' Создать переменную DWD как DWord |
Dim D2 As DWord | ' Создать переменную D2 как DWord |
Dim D3 As Word | ' Создать переменную D3 как Word |
DWD = 141125088 | ' Присвоить переменной DWD значение равное 141125088 |
D2 = DWD / 1000 | ' Выполнить деление значения переменой DWD, а результат ' поместить в переменную D2 |
D3 = D2 / 1000 | ' Выполнить деление значения переменой D2, а результат ' поместить в переменную D3 |
Print At 1, 1, "DWD= ", Dec DWD, " Hz" | ' Вывести в первой строке десятичное значение DWD |
Print At 2, 1, "D1= ", DEC3 DWD, " Hz" | ' Вывести во второй строке 3 младших разряда DWD |
Print At 3, 1, "D2= ", DEC3 D2,"kHz" | ' Вывести в третьей строке 3 младших разряда D2 |
Print At 3, 12, "D3=", Dec D3, "MHz" | ' Вывести в 3-ей строке c 12-знакоместа десятичное значение D3 |
Print At 4, 1, "Fin= ", DEC3 D3, ".", DEC3 D2, ".", DEC3 DWD, " MHz" | |
' Вывести в 4-ей строке по 3 младших разряда переменных ' D3, D2, DWD |
Для вывода значений переменных со знаком используются модификаторы SDEC{1..10}, SHEX{1..8}, SBIN{1..32}.
Пример 4
Dim WAR1 As Word | ' Объявить переменную WAR1 как Word |
WAR1 = -253 | |
Symbol NEGATIVE = WAR1 | ' Присвоить символу NEGATIVE значение WAR1 |
Print At 1, 1, SDEC NEGATIVE | ' Вывести в первой строке ЖКИ десятичное значение NEGATIVE |
Print At 2, 1, SHEX NEGATIVE | ' Вывести во второй строке ЖКИ шестнадцатеричное значение NEGATIVE |
Print At 3, 1, SBIN NEGATIVE | ' Вывести в третьей строке ЖКИ шестнадцатеричное значение NEGATIVE |
Print At 4, 1, Rep "*"\20 | ' Вывести символ * 20 раз в 4-ой строке ЖКИ |
Для вывода значений переменных со знаком и индификатором используются модификаторы ISDEC{1..10}, ISHEX{1..8}, ISBIN{1..32}.
Dim WAR1 As Word | ' Объявить переменную WAR1 как Word |
WAR1 = -1023 | |
Print At 1, 1, ISDEC WAR1 | ' Вывести десятичное значение переменной с индификатором |
Print At 2, 1, ISHEX WAR1 | ' Вывести шестнадцатеричное значение переменной с индификатором |
Print At 3, 1, ISBIN WAR1 | ' Вывести двоичное значение переменной с индификатором |
Print At 4, 1, ISHEX -$54321 | ' Вывести шестнадцатеричное число -54321 с индификатором |
Модификатор CSTR может использоваться вместе с командой Cdata. В свою очередь команда Cdata используется для того, чтобы создать и сохранить последовательность из знаков:
Эта строка программы создаст, во флэш-памяти по адресу STRING1, последовательность из ASCII кодов, которая представляет собой текст "HELLO WORLD". Необходимо отметить присутствие признака конца последовательности ASCII кодов, это символ - 0.
Для того чтобы вывести на экран эту последовательность знаков, могла бы использоваться следующая структура команды:
Метка, которая указывает на адрес, по которому располагается список значений Cdata, теперь становится названием последовательности. В большой программе с большим форматированием текста, этот тип структуры может сэкономить сотни байтов ценного объема памяти программ.
Попробуйте эти маленькие программы, и Вы увидите, что использование модификатора CSTR сэкономит несколько байтов программы:
Сначала стандартный способ отобразить текст:
Теперь используя модификатор CSTR:
Снова, отметим признаки конца последовательности ASCII текста в командах Cdata. Без них, микроконтроллер продолжал бы передавать данные зацикливаясь.
Модификатор STR используется для передачи последовательности переменных байтового типа из байтового массива. Последовательность -это ряд значений, которые упорядочены или к которым получен доступ в определенном порядке. Каждый из элементов множества должен иметь один и тот же размер. Последовательность 1,2,3 была бы сохранена в байтовом множестве, содержащем три элемента.
Приведем пример, который демонстрирует две последовательности, одну состоящую из 5 байтов и вторую, состоящую из 11 байтов:
Dim MYARRAY[11] As Byte | ' Создадать массив (множество) из 11 элементов (байтов) |
MYARRAY [0] = "H" | ' Загрузить первый байт множества |
MYARRAY [1] = "E" | ' Загрузить второй байт множества |
MYARRAY [2] = "L" | ' Загрузить третий байт множества |
MYARRAY [3] = "L" | ' Загрузить четвертый байт множества |
MYARRAY [4] = "O" | ' Загрузить пятый байт множества |
MYARRAY [5] = " " | ' Загрузить шестой байт множества |
MYARRAY [6] = "W" | ' Загрузить седьмой байт множества |
MYARRAY [7] = "O" | ' Загрузить восьмой байт множества |
MYARRAY [8] = "R" | ' Загрузить девятый байт множества |
MYARRAY [9] = "L" | ' Загрузить десятый байт множества |
MYARRAY [10] = "D" | ' Загрузить одиннадцатый байт множества |
Print At 1, 1, Str MYARRAY \5 | ' Вывести на экран 5 байтов множества. |
Print At 2, 1, Str MYARRAY | ' Вывести на экран все байты множества. |
Stop |
Заметим, что в третьей снизу строке коде с модификатором STR использован дополнительный параметр - \n. Без него PIC-микроконтроллер продолжал бы посылать знаки, пока все 11 байтов множества не были бы переданы. Tак как необходимо передать только часть из 11 байтов массива то это делается с помощью дополнительного параметра \n.
Вышеупомянутый пример может быть также записан и так:
Dim MYARRAY [11] As Byte | ' Создать массив из 11 элементов |
Str MYARRAY = "HELLO WORLD" | ' Загрузим все байты множества |
Print At 1, 1, Str MYARRAY\5 | ' Отобразить последовательность из 5 элементов массива. |
Print At 2, 1, Str MYARRAY | ' Отобразить все элементы массива. |
Stop |
Этот более компактный код выполняет такую же функцию, что и предыдущий. Единственное различие между ними в том, что последовательность теперь создана с помощью модификатора STR.
Declare (определения) используемые с алфавитно-цифровыми ЖКИ и командой Print.
В Basic PROTON+IDE существуют шесть определений (Declare), которые предназначены для использования с алфавитно-цифровыми ЖКИ и командой Print:
C графическим ЖКИ можно использовать команды типа PLOT, UNPLOT, LCDREAD, LCDWRITE, PIXEL, BOX, CIRCLE и LINE.
PIC-микроконтроллер может передавать данные на ЖКИ по 4-разрядной шине либо по 8-разрядной. Если используется 8-разрядная шина, то все 8 разрядов должны быть подключены к одном порту. При использовании 4-разрядной шины выводы D4, D5, D6, D7 ЖКИ должны быть подключены к старшим разрядами этого порта, или же к самыми младшими разрядам порта. Например:
Declare LCD_DTPIN PORTB.4 ' Используется 4 разрядный интерфейс. Вывод D4 ЖКИ подключается к PORTB.4.
Declare LCD_DTPIN PORTB.0 ' Используется 8 разрядный интерфейс. Вывод D0 ЖКИ подключается к PORTB.0.
Подключать шину данных ЖКИ можно к любому порту. Выбор порта PORTB в примерах приведенных выше, основан только на личных предпочтениях. Если Declare LCD_DTPIN не был описан в программе, то по умолчанию используется PORTB и 4 разрядный интерфейс.
Declare LCD_ENPIN PORT.PIN
Если Declare LCD_ENPIN отсутствует в программе, то по умолчанию EN ЖКИ подключается к PORTB.2.
Declare LCD_RSPIN PORT.PIN
Если Declare LCD_RSPIN не описывается в программе, то по умолчанию RS ЖКИ подключается к PORTB.3.
Declare LCD_INTERFACE 4 или 8
Если Declare LCD_INTERFACE не объявляется в программе, то по умолчанию используется 4-разрядный интерфейс.
Declare LCD_LINES 1 , 2 , или 4
Алфавитно-цифровые ЖКИ выпускаются различных форматов, самые популярные имеют 2 строки по 16 символов. Однако существуют 1-строчные и 4-строчные. Просто укажите в объявлении Declare LCD_LINES количество строк которое имеет Ваш ЖКИ.
Если Declare LCD_LINES не используется в программе, то по умолчанию LCD_LINES = 2.
Замечание
Если никакой модификатор не предшествует элементу в команде Print, то в контроллер ЖКИ будет послан слeдующий управляющий код:
Print $FE , 128
В этом случае курсор будет перемещен в позицию 1, строки 1.
Ниже приведен список полезных команд управления:
Команда | Операция |
$FE, 1 | Очистить экран |
$FE, 2 | Вернутся "домой" (идти на первую строку) |
$FE, $0C | Отключить курсор |
$FE, $0E | Курсор в виде подчеркивания |
$FE, $0F | Мерцающий курсор |
$FE, $10 | Переместить курсор на одну позицию влево |
$FE, $14 | Переместить курсор на одну позицию вправо |
$FE, $C0 | Переместить курсор к началу второй строки |
$FE, $94 | Переместить курсор к началу третьей строки |
$FE, $D4 | Переместить курсор к началу четвертой строки |
Необходимо отметить что, если используется команда очистки экрана ЖКИ - Cls, то за ней должна последовать команда на небольшую задержку:
Print $FE , 1 : DelayMS 30
На рисунке 12 приведена действующая схема подключения по умолчанию алфавитно-цифрового модуля ЖКИ к микроконтроллеру 16F873A.
Ниже преведен блок кода для работы с 4-строчным алфавитно-цифровым ЖКИ.
Device = 16F873A | ' Использовать микроконтроллер 16F873A |
XTAL = 4 | ' Задать частоту кварцевого генератора 4 МГц |
LCD_TYPE = 0 | ' Задать режим работы с алфавитно-цифровым ЖКИ |
LCD_DTPIN = PORTB.4 | ' Задать вывод порта к которому будет подключен вход DB4 ЖКИ |
LCD_RSPIN = PORTB.2 | ' Задать вывод порта с которого будет выдаваться сигнал RS на ЖКИ |
LCD_ENPIN = PORTB.3 | ' Задать вывод порта с которого будет выдаваться сигнал E на ЖКИ |
LCD_INTERFACE = 4 | ' Задать 4-битный режим обмена информацией для ЖКИ |
LCD_LINES = 4 | ' Задать ЖКИ 4-строчный режим работы (для 2-строчных ЖКИ LCD_LINES = 2 , для 1-строчных LCD_LINES = 1) |
LCD_COMMANDUS = 2000 | ' Задать паузу между передачей команд на ЖКИ |
LCD_DATAUS = 50 | ' Задать паузу между передачей данных на ЖКИ |
В схеме приведенной на рисунке 12 можно использовать любой алфавитно-цифровой ЖКИ который управляется встроенным контроллером от Hitachi 44780 или его аналогом. Вместо 4-строчных 20-ти разрядных ЖКИ можно также использовать 2-строчные, а также 1-строчные на 8, 12, 20, 24 и даже на 40 знакомест. В случае использования 2-строчных или 1-строчных дисплеев необходимо в строке кода "LCD_LINES= 4" вместо цифры 4 записать соответственно цифру 2 или цифру 1.