Advertisement
Guest User

Lena_course_work

a guest
Mar 18th, 2018
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. '* Filename : Универсальный 2х-канальный индикатор *
  2. '* Revision : 5.0 *
  3. '* Controller : ATMEGA8 *
  4. '* Compiler : BASCOM-AVR 2.0.6.1 *
  5. '* Author : MACTEPOK *
  6. '*******************************************************************************
  7. $regfile = "m8def.dat" 'определяем контроллер
  8. $crystal = 8000000 'внутренний генератор
  9. '$sim
  10. $lib "mcsbyte.lbx" 'подключаем библиотеку функций
  11. $hwstack = 40
  12. $swstack = 16
  13. $framesize = 32
  14.  
  15.  
  16. Config Pinc.0 = Input : Portc.0 = 1 'кнопка Выбор
  17. Config Pinc.1 = Input : Portc.1 = 1 'кнопка Вверх
  18. Config Pinc.2 = Input : Portc.2 = 1 'кнопка Вниз
  19.  
  20. Config Portd = Output : Config Portb = Output 'порты на выход к которым подключен индикатор
  21.  
  22. Load1 Alias Portb.3 'нагрузка №1
  23. Load2 Alias Portb.4 'нагрузка №2
  24. Vibor Alias Pinc.0 'кнопка Выбор
  25. Up Alias Pinc.1 'кнопка Вверх
  26. Down Alias Pinc.2 'кнопка Вниз
  27.  
  28. Config Adc = Single , Prescaler = Auto , Reference = Avcc 'настраиваем АЦП
  29. Dim W As Byte , Y As Byte , X As Byte , I As Byte , Z As Byte , Chislo(6) As Integer , Channel_1 As Integer , On1 As Word , Off1 As Word , Channel_2 As Integer , On2 As Word , Off2 As Word , Sostoyanie As Byte , Sostoyanie_2 As Byte , Copy_print As Integer , Copy_print_sec As Integer , Copy_var As Integer , _print As Integer , _print_sec As Integer , Pokazaniya As Integer , View_menu As Byte , Booton_flag As Bit , Booton_flag_2 As Bit , Count As Word , Error_flag As Bit
  30. Dim Razryad_1 As Byte , Razryad_2 As Byte , Temp_najatiya As Byte , Indicator As Byte
  31. Dim Menu_punkt As Byte , Any_var As Single 'пункт меню
  32. Dim Set_flag As Bit 'флаг режима настройки уставок
  33. Dim Podskaz_flag As Bit , Podskaz_flag_sec As Bit 'флаги режима отображения подсказок на соответствующих каналах
  34. Dim Default As Eram Byte At &H14 'переменная EEPROM для записи начальных уставок для первого включения прибора
  35. Dim Adc_ready As Bit ' Флаг готовности АЦП
  36. Dim Chvar_1 As Single , Chvar_2 As Single ' промежуточные переменные для расчетов
  37. Dim Ch1 As Integer , Ch2 As Integer,
  38.  
  39. Const Negativ = -1
  40.  
  41.  
  42. A Alias Portd.2 : B Alias Portd.6 : C Alias Portb.7 : D Alias Portb.2 'порты, к которым подключены сегменты индикатора
  43. E Alias Portd.0 : F Alias Portb.6 : G Alias Portd.7 : H Alias Portb.5 '
  44. Dig1 Alias Portd.3 : Dig2 Alias Portd.4 : Dig3 Alias Portd.1 ' порты, к которым подключены общие аноды 1го индикатора
  45. Dig1_sec Alias Portd.5 : Dig2_sec Alias Portb.0 : Dig3_sec Alias Portb.1 ' порты, к которым подключены общие аноды 2го индикатора
  46.  
  47.  
  48.  
  49. For X = 1 To 6 ' присваиваем всем цифрам пустоту, чтоб в момент включения не высвечивались нули
  50. Chislo(x) = 11
  51. Next
  52. '*********** ___ Переключение типа индикаторов (ОК/ОА) ___ *********************
  53. Readeeprom Indicator , 26
  54. If Vibor = 0 Then ' Удерживая кнопку УСТ, подаем питание.
  55. For X = 1 To 200
  56. If X = 150 Then ' При длительном нажатии
  57. Set Booton_flag
  58. Toggle Indicator.3 ' Переключаем младший (четвертый) бит переменной. Номер бита выбрал произвольно
  59. Writeeeprom Indicator , 26
  60. If Indicator = &B00000000 Then ' Если переключили на ОА, зажжем все сегменты идикатора для подтверждения
  61. Reset A : Reset B : Reset C : Reset D : Reset E : Reset F : Reset G : Reset H
  62. Set Dig1 : Set Dig2 : Set Dig3 : Set Dig1_sec : Set Dig2_sec : Set Dig3_sec
  63. End If
  64. If Indicator = &B00001000 Then ' Если переключили на ОK, зажжем все сегменты идикатора для подтверждения
  65. Set A : Set B : Set C : Set D : Set E : Set F : Set G : Set H
  66. Reset Dig1 : Reset Dig2 : Reset Dig3 : Reset Dig1_sec : Reset Dig2_sec : Reset Dig3_sec
  67. End If
  68. Waitms 1500
  69. Exit For
  70. End If
  71. If Vibor = 1 Then Exit For
  72. Waitms 10
  73. Next
  74. End If
  75. '*******************************************************************************
  76. If Default = 255 Then 'при первом запуске, когда Default=255
  77. Off1 = 70 'присваиваем начальный уставки
  78. On1 = 50
  79. Off2 = 140
  80. On2 = 120
  81. Indicator = &B00001000 ' для ОА. Indicator = &B00001000 для ОК
  82. Razryad_1 = &B10111011
  83. Razryad_2 = &B10111011
  84. Writeeeprom On1 , 0 ' Записываем в EEPROM уставку ON1
  85. Writeeeprom Off1 , 5 ' Записываем в EEPROM уставку OFF1
  86. Writeeeprom On2 , 10 ' Записываем в EEPROM уставку ON2
  87. Writeeeprom Off2 , 14 ' Записываем в EEPROM уставку OFF2
  88. Writeeeprom Razryad_1 , 16
  89. Writeeeprom Razryad_2 , 17
  90. Writeeeprom Indicator , 26
  91. Default = 100 ' присваиваем значение 100(произвольное, отличное от 255) и больше этот кусок кода выполняться не будет
  92. End If
  93. Readeeprom On1 , 0 ' Считываем из EEPROM уставку ON1
  94. Readeeprom Off1 , 5 ' Считываем из EEPROM уставку OFF1
  95. Readeeprom On2 , 10 ' Считываем из EEPROM уставку ON2
  96. Readeeprom Off2 , 14 ' Считываем из EEPROM уставку OFF2
  97. Readeeprom Razryad_1 , 16
  98. Readeeprom Razryad_2 , 17
  99.  
  100. Config Timer0 = Timer , Prescale = 64 : On Timer0 Pulse ' конфигурируем таймер 0 и назначаем подпрограмму которая выполняется при переполнении таймера
  101. Config Timer1 = Timer , Prescale = 1 : On Timer1 Bootons ' конфигурируем таймер 1 и назначаем подпрограмму которая выполняется при переполнении таймера
  102. Enable Interrupts : Enable Timer0 : Enable Timer1 ' разрешаем прерывания, таймер 0, таймер 1
  103. Start Timer0 : Start Timer1
  104. Start Adc ' начало преобразования
  105.  
  106. X = 50 ' чтобы опрос АЦП произошел в первом круге
  107. Do
  108. If X > 50 And Timer0 < 50 Then
  109. Stop Timer0 : Stop Timer1 ' на время преобразования останавливаем таймеры
  110. Ch1 = Getadc(5) ' Давление
  111. Ch2 = Getadc(4) ' Напряжение
  112. Chvar_1 = Ch1
  113. Chvar_2 = Ch2
  114. Start Timer0 : Start Timer1
  115. Any_var = Chvar_1 / 2000 ' 2000 - можно задавать изгиб линии
  116. Any_var = Negativ * Any_var ' Если закоментировать, изменим направление изгиба экспоненты
  117. Any_var = Exp(any_var)
  118. Chvar_1 = 1023 - Chvar_1
  119. Chvar_1 = Chvar_1 / 12.786 'пересчет тут любая формула для требуемого диапазона или необходимой характеристики ==============
  120. Any_var = Chvar_1 * Any_var
  121. Chvar_1 = Any_var
  122.  
  123. Chvar_2 = Chvar_2 / 2.046 'пересчет тут любая формула для требуемого диапазона или необходимой характеристики ==============
  124. If Chvar_2 > 500 Then Chvar_2 = 500 'верхний предел показаний
  125.  
  126.  
  127. Stop Timer0 : Stop Timer1
  128. If Ch1 < 1023 Then
  129. If Chvar_1 > 0 Then Channel_1 = Chvar_1 ' присваиваем значения переменных для индикации
  130. If Chvar_1 > 80 Then Channel_1 = 80 'верхний предел показаний
  131. Else
  132. Channel_1 = 0
  133. End If
  134. Channel_2 = Chvar_2
  135. Start Timer0 : Start Timer1
  136. X = 0
  137. End If
  138.  
  139.  
  140. If On1 < Off1 Then 'если уставка ON1 < OFF1 то режим нагревателя
  141. If Channel_1 <= On1 Then Sostoyanie = 1 'если значение первого канала АЦП ниже уставки ON1, то включаем нагрузку №1
  142. If Channel_1 >= Off1 Then Sostoyanie = 0 'если значение первого канала АЦП выше уставки OFF1, то выключаем нагрузку №1
  143. Else 'если уставка ON1 > OFF1 то режим охладителя
  144. If Channel_1 >= On1 Then Sostoyanie = 1 'если значение первого канала АЦП выше уставки ON1, то включаем нагрузку №1
  145. If Channel_1 <= Off1 Then Sostoyanie = 0 'если значение первого канала АЦП ниже уставки OFF1, то выключаем нагрузку №1
  146. End If
  147.  
  148. If Sostoyanie = 1 Then Set Load1 Else Reset Load1 'управление 1м каналом нагрузки
  149.  
  150. If On2 < Off2 Then 'если уставка ON2 < OFF2 то режим нагревателя
  151. If Channel_2 <= On2 Then Sostoyanie_2 = 1 'если давление ниже уставки ON2, то включаем нагрузку №2
  152. If Channel_2 >= Off2 Then Sostoyanie_2 = 0 'если давление выше уставки OFF2, то выключаем нагрузку №2
  153. Else 'если уставка ON2 > OFF2 то режим охладителя
  154. If Channel_2 >= On2 Then Sostoyanie_2 = 1 'если давление выше уставки ON2, то включаем нагрузку №2
  155. If Channel_2 <= Off2 Then Sostoyanie_2 = 0 'если давление ниже уставки OFF2, то выключаем нагрузку №2
  156. End If
  157.  
  158. If Sostoyanie_2 = 1 Then Set Load2 Else Reset Load2 'управление 2м каналом нагрузки
  159.  
  160. Loop
  161.  
  162. '*******************************************************************************
  163. ' Индикация
  164.  
  165. Pulse:
  166. If View_menu <> 0 And Error_flag = 0 Then Incr Count 'если находимся в меню и нет ошибки ввода уставок,то инкриментируем счетчик, который отвечает за автоматический выход из меню (~ через 5 сек)
  167. If Count > 7000 Then 'задается время автоматического выхода из меню
  168. Count = 0 'сброс счетчика
  169. View_menu = 0 ' выход из меню в основной режим
  170. End If
  171. ' H = 1 ' выключаем точку на индикаторе
  172. Stop Timer0 'останавливаем таймер 0
  173. Select Case View_menu 'в зависимости от пункта меню, записываем в переменные расчета следующие данные
  174. Case 0 :
  175. _print = Channel_1 ' основной режим. 1й индикатор показывает значение АЦП 1го канала
  176. _print_sec = Channel_2 ' основной режим. 2й индикатор показывает значение АЦП 2го канала
  177. Case 1 :
  178. _print = On1 ' 1й индикатор показывает значение уставки ON1
  179. _print_sec = Channel_2 ' 2й индикатор показывает значение АЦП 2го канала
  180. Case 2 :
  181. _print = Off1 ' 1й индикатор показывает значение уставки OFF1
  182. _print_sec = Channel_2 ' 2й индикатор показывает значение АЦП 2го канала
  183. Case 3 :
  184. _print = Channel_1 ' 1й индикатор показывает значение АЦП 1го канала
  185. _print_sec = On2 ' 2й индикатор показывает значение уставки ON2
  186. Case 4 :
  187. _print = Channel_1 ' 1й индикатор показывает значение АЦП 1го канала
  188. _print_sec = Off2 ' 2й индикатор показывает значение уставки OFF2
  189. End Select
  190.  
  191. If Podskaz_flag = 0 Then 'если не выводим на 1й индикатор подсказки, то работаем с числами
  192. Copy_print = _print '
  193. Copy_var = Copy_print '
  194. For I = 3 To 1 Step -1 ' цикл в котором разбивается переменная на 3 числа
  195. Chislo(i) = Copy_print Mod 10 ' заносим в масив последнюю цифру от числа Copy_print(123 mod 10 = 3)
  196. Copy_print = Copy_print / 10 ' отсекаем последнюю цифру от числа Copy_print (123/10=12)
  197. Next ' убираем незначимые нули
  198. If Copy_var < 100 Then Chislo(1) = 11 'для 2х значного числа
  199. ' If Copy_var < 10 Then Chislo(2) = 11 'для однозначного числа
  200. End If
  201. If Podskaz_flag_sec = 0 Then 'если не выводим на 2й индикатор подсказки, то работаем с числами
  202. Copy_print_sec = _print_sec '
  203. Copy_var = Copy_print_sec
  204. For I = 6 To 4 Step -1 ' цикл в котором разбивается переменная на 3 числа
  205. Chislo(i) = Copy_print_sec Mod 10 ' заносим в масив последнюю цифру от числа _print(123 mod 10 = 3)
  206. Copy_print_sec = Copy_print_sec / 10 ' отсекаем последнюю цифру от числа Copy_print_sec (123/10=12)
  207. Next 'убираем незначимые нули
  208. If Copy_var < 100 Then Chislo(4) = 11 'для 2х значного числа
  209. ' If Copy_var < 10 Then Chislo(5) = 11 'для однозначного числа
  210. End If
  211.  
  212.  
  213. If Indicator = 0 Then ' Гасим индикаторы перед выводом информации
  214. Reset Dig1 : Reset Dig2 : Reset Dig3 : Reset Dig1_sec : Reset Dig2_sec : Reset Dig3_sec ' Для индикатора с ОА
  215. Else
  216. Set Dig1 : Set Dig2 : Set Dig3 : Set Dig1_sec : Set Dig2_sec : Set Dig3_sec 'Для индикатора с ОK
  217. End If
  218.  
  219. Incr W : If W > 6 Then W = 1 ' выбираем какую цифру сейчас включать
  220. Y = 0
  221. Gosub Look : A = Z ' переходим к подпрограмме Look, которая определяет нужно ли сейчас загорется сегменту А
  222. Gosub Look : B = Z
  223. Gosub Look : C = Z
  224. Gosub Look : D = Z
  225. Gosub Look : E = Z
  226. Gosub Look : F = Z
  227. Gosub Look : G = Z
  228.  
  229. Select Case W ' включаем цифру(разряд) которую выбрали (w). Подаем плюс на общий провод конкретной цифры (разряда)
  230. Case 1 :
  231. If Indicator = 0 Then
  232. Set Dig3
  233. If Podskaz_flag = 0 Then H = Razryad_1.3 Else H = 1
  234. Else
  235. Reset Dig3
  236. If Podskaz_flag = 0 Then
  237. H = Razryad_1.3
  238. Toggle H
  239. Else
  240. H = 0
  241. End If
  242. End If
  243. Case 2 :
  244. If Indicator = 0 Then
  245. Set Dig2
  246. If Podskaz_flag = 0 Then H = Razryad_1.2 Else H = 1
  247. Else
  248. Reset Dig2
  249. If Podskaz_flag = 0 Then
  250. H = Razryad_1.2
  251. Toggle H
  252. Else
  253. H = 0
  254. End If
  255. End If
  256. Case 3 :
  257. If Indicator = 0 Then
  258. Set Dig1
  259. If Podskaz_flag = 0 Then H = Razryad_1.1 Else H = 1
  260. Else
  261. Reset Dig1
  262. If Podskaz_flag = 0 Then
  263. H = Razryad_1.1
  264. Toggle H
  265. Else
  266. H = 0
  267. End If
  268. End If
  269. Case 4 :
  270. If Indicator = 0 Then
  271. Set Dig3_sec
  272. If Podskaz_flag_sec = 0 Then H = Razryad_2.3 Else H = 1
  273. Else
  274. Reset Dig3_sec
  275. If Podskaz_flag_sec = 0 Then
  276. H = Razryad_2.3
  277. Toggle H
  278. Else
  279. H = 0
  280. End If
  281. End If
  282. Case 5 :
  283. If Indicator = 0 Then
  284. Set Dig2_sec
  285. If Podskaz_flag_sec = 0 Then H = Razryad_2.2 Else H = 1
  286. Else
  287. Reset Dig2_sec
  288. If Podskaz_flag_sec = 0 Then
  289. H = Razryad_2.2
  290. Toggle H
  291. Else
  292. H = 0
  293. End If
  294. End If
  295. Case 6 :
  296. If Indicator = 0 Then
  297. Set Dig1_sec
  298. If Podskaz_flag_sec = 0 Then H = Razryad_2.1 Else H = 1
  299. Else
  300. Reset Dig1_sec
  301. If Podskaz_flag_sec = 0 Then
  302. H = Razryad_2.1
  303. Toggle H
  304. Else
  305. H = 0
  306. End If
  307. End If
  308. End Select
  309. '
  310.  
  311. Start Timer0
  312. Return
  313. '
  314. Look: ' подпрограмма которая определяет нужно ли сейчас гореть сегменту, который вызвал эту подпрограмму
  315. Z = Chislo(w) * 7 : Z = Y + Z ' определяем порядковый номер числа из таблици DATA. W - это цифра которую будем выводить 1..2..3, Y это номер сегмента (A=0 B=1 C=2...G=7)
  316. If Indicator = 0 Then
  317. Z = Lookup(z , Cifri_oa) ' выбираем из таблици включить или выключить нужный сегмент -OA
  318. Else
  319. Z = Lookup(z , Cifri_ok) '-OK
  320. End If
  321. Incr Y 'Y это номер сегмента (A=0 B=1 C=2...). Chislo(w) * 7 - переход на начало нужной строки Data.Z = Y + Z - по очереди перебираем сегменты в строке.
  322. Return
  323. '
  324. Cifri_oa:
  325. ' таблица сегментом для индикаторов с общим плюсом |Chislo(i)| Символ |
  326. Data 0 , 0 , 0 , 0 , 0 , 0 , 1 '0
  327. Data 1 , 0 , 0 , 1 , 1 , 1 , 1 '1
  328. Data 0 , 0 , 1 , 0 , 0 , 1 , 0 '2
  329. Data 0 , 0 , 0 , 0 , 1 , 1 , 0 '3
  330. Data 1 , 0 , 0 , 1 , 1 , 0 , 0 '4
  331. Data 0 , 1 , 0 , 0 , 1 , 0 , 0 '5
  332. Data 0 , 1 , 0 , 0 , 0 , 0 , 0 '6
  333. Data 0 , 0 , 0 , 1 , 1 , 1 , 1 '7
  334. Data 0 , 0 , 0 , 0 , 0 , 0 , 0 '8
  335. Data 0 , 0 , 0 , 0 , 1 , 0 , 0 '9
  336. Data 1 , 1 , 1 , 1 , 1 , 1 , 0 '10 "-"
  337. Data 1 , 1 , 1 , 1 , 1 , 1 , 1 '11 ""
  338. Data 1 , 1 , 1 , 0 , 0 , 0 , 1 '12 "L"
  339. Data 1 , 1 , 0 , 1 , 0 , 1 , 0 '13 "n"
  340. Data 0 , 1 , 1 , 1 , 0 , 0 , 0 '14 "F"
  341. Data 0 , 1 , 1 , 0 , 0 , 0 , 0 '15 "E"
  342. Data 1 , 1 , 1 , 1 , 0 , 1 , 0 '16 "r"
  343.  
  344. '*******************************************************************************
  345. Cifri_ok:
  346. ' таблица сегментом для индикаторов с общим минусом |Chislo(i)| Символ |
  347. Data 1 , 1 , 1 , 1 , 1 , 1 , 0 '0
  348. Data 0 , 1 , 1 , 0 , 0 , 0 , 0 '1
  349. Data 1 , 1 , 0 , 1 , 1 , 0 , 1 '2
  350. Data 1 , 1 , 1 , 1 , 0 , 0 , 1 '3
  351. Data 0 , 1 , 1 , 0 , 0 , 1 , 1 '4
  352. Data 1 , 0 , 1 , 1 , 0 , 1 , 1 '5
  353. Data 1 , 0 , 1 , 1 , 1 , 1 , 1 '6
  354. Data 1 , 1 , 1 , 0 , 0 , 0 , 0 '7
  355. Data 1 , 1 , 1 , 1 , 1 , 1 , 1 '8
  356. Data 1 , 1 , 1 , 1 , 0 , 1 , 1 '9
  357. Data 0 , 0 , 0 , 0 , 0 , 0 , 1 '10 "-"
  358. Data 0 , 0 , 0 , 0 , 0 , 0 , 0 '11 "" пусто
  359. Data 0 , 0 , 0 , 1 , 1 , 1 , 0 '12 "L"
  360. Data 0 , 0 , 1 , 0 , 1 , 0 , 1 '13 "n"
  361. Data 1 , 0 , 0 , 0 , 1 , 1 , 1 '14 "F"
  362. Data 1 , 0 , 0 , 1 , 1 , 1 , 1 '15 "E"
  363. Data 0 , 0 , 0 , 0 , 1 , 0 , 1 '16 "r"
  364.  
  365. '*******************************************************************************
  366. '
  367. '*******************************************************************************
  368. ' Опрос кнопок
  369. Bootons:
  370. Incr X
  371. Stop Timer1
  372. If Vibor = 0 And Booton_flag = 0 And Up = 1 And Down = 1 Then Gosub Set_mode ' Нажатие кнопки УСТ
  373. If Set_flag = 1 And Vibor = 1 Then 'Кнопки Вверх и Вниз активны только после входа в меню
  374. If Up = 0 Then Gosub Up_const
  375. If Down = 0 Then Gosub Down_const
  376. End If
  377. If Vibor = 0 And Up = 0 And View_menu = 0 And Booton_flag_2 = 0 Then Gosub Set_h_led1
  378. If Vibor = 0 And Down = 0 And View_menu = 0 And Booton_flag_2 = 0 Then Gosub Set_h_led2
  379.  
  380. If Vibor = 1 And Up = 1 And Down = 1 Then Reset Booton_flag 'сброс флага удержания кнопки
  381. If Vibor = 1 Then Reset Booton_flag_2
  382. Start Timer1 : Start Timer0
  383. Return
  384. '*******************************************************************************
  385. '
  386. '
  387. Set_mode:
  388. Enable Interrupts : Enable Timer0 : Start Timer0
  389.  
  390. Set Set_flag ' поднимаем флаг режима настройки уставок (находимся в меню)
  391. Set Booton_flag ' поднимаем флаг удержания кнопки (пока не сбросится, в следующий пункт меню не попадаем)
  392. Count = 0 'сброс счетчика автоматического выхода из меню
  393. If On1 = Off1 Or On2 = Off2 Then Gosub Errors 'Блокировка ввода уставок. Переходим в подпрограмму индикации ошибки
  394. Incr View_menu ' следующий пункт меню
  395. If View_menu > 4 Then View_menu = 0 ' всего 4 пункта меню, 0й - основной режим
  396.  
  397. Select Case View_menu 'индикация подсказок пунктов меню
  398. Case 0 : ' ---
  399. Set Podskaz_flag
  400. Set Podskaz_flag_sec
  401. Chislo(1) = 10
  402. Chislo(2) = 10
  403. Chislo(3) = 10
  404. Chislo(4) = 10
  405. Chislo(5) = 10
  406. Chislo(6) = 10
  407. Reset Set_flag '
  408. Waitms 500
  409. Stop Timer1 : Stop Timer0
  410. Writeeeprom Off2 , 14 ' запись уставки OFF2 в EEPROM
  411.  
  412. Case 1 : ' On1
  413. Set Podskaz_flag 'Поднимаем флаг вывода подсказок (буквы) на 1й индикатор
  414. Chislo(3) = 1
  415. Chislo(2) = 13
  416. Chislo(1) = 0
  417. Waitms 500
  418.  
  419. Case 2 : ' OF1
  420. Set Podskaz_flag 'Поднимаем флаг вывода подсказок (буквы) на 1й индикатор
  421. Chislo(3) = 1
  422. Chislo(2) = 14
  423. Chislo(1) = 0
  424. Waitms 500
  425. Stop Timer1 : Stop Timer0
  426. Writeeeprom On1 , 0 ' запись уставки ON1 в EEPROM
  427.  
  428. Case 3 : ' On2
  429. Set Podskaz_flag_sec 'Поднимаем флаг вывода подсказок (буквы) на 2й индикатор
  430. Chislo(6) = 2
  431. Chislo(5) = 13
  432. Chislo(4) = 0
  433. Waitms 500
  434. Stop Timer1 : Stop Timer0
  435. Writeeeprom Off1 , 5 ' запись уставки OFF1 в EEPROM
  436.  
  437. Case 4 : ' OFF2
  438. Set Podskaz_flag_sec 'Поднимаем флаг вывода подсказок (буквы) на 2й индикатор
  439. Chislo(6) = 2
  440. Chislo(5) = 14
  441. Chislo(4) = 0
  442. Waitms 500
  443. Stop Timer1 : Stop Timer0
  444. Writeeeprom On2 , 10 ' запись уставки ON2 в EEPROM
  445.  
  446. End Select
  447.  
  448. Reset Podskaz_flag
  449. Reset Podskaz_flag_sec
  450. Return
  451. '
  452. Errors:
  453. Set Error_flag ' поднимаем флаг ошибки
  454. If On1 = Off1 Then
  455. Set Podskaz_flag
  456. Chislo(1) = 15
  457. Chislo(2) = 16 'Выводим подсказку Err и мигаем на 1м индикаторе
  458. Chislo(3) = 16
  459. Waitms 500
  460. Chislo(1) = 11
  461. Chislo(2) = 11
  462. Chislo(3) = 11
  463. Waitms 500
  464. Chislo(1) = 15
  465. Chislo(2) = 16
  466. Chislo(3) = 16
  467. Waitms 500
  468. Chislo(1) = 11
  469. Chislo(2) = 11
  470. Chislo(3) = 11
  471. Waitms 500
  472. End If
  473. If On2 = Off2 Then
  474. Set Podskaz_flag_sec
  475. Chislo(4) = 15
  476. Chislo(5) = 16 'Выводим подсказку Err и мигаем на 2м индикаторе
  477. Chislo(6) = 16
  478. Waitms 500
  479. Chislo(4) = 11
  480. Chislo(5) = 11
  481. Chislo(6) = 11
  482. Waitms 500
  483. Chislo(4) = 15
  484. Chislo(5) = 16
  485. Chislo(6) = 16
  486. Waitms 500
  487. Chislo(4) = 11
  488. Chislo(5) = 11
  489. Chislo(6) = 11
  490. Waitms 500
  491. End If
  492. Select Case View_menu ' взависимости от того, в каком пункте меню ввели неверное значение
  493. Case 0 : ' возвращаем из EEPROM предыдущие значения
  494. Case 1 :
  495. Readeeprom On1 , 0
  496. Case 2 :
  497. Readeeprom Off1 , 5
  498. Case 3 :
  499. Readeeprom On2 , 10
  500. Case 4 :
  501. Readeeprom Off2 , 14
  502. End Select
  503. Decr View_menu ' возвращаемся в предыдущий пункт меню (в ошибочный)
  504. Count = 0 : Reset Error_flag
  505. Return
  506. '
  507. Up_const:
  508. Enable Interrupts : Enable Timer0 : Start Timer0
  509. Count = 0
  510. Select Case View_menu
  511. Case 1 :
  512. If On1 < 80 Then Incr On1 '
  513. Case 2 : '
  514. If Off1 < 80 Then Incr Off1
  515. Case 3 : '
  516. If On2 < 500 Then Incr On2 '
  517. Case 4 : '
  518. If Off2 < 500 Then Incr Off2
  519. End Select ' время задержки установки кн.+ значений уставок
  520. Waitms 100
  521. Return
  522. '
  523. '
  524. Down_const:
  525. Enable Interrupts : Enable Timer0 : Start Timer0
  526. Count = 0
  527. Select Case View_menu
  528. Case 1 :
  529. If On1 > 0 Then Decr On1 ' добавляется второе условие при работе с отрицательными числами
  530. Case 2 :
  531. If Off1 > 0 Then Decr Off1
  532. Case 3 :
  533. If On2 > 0 Then Decr On2
  534. Case 4 :
  535. If Off2 > 0 Then Decr Off2
  536. End Select
  537. Waitms 100 ' время задержки установки кн.- значений уставок
  538. Return
  539. '
  540. '
  541. Set_h_led1:
  542. Set Booton_flag_2
  543. Rotate Razryad_1 , Left
  544. Stop Timer1 : Stop Timer0
  545. Writeeeprom Razryad_1 , 16
  546. Return
  547. '
  548. '
  549. Set_h_led2:
  550. Set Booton_flag_2
  551. Rotate Razryad_2 , Left
  552. Stop Timer1 : Stop Timer0
  553. Writeeeprom Razryad_2 , 17
  554. Return
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement