[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: RD3AVJ 
Форум » форумы » Интересные идеи и схемы » Автомат подачи звонка (Автомат подачи звонка на микроконтроллере "Atmega16")
Автомат подачи звонка
Toddy123Дата: Пятница, 15.04.2016, 21:25 | Сообщение # 1
Группа: Пользователи
Сообщений: 6

Статус: Offline
Доброй ночи  уважаемые форумчане! Я еще не сильно освоил азы "баскома", устройство Автомата подачи звонка делаю уже его несколько месяцев.  Чтобы было нагляднее выкладываю код который не доделан но есть важные вопросы по коду а именно по условиям в подпрограмме меню. на сколько он практичен? стоит ли такое меню использовать?  помогите прошу не судите за код строго 

regfile = "m16def.dat"
 $crystal = 12000000
 $hwstack = 40
 $swstack = 16
 $framesize = 32
 $baud = 9600
'***********************************************************************
 Config Lcdpin = Pin , Rs = Porta.6 , E = Porta.4 , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , Db7 = Porta.0       'ioeaai?iue noaia
 Cursor Off
 Cls

Config Int1 = Falling
On Int1 Button
Enable Interrupts
Enable Int1

 Config Portb.0 = Input
 Config Portb.1 = Input
 Config Portb.2 = Input
 Config Portb.3 = Input
 Config Portd.5 = Input
 Config Portb.4 = Input
Config Portd.6 = Output
'************************************************************************
 Dim W As Byte
Dim Z As Word
Dim A(52) As Byte
'************************************************************************

 Dim Nazv1 As Byte
 Dim Sur2 As Byte
 Dim Nazv3 As Byte
 Dim Sur4 As Byte

Dim Minestr As String * 2
Dim Hourstr As String * 2
Dim Mine As Byte
Dim Hour As Byte

 ' Z = 0

    Do

    If Z > 0 Then
    Gosub Menu
    End If
    Loop

   Menu:
      Do
   Wait 1
   If Z > 0 Then
   Locate 1 , 1
   Lcd "SETUP PROGRAMM"
   End If
   Wait 2
   Do

   If Z = 1 Then
   Cls
   Locate 1 , 1
   Lcd "M"
   Locate 1 , 4
   Lcd ">" ; Minestr ; ":" ; Hourstr                                        'Ustanovka uslovii menu
   End If

  '************************************************************
   If Z = 2 Then
   Cls
  Locate 1 , 1
   Lcd "H"
   Locate 1 , 4
   Lcd ; Minestr ; ":>" ; Hourstr
   End If

   If Z = 3 Then

   '***********************************************************
    Cls
    Locate 1 , 1
    Lcd "P1"
    Locate 1 , 4
    Lcd ">" ; A(1) ; ":" ; A(2) ; " " ; A(3) ; ":" ; A(4)
    End If
    '***********************************************************
     If Z = 4 Then
     Cls
     Locate 1 , 1
    Lcd "P1"
     Locate 1 , 4
     Lcd A(1) ; ":" ; ">" ; A(2) ; " " ; A(3) ; ":" ; A(4)
     End If
     '**********************************************************
         If Z = 5 Then
   '***********************************************************
    Cls
    Locate 1 , 1
    Lcd "P1"
    Locate 1 , 4
    Lcd A(1) ; ":" ; A(2) ; " " ; ">" ; A(3) ; ":" ; A(4)
    End If
    '***********************************************************
     If Z = 6 Then
     Cls
     Locate 1 , 1
     Lcd "P1"
     Locate 1 , 4
     Lcd A(1) ; ":" ; A(2) ; "" ; A(3) ; ":" ; ">" ; A(4)
     End If
       '***********************************************************
       If Z = 7 Then
       Cls
        Locate 1 , 1
    Lcd "P2"
    Locate 1 , 4
    Lcd ">" ; A(5) ; ":" ; A(6) ; " " ; A(7) ; ":" ; A(8)
    End If
    '***********************************************************
     If Z = 8 Then
     Cls
     Locate 1 , 1
     Lcd "P2"
     Locate 1 , 4
     Lcd A(5) ; ":" ; ">" ; A(6) ; "" ; A(7) ; ":" ; A(8)
     End If

     If Z = 9 Then
       Cls
        Locate 1 , 1
    Lcd "P2"
    Locate 1 , 4
    Lcd A(5) ; ":" ; A(6) ; " >" ; A(7) ; ":" ; A(8)
    End If
    '***********************************************************
     If Z = 10 Then
     Cls
     Locate 1 , 1
     Lcd "P2"
     Locate 1 , 4
     Lcd A(5) ; ":" ; A(6) ; "" ; A(7) ; ":" ; ">" ; A(8)
     End If
   ' * * * * * * * * * * * * * * * * * * * * * * Ia?aei Aoi?ie I?ia?aiiu * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

              If Z = 11 Then

   '***********************************************************
    Cls
    Locate 1 , 1
    Lcd "P3"
    Locate 1 , 4
    Lcd ">" ; A(9) ; ":" ; A(10) ; " " ; A(11) ; ":" ; A(12)
    End If
    '***********************************************************
     If Z = 12 Then
     Cls
     Locate 1 , 1
    Lcd "P3"
     Locate 1 , 4
     Lcd A(9) ; ":>" ; A(10) ; " " ; A(11) ; ":" ; A(12)
     End If
     '**********************************************************
         If Z = 13 Then
   '***********************************************************
    Cls
    Locate 1 , 1
    Lcd "P3"
    Locate 1 , 4
    Lcd A(9) ; ":" ; A(10) ; "> " ; A(11) ; ":" ; A(12)
    End If
    '***********************************************************
     If Z = 14 Then
     Cls
     Locate 1 , 1
     Lcd "P3"
     Locate 1 , 4
     Lcd A(9) ; ":" ; A(10) ; "" ; A(11) ; ":" ; ">" ; A(12)
     End If
       '***********************************************************
       If Z = 15 Then
       Cls
        Locate 1 , 1
    Lcd "P4"
    Locate 1 , 4
    Lcd ">" ; A(13) ; ":" ; A(14) ; " " ; A(15) ; ":" ; A(16)
    End If
    '***********************************************************
     If Z = 16 Then
     Cls
     Locate 1 , 1
     Lcd "P4"
     Locate 1 , 4
     Lcd A(13) ; ":" ; ">" ; A(14) ; "" ; A(15) ; ":" ; A(16)
     End If

     If Z = 17 Then
       Cls
        Locate 1 , 1
    Lcd "P4"
    Locate 1 , 4
    Lcd A(13) ; ":" ; A(14) ; " >" ; A(15) ; ":" ; A(16)
    End If

     If Z = 18 Then
     Cls
     Locate 1 , 1
     Lcd "P4"
     Locate 1 , 4
     Lcd A(13) ; ":" ; A(14) ; "" ; A(15) ; ":" ; ">" ; A(16)
     End If

      '***********************************************************

             If Z = 19 Then
       Cls
        Locate 1 , 1
    Lcd "P5"
    Locate 1 , 4
    Lcd ">" ; A(17) ; ":" ; A(18) ; " " ; A(19) ; ":" ; A(20)
    End If
    '***********************************************************
     If Z = 20 Then
     Cls
     Locate 1 , 1
     Lcd "P5"
     Locate 1 , 4
     Lcd A(17) ; ":" ; ">" ; A(18) ; "" ; A(19) ; ":" ; A(20)
     End If

     If Z = 21 Then
       Cls
        Locate 1 , 1
    Lcd "P5"
    Locate 1 , 4
    Lcd A(17) ; ":" ; A(18) ; " >" ; A(19) ; ":" ; A(20)
    End If
    '***********************************************************
     If Z = 22 Then
     Cls
     Locate 1 , 1
     Lcd "P5"
     Locate 1 , 4
     Lcd A(17) ; ":" ; A(18) ; "" ; A(19) ; ":" ; ">" ; A(20)
     End If

      '***********************************************************

    If Z = 23 Then
    Cls
    Locate 1 , 1
    Lcd "P6"
    Locate 1 , 4
    Lcd ">" ; A(21) ; ":" ; A(22) ; " " ; A(23) ; ":" ; A(24)
    End If
    '***********************************************************
     If Z = 24 Then
     Cls
     Locate 1 , 1
     Lcd "P6"
     Locate 1 , 4
     Lcd A(21) ; ":" ; ">" ; A(22) ; "" ; A(23) ; ":" ; A(24)
     End If

    If Z = 25 Then
    Cls
    Locate 1 , 1
    Lcd "P6"
    Locate 1 , 4
    Lcd A(21) ; ":" ; A(22) ; " >" ; A(23) ; ":" ; A(24)
    End If
    '***********************************************************
     If Z = 26 Then
     Cls
     Locate 1 , 1
     Lcd "P6"
     Locate 1 , 4
     Lcd A(21) ; ":" ; A(22) ; "" ; A(23) ; ":" ; ">" ; A(24)
     End If
     '***********************************************************

    If Z = 27 Then
    Cls
    Locate 1 , 1
    Lcd "P7"
    Locate 1 , 4
    Lcd ">" ; A(25) ; ":" ; A(26) ; " " ; A(27) ; ":" ; A(28)
    End If
    '***********************************************************
     If Z = 28then
     Cls
     Locate 1 , 1
     Lcd "P7"
     Locate 1 , 4
     Lcd A(25) ; ":" ; ">" ; A(26) ; "" ; A(27) ; ":" ; A(28)
     End If

     If Z = 29 Then
       Cls
        Locate 1 , 1
    Lcd "P7"
    Locate 1 , 4
    Lcd A(25) ; ":" ; A(26) ; " >" ; A(27) ; ":" ; A(28)
    End If
    '***********************************************************
     If Z = 30 Then
     Cls
     Locate 1 , 1
     Lcd "P7"
     Locate 1 , 4
     Lcd A(25) ; ":" ; A(26) ; "" ; A(27) ; ":" ; ">" ; A(28)
     End If

       '*************************************************************

     If Z = 31 Then
    Cls
    Locate 1 , 1
    Lcd "P8"
    Locate 1 , 4
    Lcd ">" ; A(29) ; ":" ; A(30) ; " " ; A(31) ; ":" ; A(32)
    End If
    '***********************************************************
     If Z = 32 Then
     Cls
     Locate 1 , 1
     Lcd "P8"
     Locate 1 , 4
     Lcd A(29) ; ":" ; ">" ; A(30) ; "" ; A(31) ; ":" ; A(32)
     End If

     If Z = 33 Then
       Cls
        Locate 1 , 1
    Lcd "P8"
    Locate 1 , 4
    Lcd A(29) ; ":" ; A(30) ; " >" ; A(31) ; ":" ; A(32)
    End If
    '***********************************************************
     If Z = 34 Then
     Cls
     Locate 1 , 1
     Lcd "P8"
     Locate 1 , 4
     Lcd A(29) ; ":" ; A(30) ; "" ; A(31) ; ":" ; ">" ; A(32)
     End If

     If Z = 35 Then
    Cls
    Locate 1 , 1
    Lcd "P9"
    Locate 1 , 4
    Lcd ">" ; A(33) ; ":" ; A(34) ; " " ; A(35) ; ":" ; A(36)
    End If
    '***********************************************************
     If Z = 36 Then
     Cls
     Locate 1 , 1
     Lcd "P9"
     Locate 1 , 4
     Lcd A(33) ; ":" ; ">" ; A(34) ; "" ; A(35) ; ":" ; A(36)
     End If

    If Z = 37 Then
    Cls
    Locate 1 , 1
    Lcd "P9"
    Locate 1 , 4
    Lcd A(33) ; ":" ; A(34) ; " >" ; A(35) ; ":" ; A(36)
    End If
    '***********************************************************
     If Z = 38 Then
     Cls
     Locate 1 , 1
     Lcd "P9"
     Locate 1 , 4
     Lcd A(33) ; ":" ; A(34) ; "" ; A(35) ; ":" ; ">" ; A(36)
     End If

    If Z = 39 Then
    Cls
    Locate 1 , 1
    Lcd "P10"
    Locate 1 , 4
    Lcd ">" ; A(37) ; ":" ; A(38) ; " " ; A(39) ; ":" ; A(40)
    End If
    '***********************************************************
     If Z = 40 Then
     Cls
     Locate 1 , 1
     Lcd "P10"
     Locate 1 , 4
     Lcd A(37) ; ":" ; ">" ; A(38) ; "" ; A(39) ; ":" ; A(40)
     End If

     If Z = 41 Then
       Cls
        Locate 1 , 1
    Lcd "P10"
    Locate 1 , 4
    Lcd A(37) ; ":" ; A(38) ; " >" ; A(39) ; ":" ; A(40)
    End If
    '***********************************************************
     If Z = 42 Then
     Cls
     Locate 1 , 1
     Lcd "P10"
     Locate 1 , 4
     Lcd A(37) ; ":" ; A(38) ; "" ; A(39) ; ":" ; ">" ; A(40)
     End If

        If Z = 43 Then
    Cls
    Locate 1 , 1
    Lcd "P11"
    Locate 1 , 4
    Lcd ">" ; A(41) ; ":" ; A(42) ; " " ; A(43) ; ":" ; A(44)
    End If
    '***********************************************************
     If Z = 44 Then
     Cls
     Locate 1 , 1
     Lcd "P11"
     Locate 1 , 4
     Lcd A(41) ; ":" ; ">" ; A(42) ; "" ; A(43) ; ":" ; A(44)
     End If

     If Z = 45 Then
       Cls
        Locate 1 , 1
    Lcd "P11"
    Locate 1 , 4
    Lcd A(41) ; ":" ; A(42) ; " >" ; A(43) ; ":" ; A(44)
    End If
    '***********************************************************
     If Z = 46 Then
     Cls
     Locate 1 , 1
     Lcd "P11"
     Locate 1 , 4
     Lcd A(41) ; ":" ; A(42) ; "" ; A(43) ; ":" ; ">" ; A(44)
     End If

     If Z = 47 Then
    Cls
    Locate 1 , 1
    Lcd "P12"
    Locate 1 , 4
    Lcd ">" ; A(45) ; ":" ; A(46) ; " " ; A(47) ; ":" ; A(48)
    End If
    '***********************************************************
     If Z = 48 Then
     Cls
     Locate 1 , 1
     Lcd "P12"
     Locate 1 , 4
     Lcd A(45) ; ":" ; ">" ; A(46) ; "" ; A(47) ; ":" ; A(48)
     End If

     If Z = 49 Then
       Cls
        Locate 1 , 1
    Lcd "P12"
    Locate 1 , 4
    Lcd A(45) ; ":" ; A(46) ; " >" ; A(47) ; ":" ; A(48)
    End If
    '***********************************************************
     If Z = 50 Then
     Cls
     Locate 1 , 1
     Lcd "P12"
     Locate 1 , 4
     Lcd A(45) ; ":" ; A(46) ; "" ; A(47) ; ":" ; ">" ; A(48)
     End If

    If Z = 51 Then
    Cls
    Locate 1 , 1
    Lcd "P12"
    Locate 1 , 4
    Lcd ">" ; A(49) ; ":" ; A(50) ; " " ; A(51) ; ":" ; A(52)
    End If
    '***********************************************************
     If Z = 52 Then
     Cls
     Locate 1 , 1
     Lcd "P12"
     Locate 1 , 4
     Lcd A(49) ; ":" ; ">" ; A(50) ; "" ; A(51) ; ":" ; A(52)
     End If

     If Z = 53 Then
       Cls
        Locate 1 , 1
    Lcd "P12"
    Locate 1 , 4
    Lcd A(49) ; ":" ; A(50) ; " >" ; A(51) ; ":" ; A(52)
    End If
    '***********************************************************
     If Z = 54 Then
     Cls
     Locate 1 , 1
     Lcd "P12"
     Locate 1 , 4
     Lcd A(49) ; ":" ; A(50) ; "" ; A(51) ; ":" ; ">" ; A(52)
     End If

    If Z = 55 Then
    Cls
    Locate 1 , 1
    Lcd "P13"
    Locate 1 , 4
    Lcd ">" ; A(49) ; ":" ; A(50) ; " " ; A(51) ; ":" ; A(52)
    End If
    '***********************************************************
    Waitms 100
     Loop
     Return
     Loop
     End

           Z = 0

Ok:
If Z = 55 Then
End If
Incr Z
Return

Esc:
Decr Z
 If Z = 0 Then
  Z = 1
 End If
Waitms 30                                                   'i?eaaiea ooeoaiey a?aaacaa
 Gifr = 128                                                 'na?in oeaaa i?a?uaaiey
Return

  Up:
  Incr Hour
  Incr Mine
   Select Case Z                                            'oaaee?eaaai cia?aiea iaiie ec ia?aiaiiuo

 Case 1 : Decr Hour
 Case 2 : Decr Mine
 Case 3 : Decr A(1)
 Case 4 : Decr A(2)
 Case 5 : Decr Nazv3
 Case 6 : Decr Sur4

End Select

'If Dat > 31 Or Dat = 0 Then Dat = 1
'If Month = 0 Or Month > 12 Then Month = 1
'If Year > 99 Then Year = 0
If Hour > 23 Then Hour = 0
If Mine > 59 Then Mine = 0

 Minestr = Str(mine)
 Minestr = Format(minestr , "00")
 Hourstr = Str(hour)
 Hourstr = Format(hourstr , "00")
 'Daystr = Str(day)
 'Daystr = Format(daystr , "00")
 'Datstr = Str(dat)
 'Datstr = Format(datstr , "00")
 'Monthstr = Str(month)
 'Monthstr = Format(monthstr , "00")
 'Yearstr = Str(year)
 'Yearstr = Format(yearstr , "00")

  Return
    '4:
   Down:
   Select Case Z                                            

 Case 11 : Incr Hour
 Case 12 : Incr Mine
 'Case 13 : Incr Nazv1
 'Case 14 : Incr Sur2
 'Case 15 : Incr Nazv3
 'Case 16 : Incr Sur4

End Select

'If Dat > 31 Or Dat = 0 Then Dat = 1
'If Month = 0 Or Month > 12 Then Month = 1
'If Year > 99 Then Year = 0
If Hour > 23 Then Hour = 0
If Mine > 59 Then Mine = 0

 Minestr = Str(mine)
 Minestr = Format(minestr , "00")
 Hourstr = Str(hour)
 Hourstr = Format(hourstr , "00")
 'Daystr = Str(day)
 'Daystr = Format(daystr , "00")
 'Datstr = Str(dat)
 'Datstr = Format(datstr , "00")
 'Monthstr = Str(month)
 'Monthstr = Format(monthstr , "00")
 'Yearstr = Str(year)
 'Yearstr = Format(yearstr , "00")

 Return

 Button:

If Pinb.0 = 0 Then
'Waitms 10
Gosub Ok
End If

If Pind.5 = 0 Then
'Waitms 10
Gosub Esc
End If

If Pinb.2 = 0 Then
'Waitms 10
Gosub Up
End If

If Pinb.3 = 0 Then
'Waitms 10
 Gosub Down
End If
'Start Timer1
Waitms 500
Gifr = 128
Return
   End


 
exersizzeДата: Суббота, 16.04.2016, 11:14 | Сообщение # 2
Группа: Администраторы
Сообщений: 719

Статус: Offline
Код рабочий? проверяли? не нашел просто место откуда программа уходит с отображения пунктов меню. А так ноормально.

 
Toddy123Дата: Суббота, 16.04.2016, 16:22 | Сообщение # 3
Группа: Пользователи
Сообщений: 6

Статус: Offline
Здравствуйте  Exersizze!   да код рабочий, я делал ее по вашим примерам из "логгера, барометра " . Меня смущает просто такое количество  условий в меню но как ни странно  код работает! когда начал программировать контроллер то вышло что объем ее составил 10 Кб ! Я просто был не в восторге, чуть позже пришла идея может быть нужно совсем по другому сделать использовав несколько условий, а далее просто интрементировать флаг Z, и  адрес вводящих значений. Но я не смог этого сделать опыта нету но в теорий я чувствую что я прав, и можно сделать. Ну если вы говорите что все нормально, думаю я продолжу ее делать. И еще вопрос на счет кнопок: тут я сделал вариант  на диодиках и прерываний это нормально? если нет, то подскажите как мне улучшить ? wink спасибо!

 
Форум » форумы » Интересные идеи и схемы » Автомат подачи звонка (Автомат подачи звонка на микроконтроллере "Atmega16")
Страница 1 из 11
Поиск: