??? 12/30/09 17:55 Modified: 12/30/09 18:59 Read: times |
#172042 - keypad and lcd with 8952 |
Hi, I am a newbie in 8952. I wish to interface an LCD and a keypad. A simple program,that displays the value of the button that is pressed. I've wrote the program, but I am having some trouble. It is like entering a loop and stays in it for infinity and nothing is being displayed on the LCD.
**I tested the LCD code separately, and it worked fine. Can somebody help me?? Thanks in advance. This is the code: ;//THIS IS A PRGRAM THAT DISPLAYS THE NUMBER THAT IS PRESSED ON THE KEYPAD ON THE LCD ;//*********************************************************************************** ;//========================================== ; LCD IS USING PORT 1 & 2 ; KEYPAD IS USING PORT 3 ;//========================================== ORG 0 LJMP MAIN ;BYPASS INTERRUPT VECTOR TABLE ;///MAIN PROGRAM/// ORG 100H RS EQU P2.0 RW EQU P2.1 EN EQU P2.2 MAIN: MOV SP,#256-32 ;DEFINE STACK 32BYTES MOV P3,#0FFh ; CONFIGURE LOWER NIBBLE OF P3 ;INITIALIZATION START FOR LCD MOV A,#038H LCALL COMW MOV A,#00CH LCALL COMW MOV A,#001H LCALL COMW MOV A,#006H LCALL COMW MOV A,#083H LCALL COMW ;INITIALIZATION END FOR LCD ;============================================================= ; KEYPAD PROGRAM ;============================================================= K1: ;TO ENSURE THAT ALL SWITCHES ARE OPEN MOV P3,#0 ;% MOV A,P3 ANL A,#00001111B ;DISABLE UPPER NIBBLE CJNE A,#00001111B, K1 ; K2: ;CHECK SWITCHES TO SEE IF ONE IS CLOSED ACALL DELAY MOV A,P3 ANL A,#00001111B CJNE A,#00001111B,OVER SJMP K2 ; OVER: ACALL DELAY MOV A,P3 ANL A,#00001111B CJNE A,#00001111B,OVER1 SJMP K2 ; OVER1: MOV P3,#11111110B MOV A,P3 ANL A,#00001111B CJNE A,#00001111B,ROW_0 ; MOV P3,#11111101B MOV A,P3 ANL A,#00001111B CJNE A,#00001111B,ROW_1 ; MOV P3,#11111011B MOV A,P3 ANL A,#00001111B CJNE A,#00001111B,ROW_2 ; MOV P3,#11110111B MOV A,P3 ANL A,#00001111B CJNE A,#00001111B,ROW_3 ; LJMP K2 ; ROW_0: MOV DPTR,#KCODE0 SJMP FIND ; ROW_1: MOV DPTR,#KCODE1 SJMP FIND ; ROW_2: MOV DPTR,#KCODE2 SJMP FIND ; ROW_3: MOV DPTR,#KCODE3 SJMP FIND ; ; FIND: RRC A JNC MATCH INC DPTR SJMP FIND MATCH: CLR A MOVC A,@A+DPTR ACALL DATAW, A ;//ACALL DATAWRITE,A TO SEND DATA FROM ACCUMULATOR TO LCD LJMP K1 ; ;///DELAY SUB-ROUTINE/// ; DELAY: MOV R2,#5 HERE: NOP DJNZ R3,HERE RET ; ; KCODE0: DB '7','8','9' KCODE1: DB '4','5','6' KCODE2: DB '1','2','3' KCODE3: DB ' ','0','=' ;=========================================== ; LCD PROGRAM ;=========================================== MOV A,#0C1H ACALL DISP_STRING HAWN: SJMP HAWN AGAIN: SJMP AGAIN ;endless loop COMW: MOV P1,A ;command write sequence CLR RS ;RS=0 for command CLR RW ;R/W=0 to write to LCD SETB EN ;E=1 for H-to-L pulse CLR EN ;E=0 ,latch in LCALL DELAY2 RET DATAW: MOV P1,A ;data write sequence SETB RS ;RS=1 for data CLR RW ;R/W=0 to write to LCD SETB EN ;E=1 for H-to-L pulse CLR EN ;E=0 ,latch in LCALL DELAY2 RET DISP_STRING: CLR A ;A=0 MOV R5,#00H ;R5=0 NEXT_CHAR: INC R5 ;R5+1 MOVC A,@A+DPTR ACALL DATAW MOV A,R5 CJNE R5,#0EH,NEXT_CHAR RET DELAY2: MOV R6,#50 ;simple delay routine HERE2: MOV R7,#255 ;for 0.0124S or 124ms HERE3: DJNZ R7,HERE3 DJNZ R6,HERE2 RET ;============================================================= END ;============================================================= |
Topic | Author | Date |
keypad and lcd with 8952 | 01/01/70 00:00 | |
One thing at a time | 01/01/70 00:00 | |
Err | 01/01/70 00:00 | |
eh | 01/01/70 00:00 | |
most of us do | 01/01/70 00:00 | |
Assembler. | 01/01/70 00:00 | |
Literature | 01/01/70 00:00 | |
only if you understand what you are doing![]() | 01/01/70 00:00 |