I am still probably not seeing the problem
In your caseCode:FOR row = 0 TO 3 ' 4 rows in keypad
Or maybe it is wired wrong...Code:FOR row = 0 TO 2 ' 3 rows in keypad![]()
I am still probably not seeing the problem
In your caseCode:FOR row = 0 TO 3 ' 4 rows in keypad
Or maybe it is wired wrong...Code:FOR row = 0 TO 2 ' 3 rows in keypad![]()
Dave
Always wear safety glasses while programming.
I double checked everything with my Flukemy rows are on Portb. 1,Portb.2,and Portb.3 my columns are on Portb.4 - 7. I had everything setup like the orginal example on Bruce's site and it worked great but I wanted to use Portb.0 for my interrupt, thats when I moved everthing over one bit. It works, about eight functions work correctly but now I can send on two different buttons things like two decimal 7's or 5's , etc. instead of decimal 1-12. When I break the code down on paper to calculate what the output would be it concurs the same thing so thats why I was wondering how I could adjust the code, as far as I can see it has to do with the line "for row = 1 to 3" thats why I asked if 1 to 3 does refer to bit 1-3 in the variable row, and if so how can I compensate for three rows that are now shifted by one bit. I tried to see if ((row >> 1) *3) + (ncd (col ^$fe)) but about the same results.
Thanks again.
Last edited by tazntex; - 13th July 2010 at 00:32.
OK, now I think I see what you are doing. Me a little slower than normal today...
Should isolate bit 1 ,2, and 3.Code:row = PORTB & %00001110
Dave
Always wear safety glasses while programming.
Well I tried that also, but that doesn't work either. I believe I mentioned earlier that I in my mind I was thinking since I moved the rows and columns over by one bit why don't I just create another variable such as:
row1 = row >> 1
then I could still use the same formula:
key = (row * 3) + (NCD (col ^ $f)) ' (row * 3) because I have three rows and when I return the priority bit
'of the columns after I flip the state of the bits ^$f that will tell me which
' column is actually the one being used at that moment of time as an output.
But I tried it and still have not gained any ground.
hmmm, back to the drawing board.
Thanks again...
If I substitute this:
if row = 1 && col.0 = 0 then key1 = 1
if row = 1 && col.1 = 0 then key1 = 2
if row = 1 && col.2 = 0 then key1 = 6
if row = 1 && col.3 = 0 then key1 = 7
if row = 2 && col.0 = 0 then key1 = 5
if row = 2 && col.2 = 0 then key1 = 10
if row = 2 && col.3 = 0 then key1 = 11
if row = 3 && col.0 = 0 then key1 = 3
if row = 3 && col.1 = 0 then key1 = 4
if row = 3 && col.2 = 0 then key1 = 8
if row = 3 && col.3 = 0 then key1 = 9
for this:
key = (row1 * 3) + (NCD (col ^ $f))
everything works great but isn't there a simpler way?
Thanks
Bookmarks