سلام کسی می تونه لینک یک پروژه 8051((گرفتن ورودی از keypadونمایش به توان2 رسیده آن عدد روی lcd))معرفی کنه . :eek:یا حد اقل پیشنهاد اسمبلی آن :cry2:
خیلی فوریه :nerd:فایل اسمبلیش رو هم چه جوری به دست بیارم. :applause:
این فایل رو دارم که مستقیم خود عدد رو نمایش میده اما من باید چه تغییری در آن بدم تا به توان 2 رسیه آن عدد رو نمایش بده
[left][/left[left][left]]ORG 00H
MOV R7,#0FFH
CALL LCD
FIRST : CALL WAIT_OPEN
CALL DELAY
K1 : CALL WAIT_PRESS
CALL DELAY
MOV A,P3
ANL A,#00000111B
CJNE A,#00000111B,FIND
SJMP K1
FIND : CALL DELAY
CALL ROW_SEARCH
CJNE R7,#0FFH,EXIT1
AGAIN : RRC A
JNC FOUND
INC DPTR
JMP AGAIN
FOUND : CLR A
MOVC A,@A+DPTR
CALL DATA_SEND
EXIT1 : JMP FIRST
;***********************
LCD : MOV A,#30H
CALL COMMAND
MOV A,#0EH
CALL COMMAND
MOV A,#01H
CALL COMMAND
;********************
WAIT_OPEN : MOV P3,#0FFH
HERE : MOV P1,#00H
MOV A,P3
ANL A,#07H
CJNE A,#07H,HERE
RET
;**********************
WAIT_PRESS : MOV A,P3
ANL A,#07H
CJNE A,#07H,NEXT
SJMP WAIT_PRESS
NEXT : RET
;*********************
ROW_SEARCH :
MOV P1,#11111110B
MOV A,P3
ANL A,#00000111B
CJNE A,#00000111B,ROW0
MOV P1,#11111101B
MOV A,P3
ANL A,#00000111B
CJNE A,#00000111B,ROW1
MOV P1,#11111011B
MOV A,P3
ANL A,#00000111B
CJNE A,#00000111B,row2
MOV P1,#11110111B
MOV A,P3
ANL A,#00000111B
CJNE A,#000000111B,ROW3
MOV R7,#00H
JMP LAST
ROW0:MOV DPTR,#KCODE0
JMP LAST
ROW1:MOV DPTR,#KCODE1
JMP LAST
ROW2:MOV DPTR,#KCODE2
JMP LAST
ROW3:MOV DPTR,#KCODE3
JMP LAST
LAST : RET
;***************************
DELAY:
MOV R2,#10
AGAIN2: MOV R3,#250
HERE2: DJNZ R3,HERE2
DJNZ R2,AGAIN2
RET
;*************************
DATA_SEND : CJNE A,#01H,THERE
CALL COMMAND
JMP FINI
THERE : CJNE A,#10H,SEND
CALL COMMAND
CALL DELAY
MOV A,#20H
CALL SEND
CALL DELAY
MOV A,#10H
CALL COMMAND
CALL DELAY
JMP FINI
SEND : CALL READY
MOV P2,A
SETB P0.1
CLR P0.2
SETB P0.0
CLR P0.0
FINI : RET
;********************
COMMAND : CALL READY
MOV P2,A
CLR P0.1
CLR P0.2
SETB P0.0
CLR P0.0
RET
;*************
READY:
SETB P2.7
CLR P0.1
SETB P0.2
BAK : CLR P0.0
SETB P0.0
JB P2.7,BAK
RET
;**************
ORG 200H
KCODE0
B 31H,32H,33H
KCODE1
B 34H,35H,36H
KCODE2
B 37H,38H,39H
KCODE3
B 01H,30H,10H
END
خیلی فوریه :nerd:فایل اسمبلیش رو هم چه جوری به دست بیارم. :applause:
این فایل رو دارم که مستقیم خود عدد رو نمایش میده اما من باید چه تغییری در آن بدم تا به توان 2 رسیه آن عدد رو نمایش بده



[left][/left[left][left]]ORG 00H
MOV R7,#0FFH
CALL LCD
FIRST : CALL WAIT_OPEN
CALL DELAY
K1 : CALL WAIT_PRESS
CALL DELAY
MOV A,P3
ANL A,#00000111B
CJNE A,#00000111B,FIND
SJMP K1
FIND : CALL DELAY
CALL ROW_SEARCH
CJNE R7,#0FFH,EXIT1
AGAIN : RRC A
JNC FOUND
INC DPTR
JMP AGAIN
FOUND : CLR A
MOVC A,@A+DPTR
CALL DATA_SEND
EXIT1 : JMP FIRST
;***********************
LCD : MOV A,#30H
CALL COMMAND
MOV A,#0EH
CALL COMMAND
MOV A,#01H
CALL COMMAND
;********************
WAIT_OPEN : MOV P3,#0FFH
HERE : MOV P1,#00H
MOV A,P3
ANL A,#07H
CJNE A,#07H,HERE
RET
;**********************
WAIT_PRESS : MOV A,P3
ANL A,#07H
CJNE A,#07H,NEXT
SJMP WAIT_PRESS
NEXT : RET
;*********************
ROW_SEARCH :
MOV P1,#11111110B
MOV A,P3
ANL A,#00000111B
CJNE A,#00000111B,ROW0
MOV P1,#11111101B
MOV A,P3
ANL A,#00000111B
CJNE A,#00000111B,ROW1
MOV P1,#11111011B
MOV A,P3
ANL A,#00000111B
CJNE A,#00000111B,row2
MOV P1,#11110111B
MOV A,P3
ANL A,#00000111B
CJNE A,#000000111B,ROW3
MOV R7,#00H
JMP LAST
ROW0:MOV DPTR,#KCODE0
JMP LAST
ROW1:MOV DPTR,#KCODE1
JMP LAST
ROW2:MOV DPTR,#KCODE2
JMP LAST
ROW3:MOV DPTR,#KCODE3
JMP LAST
LAST : RET
;***************************
DELAY:
MOV R2,#10
AGAIN2: MOV R3,#250
HERE2: DJNZ R3,HERE2
DJNZ R2,AGAIN2
RET
;*************************
DATA_SEND : CJNE A,#01H,THERE
CALL COMMAND
JMP FINI
THERE : CJNE A,#10H,SEND
CALL COMMAND
CALL DELAY
MOV A,#20H
CALL SEND
CALL DELAY
MOV A,#10H
CALL COMMAND
CALL DELAY
JMP FINI
SEND : CALL READY
MOV P2,A
SETB P0.1
CLR P0.2
SETB P0.0
CLR P0.0
FINI : RET
;********************
COMMAND : CALL READY
MOV P2,A
CLR P0.1
CLR P0.2
SETB P0.0
CLR P0.0
RET
;*************
READY:
SETB P2.7
CLR P0.1
SETB P0.2
BAK : CLR P0.0
SETB P0.0
JB P2.7,BAK
RET
;**************
ORG 200H
KCODE0

KCODE1

KCODE2

KCODE3

END
دیدگاه