calculator-like code entry with matrix keypad and display


Results 1 to 36 of 36

Threaded View

  1. #25


    Did you find this post helpful? Yes | No

    Default bugs...

    Al..
    There is some odd behaviour now ... :-(
    Here's updated code with added display options and cosmetics for testing.
    So far # must be pressed twice and 126 is displayed for any number (1,2 or 3 digits) ??
    Check clearing of var's and counter , will continue with tests, I'm willing to bet it's something really small causing the problem
    Kind regards
    Dennis

    Code:
    'keypad capture code begins here
              
    'variables begin here
            
    Array var Byte [3] 'byte array holds keypresses
    A0 var byte 'counter/index
    B0 var Byte 'working sum of bytes
    KeyPress Var Byte ' will contain the ascii character of the key pressed passed from myvar
    myvar var byte 'holds keypress byte
    digit var byte 'check the number of bytes entered
    
    start:
    A0=0 'set index to 0
    
    Ini: 'main loop
    
    lcdout $fe,1
    lcdout "enter number"
    @ READKEYPAD _myvar  'read keypress variable and place in myvar
      
      LOOKUP myvar,[0,"123A456B789C*0#D"],myvar 'use lookup table to diplay proper keypress
      keypress = myvar 'pass the variable to solve strange character problem
     ' will contain the ascii character of the key pressed
      
      lcdout keypress
      pause 1000
      lcdout $fe,1  
    
    If KeyPress = "*" then goto retry
    
    If KeyPress = "#" then 'if # conditions begin here
    
    if A0=2 then 'if counter is 2 then sum all bytes
    B0= (Array[0]*100)+(Array[1]*10)+Array[2] 'byte sum
    lcdout "3 digits ",dec B0,$0d,$0a
    pause 1000
    lcdout $fe,1
    HSEROUT ["here is the total ",dec B0,$0d,$0a]  'send result to pc com port 
    endif
    
    if A0=1 then
    B0= (Array[0]*10)+Array[1]
    lcdout "2 digits " ,dec B0,$0d,$0a
    pause 1000
    lcdout $fe,1
    HSEROUT ["here is the total ",dec B0,$0d,$0a]
    endif
    
    if A0=0 then
    B0= Array[0]
    lcdout "1 digit " ,dec B0,$0d,$0a
    pause 1000
    lcdout $fe,1
    HSEROUT ["here is the total ",dec B0,$0d,$0a]
    endif
    
    A0=0
    Array[0]=0
    Array[1]=0
    Array[2]=0
    ENDIF
    
    If A0>2 then Ini
    
    Array[A0]=KeyPress -48
    A0=A0+1
    goto Ini
    
    retry:
    lcdout "retry"
    pause 1000
    lcdout $fe,1
    A0=0
    myvar=0
    goto ini
    goto start
    end
    Last edited by Dennis; - 16th December 2009 at 21:42.

Similar Threads

  1. a little help with keypad on 18f4520 please
    By Dennis in forum mel PIC BASIC Pro
    Replies: 17
    Last Post: - 24th November 2009, 21:38
  2. Keypad input test
    By Kalind in forum mel PIC BASIC Pro
    Replies: 9
    Last Post: - 8th October 2008, 05:00
  3. Need help in matrix keypad coding
    By rano_zen06 in forum mel PIC BASIC Pro
    Replies: 15
    Last Post: - 24th May 2008, 14:16
  4. LCD display not working properly
    By dilpkan in forum mel PIC BASIC Pro
    Replies: 14
    Last Post: - 2nd February 2008, 08:43
  5. Keypad entry?
    By TONIGALEA in forum General
    Replies: 3
    Last Post: - 8th August 2004, 17:10

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts