U

menü yardım

Başlatan uzeyir, 22 Mart 2013, 12:02:21

uzeyir

yapmaya çalıştığım menü kodlarında yardıma ihtiyacım var.  oluşturduğum menüde üç adet ayar var. seçtiğim birisini hafızaya alacak ve hafızaya aldığı kısmı çalıştıracak. seçeneklerden değiştirdiğimde diğer ayarı hafızaya alacak ve çalıştıracak.  yazmaya çalıştığım kod




DEFINE OSC 4

TRISA=%111111
TRISB=%00000001
TRISC=%01110000
TRISD=%00000000
TRISE=%00000000
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0

DEFINE LCD_DREG      PORTB   
DEFINE LCD_DBIT      4      
DEFINE LCD_RSREG   PORTB   
DEFINE LCD_RSBIT   2   
DEFINE LCD_EREG      PORTB   
DEFINE LCD_EBIT      3      
DEFINE LCD_BITS      4   
DEFINE LCD_LINES   4
ADCON1 = 7     
'---------------------------değişkenler-----------------------------------------
    AYR      VAR    BYTE
    SYC      VAR    BYTE
    SAYAC    VAR    BYTE
    MENU     VAR    PORTA.0
    YUKARI   VAR    PORTA.1
    ASAGI    VAR    PORTA.2
    X        VAR    WORD       

   
    symbol ROLE1=PORTC.0
    symbol ROLE2=PORTC.1
    symbol ROLE3=PORTC.2
    SYMBOL ROLE4=PORTC.3
    SYMBOL BUZER=PORTE.0
'-----------------------------B A Ş L A N G I Ç ------------------------------   
       
GIRIS:
         LCDOUT $FE,$82, "DENEME"               
         lcdout $FE,$C5,"VER. 1.0"
         PAUSE 2000
         LCDOUT $FE,1
         
'-------------------------------------------------------------------------------
BASLANGIC:
SYC=0

READ $01,AYR
IF AYR=1 THEN GOTO AYAR1
IF AYR=2 THEN GOTO AYAR2
IF AYR=3 THEN GOTO AYAR3                       
BASLA: 
IF MENU=1 THEN  GOTO AYAR_MENUSU
goto BASLA       
        
BIP:
HIGH buzer   
pause 50
LOW buzer 
RETURN

BIPBIP:
HIGH buzer   
PAUSE 50
LOW buzer
PAUSE 100
HIGH BUZER
PAUSE 50
LOW BUZER
RETURN

AYAR_MENUSU:
GOSUB BIP
WHILE MENU=1:WEND
GOSUB TEMIZLE
SYC=0
AYARLAR:
IF YUKARI=1 THEN
GOSUB BIP
WHILE YUKARI=1:WEND
SYC=SYC+1
IF SYC=4 THEN SYC=0
ENDIF

IF ASAGI=1 THEN
GOSUB BIP
WHILE ASAGI=1:WEND
SYC=SYC-1
IF SYC=255 THEN SYC=4
ENDIF
GOSUB DURUM
GOTO AYARLAR

DURUM:
SELECT CASE SYC
CASE 0
lcdout $fe,$c0,"  AYARLAR  "
CASE 1
lcdout $fe,$c0,"    AYAR1     "
IF MENU=1 then
AYR=1
WRITE $01,AYR
GOSUB BIP
GOTO AYARLANDI
ENDIF
CASE 2
lcdout $fe,$c0,"   AYAR2  "
IF MENU=1 then
AYR=2
WRITE $01,AYR
GOSUB BIP
GOTO AYARLANDI
ENDIF
CASE 3
lcdout $fe,$c0,"   AYAR3  "
IF MENU=1 then
AYR=3
WRITE $01,AYR
GOSUB BIP
GOTO AYARLANDI
ENDIF
END SELECT
RETURN
 
AYARLANDI:
       IF MENU=1 then AYARLANDI
       lcdout $fe,1
       LCDOUT $FE,$C0,"AYARLAR KAYDEDiLDi.."
       GOSUB BIPBIP
       SYC=0
       PAUSE 800
       GOSUB TEMIZLE
       goto BASLANGIC       
TEMIZLE:
lcdout $fe,1
RETURN       

AYAR1:
lcdout $fe,$c0,"  AYAR1  "
IF MENU=1 THEN  GOTO AYAR_MENUSU

AYAR2:
lcdout $fe,$c0,"  AYAR2  "
IF MENU=1 THEN  GOTO AYAR_MENUSU

AYAR3:
lcdout $fe,$c0,"  AYAR3  "
IF MENU=1 THEN  GOTO AYAR_MENUSU


END
   
     





ete

Verilen program bir sürü fazlalık içeriyor ve kafa karıştırmaktan başka işe yaramıyor maalesef.
O nedenle pek çok yerini sildim ve yerine pek çok kişiye örnek olabilecek bir kod yazmaya çalıştım.
Sanırım istenen böyle bir şey

Ete

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : E.T.E]                                            *
'*  Notice  : Copyright (c) 2013 [İzinsiz Kullanılamaz]         *
'*          : All Rights Reserved                               *
'*  Date    : 22.03.2013                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_off
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC

DEFINE OSC 4

TRISA=%00111111
TRISB=%00000001
TRISC=%01110000
TRISD=%00000000
TRISE=%00000000
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
DEFINE LCD_BITS 4
DEFINE LCD_LINES 4
ADCON1 = 7     
'---------------------------değişkenler-----------------------------------------
 
    HAM   VAR  WORD
    HAMA  VAR  WORD
    X     VAR  WORD     
    DUR   VAR  BYTE
    AYR2  VAR  BYTE
    SYC   VAR  BYTE   
    SAYI  VAR  BYTE
    SAYAC VAR  BYTE
    AYAR  VAR  BYTE
    SECIM VAR  BYTE '0=AYAR-1,  1=AYAR-2,  2=AYAR-3 SECILMIS OLACAK
    Y     VAR  BIT
    UPC   VAR  BIT
    AYR   VAR  BIT   
   
    SYMBOL MENU=PORTA.0   
    SYMBOL YUKARI=PORTA.1
    SYMBOL ASAGI=PORTA.2   
    symbol ROLE1=PORTC.0
    symbol ROLE2=PORTC.1
    symbol ROLE3=PORTC.2
    SYMBOL ROLE4=PORTC.3
    SYMBOL BUZER=PORTE.0
'-----------------------------B A Ş L A N G I Ç ------------------------------   
          LOW ROLE1
          LOW ROLE2
        PAUSE 200 
GIRIS:
         LCDOUT $FE,$82, "DENEME"           
         lcdout $FE,$C5,"VER. 1.0"
         PAUSE 2000
         LCDOUT $FE,1
         REad 10,SECIM
         IF SECIM=255 THEN SECIM=0
         
'-------------------------------------------------------------------------------
BASLA:
          LCDOUT $FE,$80,"   CALISMA EKRANI   "
          IF MENU=1 THEN AYAR_MENUSU
          SELECT CASE SECIM
          CASE 0  'AYAR-1 SECILMIŞ OLDUY ONA AİT AYARLAR BURADA YER ALMALI
            LCDOUT $FE,$94," AYAR-1 SECILMISTIR "
          CASE 1  'AYAR-2 SECILMIŞS OLDU ONA AİT AYARLAR BURADA YER ALMALI
            LCDOUT $FE,$94," AYAR-2 SECILMISTIR "         
          CASE 2  'AYAR-3  SECILMIS OLDU ONA AİT AYARLAR BURADA YER ALMALI
            LCDOUT $FE,$94," AYAR-3 SECILMISTIR "
          END SELECT
            LCDOUT $FE,$D4,"  MENU=AYAR MENUSU  "

          goto BASLA       
'---------------------------------------EKRANA YAZ -----------------------------
         
BIP:
    HIGH buzer   
pause 50
     LOW buzer 
  RETURN
BIPBIP:
     HIGH buzer   
    PAUSE 50
      LOW buzer
    PAUSE 100
     HIGH BUZER
    PAUSE 50
      LOW BUZER
RETURN
'-------------------------------------------------------------------------------
AYAR_MENUSU:
            GOSUB EKRAN_MENU
            GOSUB BIP
            WHILE MENU=1:WEND
            SYC=0
MENU_BIR:
         GOSUB EKRAN_MENU
         WHILE YUKARI=1 OR ASAGI=1:WEND           
MENU_BIRBIR:
         LCDOUT $FE,$C0,"<",$FE,$C2,">"
         IF YUKARI=1 THEN MENU_UC
         IF ASAGI=1 THEN MENU_IKI
         IF MENU=1 THEN BIR_SECTIM
         PAUSE 50
         GOTO MENU_BIRBIR   

MENU_IKI:
         GOSUB EKRAN_MENU
         GOSUB BIP
         WHILE YUKARI=1 OR ASAGI=1:WEND
MENU_IKIBIR:
         LCDOUT $FE,$94,"<",$FE,$96,">"
         IF YUKARI=1 THEN MENU_BIR
         IF ASAGI=1 THEN MENU_UC
         IF menu=1 THEN IKI_SECTIM
         PAUSE 50
         GOTO MENU_IKIBIR       
         
MENU_UC:
         GOSUB EKRAN_MENU
         GOSUB BIP
         WHILE YUKARI=1 OR ASAGI=1:WEND
MENU_UCBIR:
           LCDOUT $FE,$D4,"<",$FE,$D6,">"
           IF YUKARI=1 THEN MENU_IKI
           IF ASAGI=1 THEN MENU_BIR
           IF menu=1 THEN UC_SECTIM
           PAUSE 50
           GOTO MENU_UCBIR
BIR_SECTIM:
           SECIM=0
           GOTO BITIR
           
IKI_SECTIM:
           SECIM=1
           GOTO BITIR
UC_SECTIM:
          SECIM=2
BITIR:
      WRITE 10,SECIM:PAUSE 10
      GOSUB TEMIZLE
      WHILE MENU=1:WEND
      GOTO BASLA                                                     


EKRAN_MENU:
           LCDOUT $FE,$80,"    MENU EKRANI     "
           lcdout $fe,$c0," 1  AYAR1           "
           lcdout $fe,$94," 2  AYAR2           "
           lcdout $fe,$D4," 3  AYAR3           "
           RETURN
               
TEMIZLE:
        lcdout $fe,1
RETURN       
'-------------------------------------------------------------------------------
VOLT_KONTROL:

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

uzeyir

ETE hocam çok teşekkürler. yaptığım ayarları hafızaya alacak ve çalışlırken okuyup gerekli olan programı çalıştıracak. üzerinde bir çalışayım.  engin bilgilerinizle yardımınızdan dolayı teşekkür ederim.

Powered by EzPortal