Мдя... Вот вам, юзайте на здоровие. Код громоздок, но я не программер. Вложенные меню делаются так же точ-в точь... Код расчитан на 32мегу, клаву от PC и жк wh1601a-yyh-ctk.
$regfile = "m32def.dat" \' используем ATmega32 (MRC40 с универсальным модулем)
$crystal = 10000000
$hwstack = 100 \' default use 32 for the hardware stack
$swstack = 100 \' default use 10 for the SW stack
$framesize = 100 \' default use 40 for the frame space
Config Keyboard = Pind.2 , Data = Pind.6 , Keydata = Keydata
$lib "lcd4.lbx" \'используем 4-х битное подключение дисплея с помощью альтернативной библиотеки
Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7
Config Lcd = 16 * 2
$baud = 9600
Dim S As String * 12
Dim B As Byte
Dim Menu As Byte
Dim Keymenu As Byte
Dim Longstr As String * 16
Dim Str1 As String * 8
Dim Str2 As String * 8
\'$serialinput = Kbdinput
Cls
Keymenu = 1
Longstr = "Ўpaa»Д v1.0"
Gosub Printlsd
Wait 1
Cls
Longstr = "Pa·paІoїєa Andy"
Gosub Printlsd
Wait 1
Cls
Mainmenu:
Do
If Keymenu = 1 Then
Gosub Menu1
End If
\'Gosub Kbdinput
If B = 50 Then
If Keymenu < 5 Then
Incr Keymenu
End If
End If
If B = 56 Then
If Keymenu > 1 Then
Decr Keymenu
End If
End If
Select Case Keymenu
Case 1 : Gosub Menu1
Case 2 : Gosub Menu2
Case 3 : Gosub Menu3
Case 4 : Gosub Menu4
Case 5 : Gosub Menu5
End Select
Loop
Return
Menu1:
Cls
Longstr = "BГІop KaccГ"
Gosub Printlsd
Gosub Kbdinput
If B = 13 Then
Gosub Progr1
End If
Return
Menu2:
Cls
Longstr = "¤aґpy·єa EPROM"
Gosub Printlsd
Gosub Kbdinput
If B = 13 Then
Gosub Progr2
End If
Return
Menu3:
Cls
Longstr = "BГґpy·єa EPROM"
Gosub Printlsd
Gosub Kbdinput
If B = 13 Then
Gosub Progr3
End If
Return
Menu4:
Cls
Lcd "Menu4"
Gosub Kbdinput
If B = 13 Then
Gosub Progr4
End If
Return
Menu5:
Cls
Lcd "Menu5"
Gosub Kbdinput
If B = 13 Then
Gosub Progr5
End If
Return
Progr1:
Cls
Lcd "Progr1"
Wait 1
Return
Progr2:
Cls
Lcd "Progr2"
Wait 1
Return
Progr3:
Cls
Lcd "Progr3"
Wait 1
Return
Progr4:
Cls
Lcd "Progr4"
Wait 1
Return
Progr5:
Cls
Lcd "Progr5"
Wait 1
Return
Kbdinput:
Do
B = Getatkbd()
Loop Until B <> 0
\'Lcd B
\'Wait 1
Return
End
Keydata:
\'normal keys lower case
Data 0 , 0 , 0 , 0 , 0 , 200 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , &H5E , 0
Data 0 , 0 , 0 , 0 , 0 , 113 , 49 , 0 , 0 , 0 , 122 , 115 , 97 , 119 , 50 , 0
Data 0 , 99 , 120 , 100 , 101 , 52 , 51 , 0 , 0 , 32 , 118 , 102 , 116 , 114 , 53 , 0
Data 0 , 110 , 98 , 104 , 103 , 121 , 54 , 7 , 8 , 44 , 109 , 106 , 117 , 55 , 56 , 0
Data 0 , 44 , 107 , 105 , 111 , 48 , 57 , 0 , 0 , 46 , 45 , 108 , 48 , 112 , 43 , 0
Data 0 , 0 , 0 , 0 , 0 , 92 , 0 , 0 , 0 , 0 , 13 , 0 , 0 , 92 , 0 , 0
Data 0 , 60 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0
Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0
\'shifted keys UPPER case
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 81 , 33 , 0 , 0 , 0 , 90 , 83 , 65 , 87 , 34 , 0
Data 0 , 67 , 88 , 68 , 69 , 0 , 35 , 0 , 0 , 32 , 86 , 70 , 84 , 82 , 37 , 0
Data 0 , 78 , 66 , 72 , 71 , 89 , 38 , 0 , 0 , 76 , 77 , 74 , 85 , 47 , 40 , 0
Data 0 , 59 , 75 , 73 , 79 , 61 , 41 , 0 , 0 , 58 , 95 , 76 , 48 , 80 , 63 , 0
Data 0 , 0 , 0 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 13 , 94 , 0 , 42 , 0 , 0
Data 0 , 62 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 0
Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0
Printlsd:
Str1 = Mid(longstr , 1 , 8)
Str2 = Mid(longstr , 9 , 8)
Cls
Lcd Str1
Lowerline
Lcd Str2
Return