Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
03/03/10 18:32
Read: times


 
#173791 - Integrating Keypad and LCD CODE
hey,
Just started doing keypad code this semester in college, so still getting to grips with this sort of code. Ive written LCD Code and Ive written Keypad code, but now i have to join them together and im finding it dificult.

Below is my keypad code.

$mod831
	keyport equ P0                 ;
	col1 equ P0.0                   
	col2 equ P0.1                   
	col3 equ P0.2                   
	col4 equ P0.3                   

	keyval equ 30H                  ;To store key number
	pressed bit 0H  	        ;Flag
	      

key_init:
        mov keyport,#0FH        
        ret

get_key:
        mov keyval,#0           ;reset the number
        mov keyport,#7FH        ;make Row1 low
        acall read_col          ;read columns

        jb pressed, done        ;check if flag is set

        mov keyval,#4           ;if not then read next row
        mov keyport,#0BFH       ;make Row2 low
        acall read_col          ;read columns

        jb pressed, done        ;check if flag is set

        mov keyval,#8           ;if not then read next row
        mov keyport,#0DFH       ;make row3 low
        acall read_col          ;read columns

        jb pressed, done        ;check if flag is set

        mov keyval,#12          ;if not read row4
        mov keyport,#0EFH       ;make row4 low
        acall read_col          ;read columns

done:
        ret

read_col:                       ;read columns routine
        clr pressed             ;reset the flag
        jb col1, nextcol        ;check if first key is pressed
        jnb col1,$              ;if yes then wait for key release  
        setb pressed            ;set the flag
        ret

nextcol:                       
        jb col2, nextcol1       ;check if second key is pressed
        jnb col2,$              ;if yes then wait for key release
        inc keyval              ;its key number 2
        setb pressed            ;set the flag
        ret

nextcol1:                    
        jb col3, nextcol2       ;check if third key is pressed
        jnb col3,$              ;if yes then wait for key release
        inc keyval              ;its key 3
        inc keyval
        setb pressed            ;set the flag
        ret

nextcol2:                     
        jb col4, exit           ;check if fourth key pressed
        jnb col4,$              ;if yes then wait for key release
        inc keyval              ;its key 4
        inc keyval
        inc keyval
        setb pressed            ;set the flag
        ret

exit:                           ;if no key is pressed
        clr pressed             ;clr the flag
        clr keyval              ;reset the number
        ret
        
end

 



now my lcd code:


$MOD831
   	DB0 EQU P2.0
	DB1 EQU P2.1
	DB2 EQU P2.2
	DB3 EQU P2.3
	DB4 EQU P2.4
	DB5 EQU P2.5
	DB6 EQU P2.6
	DB7 EQU P2.7
	EN EQU P3.7
	RS EQU P3.6
	RW EQU P3.5
	DATA EQU P1

ORG 0100h

defineConstants:

clrLCDStr: DB 01h,0FFh
initLCDStr: DB   38h,0Eh,06h,0FFh

        LCDcursorOnline1Left: DB 60h,0FFh
	LCDcursorOnline2Left: DB 0C0h,0FFh

titleString2a: DB 'uP SYS',0FFh



ORG 0200h

MAIN:

	CLR RS
	CLR RW
	MOV LCDBUS,01h
        MOV SP,#2FH


LCALL defDefaultLCDCtrlSigs
LCALL initialiseLCD
LCALL clrLCD

mainLoop:

         LCALL mainSub1

   SJMP mainLoop   ; looping forever


; subroutines



defDefaultLCDCtrlSigs:

	MOV LCDBUS,#00h
	CLR RS
	CLR RW
	SETB EN

RET





chkLCDBusy:

	MOV LCDBUS,#0FF
	SETB RW
	waitBusy0:
	MOV A,LCDBUS
	JB ACC.7,waitBusy0
	exitChkLCDbusy:

	CLR RW

RET







wrCmdByte2LCD:

        MOV LCDBUS,A

        CLR EN

        SETB EN

        LCALL chkLCDBusy

RET





wrDatByte2LCD:

	MOV LCDBUS,A

	SETB RS

	CLR EN

	SETB EN

	CLR RS

	LCALL chkLCDBusy

RET





initialiseLCD:

        MOV DPTR, #initLCDStr

        LCALL wrCmdStr2LCD

ret





clrLCD:

        MOV DPTR, #clrLCDStr

        LCALL wrCmdStr2LCD

ret





wrCmdStr2LCD:



	MOV A,#00h

	MOVC A,@A+DPTR



wrCmdStr2LCDLoop:

	LCALL wrCmdByte2LCD

	INC DPTR

	MOV A,#00h

	MOVC A,@A+DPTR

	CJNE A,#0FFh,wrCmdStr2LCDLoop



RET







wrDatStr2LCD:



	MOV A,#00h

	MOVC A,@A+DPTR



wrDatStr2LCDLoop:

	LCALL wrDatByte2LCD

	INC DPTR

	MOV A,#00h

	MOVC A,@A+DPTR

	CJNE A,#0FFh,wrDatStr2LCDLoop

RET



mainSub1:



       ; MOV DPTR, #titleString1a

      ; LCALL wrDatStr2LCD

      ; LCALL delay3Sec

      ; LCALL clrLCD



	LCALL Move2LCDLine2

 	MOV DPTR, #titleString2a

 	LCALL wrDatStr2LCD

        LCALL delay3Sec

   	LCALL clrLCD

RET





Move2LCDLine2:

	CLR RS

	MOV DPTR,#LCDcursorOnline2Left

	LCALL WRCMDSTR2LCD

RET





delay3Sec:

	MOV R7,#30
	LOOP1: MOV R6,#200

	LOOP2: MOV R5,#250

	LOOP3: DJNZ R5,LOOP3

	DJNZ R6,LOOP2

	DJNZ R7,LOOP1
RET




 


My question is how do u combine the two together to print out digits from keypad to lcd.

Any help is appreciated.

P.S. Not sure if keypad code is working perfectly could test it out without using lcd.

List of 8 messages in thread
TopicAuthorDate
Integrating Keypad and LCD CODE            01/01/70 00:00      
   if you want 'micro' to answer, use e-mail            01/01/70 00:00      
      C Code            01/01/70 00:00      
         Would the C code use the same logic??            01/01/70 00:00      
            same logic as what?            01/01/70 00:00      
   Where did all the comments go?            01/01/70 00:00      
   Clues            01/01/70 00:00      
      course lecturers have been know to lurk here            01/01/70 00:00      

Back to Subject List