Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Делаю меню на Siemens 65, а компилятор не разрешает.


Делаю меню на Siemens 65, а компилятор не разрешает.

Сообщений 1 страница 7 из 7

1

Делаю меню на Siemens 65. Четыре кнопки PB0 - 1- 2- 3. Опрос нажатия по прерыванию таймера TIMER0. Вроде-бы все правильно сделал. (Саму идею я позаимствовал на avrproect.ru) только там каждая кнопка на своем прерывании, для меня это зажирно. Но не в этом дело. Кампилятору не нравится мой синтаксис. В чем проблемма не пойму.

Код:
                                                                                                                
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 19200
$hwstack = 128                                              'Размер аппаратного стека
$swstack = 128                                              'Размер программного стека
$framesize = 128                                            'Размер области импользуемой для преобразования
                                                             'и временного храненияя данных
                                                             'Byte - 4 bytes, Integer - 7 bytes,
                                                             'Longs - 16 bytes, Single - 24 bytes
                                                             'String -длинна слияния (монтажа) строк
                                                             'Плюс локальные LOCAL переменные,
                                                             'плюс временные VALUE (BYVAL)
$lib "LCD-SIEMENS_S65_LS020_256_W1.LBX"
Config Graphlcd = Color , Controlport = Portc , Cs = 4 , Rs = 2 , Scl = 5 , Sda = 6 , Reset = 3

'Объявление переменных

Dim A As Word

Const Blue = &B00000011                                     ''predefined contants are making programming easier
Const Yellow = &B11111100
Const Red = &B11100000
Const Green = &B00011100
Const Black = &B00000000
Const White = &B11111111
Const Brightgreen = &B00111110
Const Darkgreen = &B00010100
Const Darkred = &B10100000
Const Darkblue = &B00000010
Const Brightblue = &B00011111
Const Orange = &B11111000
Const Violett = 199
Const Brown = 192                                           '128

Const белый = &HFF
Const чёрный = &H00
'===============================================================================

Config Pinb.3 = Input
Bolche Alias Pinb.3
Config Pinb.2 = Input
Menche Alias Pinb.2
Config Pinb.1 = Input
Esc Alias Pinb.1
Config Pinb.0 = Input
Enter Alias Pinb.0

Config Timer0 = Timer , Prescale = 1024

Reset Portd.7
Reset Portb.0
Set Portb.1
Set Portb.2
Set Portb.3
Set Portd.2
Set Portd.0
Set Portd.3
Set Portb.4


'----------------------------------------------------

On Timer0 Opros_knopok                                      'Подпрограмма обработки прерывания

Enable Timer0                                               'Разрешаем работу прерывания Timer0
Enable Interrupts                                           'Разрешаем глобальные прерывания

'=======================================================================

  A = 10  'присваиваем переменной значение 10

  Do                                                          'главный цикл програамы. постоянно проверяем значение переменной А

'в зависимости от значения переменной, выполняем подрпограммы

Select Case A                                               'проверили значение переменной

Case 10 : Gosub 10                                          'свалили на выполнение подпрограммы
Case 20 : Gosub 20
Case 30 : Gosub 30
Case 40 : Gosub 40
Case 11 : Gosub 11
Case 12 : Gosub 12
Case 13 : Gosub 13
Case 21 : Gosub 21
Case 22 : Gosub 22
Case 23 : Gosub 23
Case 31 : Gosub 31
Case 32 : Gosub 32
Case 33 : Gosub 33
Case 41 : Gosub 41
Case 42 : Gosub 42
Case 43 : Gosub 43
Case 110 : Gosub 110
Case 120 : Gosub 120
Case 130 : Gosub 130
Case 210 : Gosub 210
Case 220 : Gosub 220
Case 230 : Gosub 230
Case 310 : Gosub 310
Case 320 : Gosub 320
Case 330 : Gosub 330
Case 410 : Gosub 410
Case 420 : Gosub 420
Case 430 : Gosub 430
  End Select
 Waitms 500
 Loop

        Opros_knopok:

If Enter = 1 Then                                           'Обработка нажатия кнопки ENTER
 If A = 11 Or A = 12 Or A = 13 Then
  A = A * 10
   End If
 If A = 21 Or A = 22 Or A = 23 Then
  A = A * 10
   End If
 If A = 31 Or A = 32 Or A = 33 Then
  A = A * 10
   End If
 If A = 41 Or A = 42 Or A = 43 Then
  A = A * 10
   End If
 If A = 10 Or A = 20 Or A = 30 Or A = 40 Then
  Incr A
     End If
 End If
Return

If Esc = 1 Then                                          'Обработка нажатия кнопки ESC
     If A = 11 Or A = 12 Or A = 13 Then
 A = 10
   End If
     If A = 21 Or A = 22 Or A = 23 Then
 A = 20
   End If
     If A = 31 Or A = 32 Or A = 33 Then
 A = 30
   End If
     If A = 41 Or A = 42 Or A = 43 Then
 A = 40
   End If
     If A > 100 Then
 A = A / 10
    End If
  End If
Return


If Menche = 1 Then                                          'Обработка нажатия кнопки вниз
   If A = 10 Or A = 20 Or A = 30 Then
  A = A + 10
     End If
   If A = 11 Or A = 12 Then
  Incr A
     End If
   If A = 21 Or A = 22 Then
  Incr A
     End If
   If A = 31 Or A = 32 Then
  Incr A
     End If
   If A = 41 Or A = 42 Then
  Incr A
     End If
  End If
Return

If Bolche = 1 Then                                          'Обработка нажатия кнопки наверх
   If A = 20 Or A = 30 Or A = 40 Then
 A = A - 10
     End If
   If A = 12 Or A = 13 Then
  Decr A
     End If
   If A = 22 Or A = 23 Then
  Decr A
     End If
   If A = 32 Or A = 33 Then
  Decr A
     End If
   If A = 42 Or A = 43 Then
  Decr A
     End If
  End If
Return
End

' ниже идут подпрограммы отрисовки на дисплее пунктов меню

                10:
 Cls
 Setfont Color16x16
Lcdat 7 , 0 , "Программа 1        <" , Brown , Yellow
Lcdat 23 , 0 , "Программа 2" , Brown , Yellow
Lcdat 39 , 0 , "Программа 3" , Brown , Yellow
Lcdat 55 , 0 , "Программа 4" , Orange , Yellow
Return

                20:
Cls
 Setfont Color16x16
Lcdat 7 , 0 , "Программа 1" , Brown , Yellow
Lcdat 23 , 0 , "Программа 2        <" , Brown , Yellow
Lcdat 39 , 0 , "Программа 3" , Brown , Yellow
Lcdat 55 , 0 , "Программа 4" , Brown , Yellow
Return

30:
 Cls
  Setfont Color16x16
Lcdat 7 , 0 , "Программа 1" , Brown , Yellow
Lcdat 23 , 0 , "Программа 2" , Brown , Yellow
Lcdat 39 , 0 , "Программа 3        <" , Brown , Yellow
Lcdat 55 , 0 , "Программа 4" , Brown , Yellow
Return

40:
Cls
 Setfont Color16x16
Lcdat 7 , 0 , "Программа 1" , Brown , Yellow
 Lcdat 23 , 0 , "Программа 2" , Brown , Yellow
 Lcdat 39 , 0 , "Программа 3" , Brown , Yellow
 Lcdat 55 , 0 , "Программа 4        <" , Brown , Yellow
 Return

11:
Cls
Setfont Color16x16
Lcdat 7 , 0 , "    Программа 1:" , Brown , Yellow
Lcdat 23 , 0 , "Программа 1.1      <" , Brown , Yellow
Lcdat 39 , 0 , "Программа 1.2" , Brown , Yellow
Lcdat 55 , 0 , "Программа 1.3" , Brown , Yellow
Return

12:
 Cls
 Setfont Color16x16
 Lcdat 7 , 0 , "    Программа 1:" , Brown , Yellow
Lowerline
Lcdat 23 , 0 , "Программа 1.1" , Brown , Yellow
Thirdline
Lcdat 39 , 0 , "Программа 1.2      <" , Brown , Yellow
Fourthline
Lcdat 55 , 0 , "Программа 1.3" , Brown , Yellow
Return

13:
 Cls
 Setfont Color16x16
Lcdat 7 , 0 , "    Программа 1:" , Brown , Yellow
Lcdat 23 , 0 , "Программа 1.1" , Brown , Yellow
Lcdat 39 , 0 , "Программа 1.2" , Brown , Yellow
Lcdat 55 , 0 , "Программа 1.3      <" , Brown , Yellow
Return

21:
Cls
Setfont Color16x16
Lcdat 7 , 0 , "    Программа 2:" , Brown , Yellow
Lcdat 23 , 0 , "Программа 2.1      <" , Brown , Yellow
Lcdat 39 , 0 , "Программа 2.2" , Brown , Yellow
Lcdat 55 , 0 , "Программа 2.3" , Brown , Yellow
 Return

22:
Cls
Setfont Color16x16
Lcdat 7 , 0 , "    Программа 2:" , Brown , Yellow
Lcdat 23 , 0 , "Программа 2.1" , Brown , Yellow
Lcdat 39 , 0 , "Программа 2.2      <" , Brown , Yellow
Lcdat 55 , 0 , "Программа 2.3" , Brown , Yellow
Return


23:
 Cls
  Setfont Color16x16
Lcdat 7 , 0 , "    Программа 2:" , Brown , Yellow
Lcdat 23 , 0 , "Программа 2.1" , Brown , Yellow
Lcdat 39 , 0 , "Программа 2.2" , Brown , Yellow
Lcdat 55 , 0 , "Программа 2.3      <" , Brown , Yellow
 Return

31:
Cls
Setfont Color16x16
Lcdat 7 , 0 , "    Программа 3:" , Brown , Yellow
Lcdat 23 , 0 , "Программа 3.1      <" , Brown , Yellow
Lcdat 39 , 0 , "Программа 3.2" , Brown , Yellow
Lcdat 55 , 0 , "Программа 3.3" , Brown , Yellow
Return

32:
Cls
Setfont Color16x16
Lcdat 7 , 0 , "    Программа 3:" , Brown , Yellow
Lcdat 23 , 0 , "Программа 3.1" , Brown , Yellow
Lcdat 39 , 0 , "Программа 3.2      <" , Brown , Yellow
Lcdat 55 , 0 , "Программа 3.3" , Brown , Yellow
 Return

33:
 Cls
 Setfont Color16x16
Lcdat 7 , 0 , "    Программа 3:" , Brown , Yellow
Lcdat 23 , 0 , "Программа 3.1" , Brown , Yellow
Lcdat 39 , 0 , "Программа 3.2" , Brown , Yellow
Lcdat 55 , 0 , "Программа 3.3      <" , Brown , Yellow
Return


41:
Cls
Setfont Color16x16
Lcdat 7 , 0 , "    Программа 4:" , Brown , Yellow
Lcdat 23 , 0 , "Программа 4.1      <" , Brown , Yellow
Lcdat 39 , 0 , "Программа 4.2" , Brown , Yellow
Lcdat 55 , 0 , "Программа 4.3" , Brown , Yellow
 Return

42:
Cls
 Setfont Color16x16
Lcdat 7 , 0 , "    Программа 4:" , Brown , Yellow
Lcdat 23 , 0 , "Программа 4.1" , Brown , Yellow
Lcdat 39 , 0 , "Программа 4.2      <" , Brown , Yellow
Lcdat 55 , 0 , "Программа 4.3" , Brown , Yellow
Return

43:
Cls
 Setfont Color16x16
Lcdat 7 , 0 , "    Программа 4:" , Brown , Yellow
Lcdat 23 , 0 , "Программа 4.1" , Brown , Yellow
Lcdat 39 , 0 , "Программа 4.2" , Brown , Yellow
Lcdat 55 , 0 , "Программа 4.3      <" , Brown , Yellow
Return

'подпрограммы в которых отображаем выполнение каких-либо действий

110:
Cls
 Setfont Color16x16
Lcdat 7 , 0 , "RUN PROGRAM 1.1" , Brown , Yellow
Wait 1
Return

120:
Cls
Setfont Color16x16
Lcdat 7 , 0 , "RUN PROGRAM 1.2" , Brown , Yellow
 Return

130:
Cls
 Setfont Color16x16
Lcdat 7 , 0 , "RUN PROGRAM 1.3" , Brown , Yellow
 Return

210:
Cls
Setfont Color16x16
Lcdat 7 , 0 , "RUN PROGRAM 2.1" , Brown , Yellow
 Return

220:
Cls
Setfont Color16x16
Lcdat 7 , 0 , "RUN PROGRAM 2.2" , Brown , Yellow
 Return

230:
Cls
Setfont Color16x16
Lcdat 7 , 0 , "RUN PROGRAM 2.3" , Brown , Yellow
 Return

310:
Cls
 Setfont Color16x16
Lcdat 7 , 0 , "RUN PROGRAM 3.1" , Brown , Yellow
 Return

320:
Cls
Setfont Color16x16
Lcdat 7 , 0 , "RUN PROGRAM 3.2" , Brown , Yellow
 Return

330:
Cls
Setfont Color16x16
Lcdat 7 , 0 , "RUN PROGRAM 3.3" , Brown , Yellow
 Return

410:
Cls
Setfont Color16x16
Lcdat 7 , 0 , "RUN PROGRAM 4.1" , Brown , Yellow
 Return

420:
Cls
Setfont Color16x16
Lcdat 7 , 0 , "RUN PROGRAM 4.2" , Brown , Yellow
 Return

430:
Cls
Setfont Color16x16
Lcdat 7 , 0 , "RUN PROGRAM 4.3" , Brown , Yellow
 Return

$include "color8x8wRus.font"
$include "color16x16wRus.font"

0

2

Mrshilov спасибо за помощь. Все нормально пошло. Пару слов по программе. Вариант опроса по таймеру попробывал. Не комфортно. Периодически блымкае экран. Попробую добавить еще одну кнопку на INT0. Тогда при комбинации одновременного нажатия этой кнопки и нужную мне для перехода в меню.

0

3

А может попробовать аналоговую клавиатуру? Здесь есть пример.

0

4

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

0

5

Mrshilov да это самый оптимальный вариант. Буду пробывать.

0

6

А вот тут уже есть пример: Обработка большого количества кнопок на одном прерывании.

0

7

Спасибо. Хороший вариант.

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Делаю меню на Siemens 65, а компилятор не разрешает.