Autor Tema: Rutina para teclado hexadecimal en PBP  (Leído 3003 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado RGL

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 634
Rutina para teclado hexadecimal en PBP
« en: 30 de Agosto de 2002, 04:07:00 »
Aquí dejo un ejemplo de rutina hexadecimal escrita en PBP. Está sacada de la página de Melabs.


Saludos
Ricky

P.D: en la previsualización del mensaje aparece en las lineas de comentarios  delante de la comilla, no se por qué pasa esto pero la barra hay que eliminarla.
***************

" PicBasic Pro program to create telephone pad tone
"  Oscillator must be set to 20MHz

" Define LOADER_USED to allow use of the boot loader.
" This will not affect normal program operation.
Define   LOADER_USED   1

Define  OSC     20

" Define LCD connections
Define  LCD_DREG        PORTD
Define  LCD_DBIT        4
Define  LCD_RSREG       PORTE
Define  LCD_RSBIT       0
Define  LCD_EREG        PORTE
Define  LCD_EBIT        1


" Define program variables
col     var     byte            " Keypad column
row     var     byte            " Keypad row
key     var     byte            " Key value
tone    var     byte            " Tone number

spkr    var     PORTC.2         " Alias speaker pin


        OPTION_REG.7 = 0        " Enable PORTB pullups

        ADCON1 = 7              " Make PORTA and PORTE digital
        Low PORTE.2             " LCD R/W low (write)

        Pause 100               " Wait for LCD to start

        Lcdout $fe, 1, "Press any key"  " Display sign on message

loop:
        Gosub getkey            " Get a key from the keypad
        Lookup tone,["0123456789*#ABCD"],key
        Lcdout $fe, 1, key      " Display ASCII key number
        Dtmfout spkr, [tone]
        Goto loop               " Do it forever


" Subroutine to get a key from keypad
getkey:
        Pause 50                " Debounce

getkeyu:
        " Wait for all keys up
        PORTB = 0               " All output pins low
        TRISB = $f0             " Bottom 4 pins out, top 4 pins in
        If ((PORTB >> 4) != $f) Then getkeyu    " If any keys down, loop

        Pause 50                " Debounce

getkeyp:
        " Wait for keypress
        For col = 0 to 3        " 4 columns in keypad
                PORTB = 0       " All output pins low
                TRISB = (dcd col) ^ $ff " Set one column pin to output
                row = PORTB >> 4        " Read row
                If row != $f Then gotkey        " If any keydown, exit
        Next col

        Goto getkeyp            " No keys down, go look again

gotkey: " Change row and column to key number 0 - 15
        key = (col * 4) + (ncd (row ^ $f)) - 1

        " Translate key to telephone keypad tone
        " 10 = *
        " 11 = #
        " 12 = A
        " 13 = B
        " 14 = C
        " 15 = D
        Lookup key,[1,2,3,12,4,5,6,13,7,8,9,14,10,0,11,15],tone
        Return                  " Subroutine over

        End