Автор Тема: Примеры программирования на PICµBASIC  (Прочитано 114 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Gennadiy

  • Administrator
  • Пользователь
  • *****
  • Сообщений: 127
Пример программы изменения какого либо параметра с кнопок и отображение его на дисплее

REM '*****************************************************
REM ' Модуль CHANGE_PARAMETR.BAS
REM '*****************************************************
REM ' Требуется BASIC v3.4.1 или старше
REM '*****************************************************
REM 'Функция изменения параметра с кнопок и 
REM 'отображение его значения на дисплее
REM 'Передаваемые праметры в стеке §
REM ' §=адрес отображения параметра на дисплеее
REM ' §=максимальное значение
REM ' §=минимальное  значение
REM ' §=шаг изменения
REM ' §=шаг изменения быстрый
REM ' §=размерность праметра (число знаков после запятой)
REM ' §=размерность праметра (число знаков всего)
REM ' §=текущее значение параметра
REM 'Возвращает код завершения
REM ' 1 - успешно 0 - выход по таймауту в стеке §
REM ' Само значение параметра в стеке §
REM 'Используются переменные
REM 's текущее значение параметра
REM 't длинна переменной , символы
REM 'u размерность праметра
REM 'v шаг изменения быстрый
REM 'w шаг изменения
REM 'x минимальное значение
REM 'y максимальное значение
REM 'z адрес отображения параметра на дисплеее
REM '*****************************************************
REM ' Программа может работать на любых адресах строк
REM '*****************************************************
REM ' ЗАГРУЗКА ДАННЫХ
1000 s=§:t=§:u=§:v=§:w=§:x=§:y=§:z=§
REM ' ПЕЧАТЬ ЗНАЧЕНИЯ, ОЖИДАНИЕ НАЖАТИЯ
1001 AT z:LPRINT .u,%t,s:§=KEY{15}:BEEP 15,2
REM ' ИЗМЕННИЕ ПАРМЕТРА , ПЕРЕХОД ПО КОДУ КНОПКИ
1002 CASE §,0,+11,1,+2,2,+4,4,+6,8,+8,16,+10
1003 GOTO -2
1004 s=s+w:IF s>y THEN s=y
1005 GOTO -4
1006 s=s-w:IF s<x THEN s=x
1007 GOTO -6
1008 s=s+v:IF s>y THEN s=y
1009 GOTO -8
1010 s=s-v:IF s<x THEN s=x
1011 GOTO -10
REM ' Выход по КНОПКЕ 
1012 §=s:§=1:RETURN
REM ' Выход по таймауту
1013 §=s:§=0:RETURN
REM '*****************************************************

Оффлайн Gennadiy

  • Administrator
  • Пользователь
  • *****
  • Сообщений: 127
Re: Примеры программирования на PICµBASIC
« Ответ #1 : Май 15, 2017, 08:16:52 pm »
Пример использования  подпрограммы из предыдущего поста

REM '*****************************************************
REM ' Требуется Модуль CHANGE_PARAMETR.BAS
REM '*****************************************************
REM ' Требуется BASIC v3.4.2 или старше
REM '*****************************************************
REM '            Пример изменения параметра
REM '*****************************************************
REM ' Программа может работать на любых адресах строк
REM ' Возможно портребуется скорректировать адрес выъова
REM ' модуля CHANGE_PARAMETR.BAS - GOSUB 1000
REM '*****************************************************
REM 'ИНИЦИАЛИЗАЦИЯ ДИСПЛЕЯ HD44780
0100 LINIT 1:BEEP 15,2
REM '1 строка 00h - 13h (00 - 19)
REM '2 строка 40h - 53h (64 - 83)
REM '3 строка 14h - 27h (20 - 39)
REM '4 строка 54h - 67h (84 - 103)
REM '*************************************************
0101 CLS:AT 0:LPRINT "Настройка Uin"
0102 AT 64:LPRINT "Уровень "
0103 AT 79:LPRINT "В"
REM ' §=адрес отображения параметра на дисплеее
REM ' §=максимальное значение
REM ' §=минимальное  значение
REM ' §=шаг изменения
REM ' §=шаг изменения быстрый
REM ' §=размерность праметра (число знаков после запятой)
REM ' §=размерность праметра (число знаков всего)
REM ' §=текущее значение параметра
0104 §=72:§=2400:§=0:§=1:§=10:§=1:§=4:§=2200
0105 GOSUB 1000
0106 IF §=0 THEN GOTO +3
REM 'Возвращает код завершения
REM ' 1 - успешно 0 - выход по таймауту в стеке §
0107 CLS:LPRINT "Выбрано значение"
0108 AT 64:LPRINT .1,%4,§,"   Вольт":END
0109 CLS:LPRINT "Таймаут,значение"
0110 AT 64:LPRINT .1,%4,§,"   Вольт":END
REM '*****************************************************


Оффлайн Gennadiy

  • Administrator
  • Пользователь
  • *****
  • Сообщений: 127
Re: Примеры программирования на PICµBASIC
« Ответ #2 : Май 15, 2017, 08:18:26 pm »
Установка даты и времени с использованием подпрограммы из первого поста

REM '*****************************************************
REM ' Требуется Модуль CHANGE_PARAMETR.BAS
REM '*****************************************************
REM ' Требуется BASIC v3.4.1 или старше
REM '*****************************************************
REM '            Пример изменения даты и времени
REM '*****************************************************
REM ' Программа может работать на любых адресах строк
REM ' Возможно портребуется скорректировать адрес вызова
REM ' модуля CHANGE_PARAMETR.BAS - GOSUB 1000
REM '*****************************************************
REM 'ИНИЦИАЛИЗАЦИЯ ДИСПЛЕЯ HD44780
0100 LINIT 1:BEEP 15,2
REM '1 строка 00h - 13h (00 - 19)
REM '2 строка 40h - 53h (64 - 83)
REM '3 строка 14h - 27h (20 - 39)
REM '4 строка 54h - 67h (84 - 103)
REM '*************************************************
0101 CLS:AT 0:LPRINT " Установка даты "
0102 AT 64:LPRINT "Год    20"
0103 §=73:§=25:§=15:§=1:§=1:§=0:§=2:§=YEAR{}
0104 GOSUB 1000
0105 IF §=0 THEN GOTO +33
0106 YEAR §
REM '*************************************************
0107 AT 64:LPRINT "Месяц    "
0108 §=73:§=12:§=1:§=1:§=1:§=0:§=2:§=MONTH{}
0109 GOSUB 1000
0110 IF §=0 THEN GOTO +28
0111 MONTH §
REM '*************************************************
0112 AT 64:LPRINT "День     "
0113 §=73:§=31:§=1:§=1:§=1:§=0:§=2:§=DAY{}
0114 GOSUB 1000
0115 IF §=0 THEN GOTO +23
0116 DAY §
REM '*************************************************
0117 AT 64:LPRINT "День нед."
0118 §=73:§=7:§=1:§=1:§=1:§=0:§=2:§=DAYS{}
0119 GOSUB 1000
0120 IF §=0 THEN GOTO +18
0121 DAYS §
REM '*************************************************
0122 CLS:AT 0:LPRINT "Устан-ка времени"
0123 AT 64:LPRINT "Часы     "
0124 §=73:§=23:§=0:§=1:§=1:§=0:§=2:§=HOUR{}
0125 GOSUB 1000
0126 IF §=0 THEN GOTO +12
0127 HOUR §
REM '*************************************************
0128 AT 64:LPRINT "Минуты   "
0129 §=73:§=59:§=0:§=1:§=10:§=0:§=2:§=MIN{}
0130 GOSUB 1000
0131 IF §=0 THEN GOTO +7
0132 MIN §
REM '*************************************************
0133 AT 64:LPRINT "Секунды  "
0134 §=73:§=59:§=0:§=1:§=10:§=0:§=2:§=SEC{}
0135 GOSUB 1000
0136 IF §=0 THEN GOTO +2
0137 SEC §
REM '*************************************************
REM ' Установки завершены, показываем
0138 CLS:AT 4:SDATE $(0):LPRINT *$(0)
0139 AT 68:STIME $(0):LPRINT *$(0)
0140 PAUSE 1000:GOTO -2
REM '*******
******************************************

Оффлайн Gennadiy

  • Administrator
  • Пользователь
  • *****
  • Сообщений: 127
Re: Примеры программирования на PICµBASIC
« Ответ #3 : Май 15, 2017, 08:20:45 pm »
Другой вариант подпрограммы изменения параметров, без использования переменных.
Работа только со стеком.

REM '*****************************************************
REM ' Модуль CHANGE_PARAMETR_V2.BAS
REM '*****************************************************
REM ' Требуется BASIC v3.4.2 или старше
REM '*****************************************************
REM 'Функция изменения параметра с кнопок и 
REM 'отображение его значения на дисплее
REM 'Передаваемые праметры в стеке §
REM ' §=адрес отображения параметра на дисплее
REM ' §=максимальное значение
REM ' §=минимальное  значение
REM ' §=шаг изменения
REM ' §=шаг изменения быстрый
REM ' §=размерность праметра (число знаков после запятой)
REM ' §=размерность праметра (число знаков всего)
REM ' §=текущее значение параметра
REM 'Возвращает код завершения
REM ' 1 - успешно 0 - выход по таймауту в стеке §
REM ' Само значение параметра в стеке §
REM 'Используются стек переменных +1
REM 'Обычные переменные не используются
REM '*****************************************************
REM ' Программа может работать на любых адресах строк
REM '*****************************************************
REM 'Используем прямой доступ к стеку,относительно вершины
REM ' ПЕЧАТЬ ЗНАЧЕНИЯ, ОЖИДАНИЕ НАЖАТИЯ
1000 AT З:LPRINT .В,%Б,А:§=KEY{15}:BEEP 15,2
REM ' ИЗМЕННИЕ ПАРМЕТРА , ПЕРЕХОД ПО КОДУ КНОПКИ
1001 CASE §,0,+11,1,+2,2,+4,4,+6,8,+8,16,+10
1002 GOTO -2
1003 А=А+Д:IF А>Ж THEN А=Ж
1004 GOTO -4
1005 А=А-Д:IF А<Е THEN А=Е
1006 GOTO -6
1007 А=А+Г:IF А>Ж THEN А=Ж
1008 GOTO -8
1009 А=А-Г:IF А<Е THEN А=Е
1010 GOTO -10
REM ' Выход по КНОПКЕ, запишем в стек и понизим 
1011 З=А:Ж=1:§-:§-:§-:§-:§-:§-:RETURN
REM ' Выход по таймауту , запишем в стек и понизим 
1012 З=А:Ж=0:§-:§-:§-:§-:§-:§-:RETURN
REM '*****************************************************