Mình có vấn đề như thế này nhờ các bạn giúp đở nha.
Mình dùng post 1 giao tiếp với bàn phím (chỉ sữ dụng các số và nút enter, xóa.) các nút khác bỏ qua.
P0 xuất ra led 7 đoạn:
Mình làm xong chương trình quét bàn phím rồi. Bây giờ mình muốn xuất số vừa nhập từ bàn phím vào ra cập led đầu . Ví dụ nhập 59 từ bàn phím vào thì cập led đầu hiện 5 trứoc và chuyển 5 qua led kế bên rồi số 9 thay led số 5 và ấn "enter" thì số đó được lưu vào một ô nhớ bất kỳ còn bấm "xóa" thì xóa về 00.(Nếu bấm số 5 hiển thị số 05) Mong các bạn giúp đở.
Xin chân thành cảm ơn
Code quet led:
OUT_LED:
MOV P2,#0H
MOV A,10H
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
MOV A,11H
MOVC A,@A+DPTR
MOV P0,A
SETB P2.1
LCALL DELAY_500US
CLR P2.1
MOV A,12H
MOVC A,@A+DPTR
MOV P0,A
SETB P2.2
LCALL DELAY_500US
CLR P2.2
MOV A,13H
MOVC A,@A+DPTR
MOV P0,A
SETB P2.3
LCALL DELAY_500US
CLR P2.3
MOV A,14H
MOVC A,@A+DPTR
MOV P0,A
SETB P2.4
LCALL DELAY_500US
CLR P2.4
MOV A,15H
MOVC A,@A+DPTR
MOV P0,A
SETB P2.5
LCALL DELAY_500US
CLR P2.5
MOV A,16H
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
LCALL DELAY_500US
CLR P2.6
MOV A,17H
MOVC A,@A+DPTR
MOV P0,A
SETB P2.7
LCALL DELAY_500US
CLR P2.7
RET
Quet Ban Phim:
;QUET PHIM HIEN THI RA LED
ORG 00H
SJMP MAIN
;P1.0,P1.1,P1.2,P1.3= HANG
;P1.4,P1.5,P1.6,P1.7= COT
;--------------------------------------------
MAIN:
MOV DPTR,#MALED
LCALL QUET_PHIM
SJMP MAIN
RET
QUET_PHIM:
QLAY1: MOV P1,#0FFH ; CHO TAT CA CAC HANG COT LEN MUC 1
MOV P1,#0F0H ;NOI DAT CAC HANG
MOV A,P1
ANL A,#0F0H
CJNE A,#0F0H,QLAY1
QLAY2: LCALL DELAY_200MS ;17
MOV A,P1
ANL A,#0F0H
CJNE A,#0F0H,TIEP ; CO PHIM NHAN THI TIEP
SJMP QLAY2 ;KO CO PHIM BAM QUAY LAI 2
TIEP:
MOV P1,#11111110B ;NOI DAT HANG 0
MOV A,P1 ; DOC PHIM
ANL A,#0F0H
CJNE A,#0F0H,HANG_00
MOV P1,#11111101B ;NOI DAT HANG 1
MOV A,P1 ; DOC PHIM
ANL A,#0F0H
CJNE A,#0F0H,HANG_01
MOV P1,#11111011B ;NOI DAT HANG 2
MOV A,P1 ; DOC PHIM
ANL A,#0F0H
CJNE A,#0F0H,HANG_02
MOV P1,#11110111B ;NOI DAT HANG 3
MOV A,P1 ; DOC PHIM
ANL A,#0F0H
CJNE A,#0F0H,HANG_03
SJMP THOAT
HANG_00: ;40
MOV A,P1
CJNE A,#11101110b,SO_2
LCALL NUM_1
SO_2: MOV A,P1
CJNE A,#11011110b,SO_3
LCALL NUM_2
SO_3: MOV A,P1
CJNE A,#10111110b,THOAT
LCALL NUM_3
HANG_01:
MOV A,P1
CJNE A,#11101101b,SO_5
LCALL NUM_4
SO_5: MOV A,P1
CJNE A,#11011101b,SO_6
LCALL NUM_5
SO_6: MOV A,P1
CJNE A,#10111101b,THOAT
LCALL NUM_6
HANG_02:
MOV A,P1
CJNE A,#11101011b,SO_8
LCALL NUM_7
SO_8: MOV A,P1
CJNE A,#11011011b,SO_9
LCALL NUM_8
SO_9: MOV A,P1
CJNE A,#10111011b,THOAT
LCALL NUM_9
HANG_03:
MOV A,P1
CJNE A,#11100111b,SO_0
LCALL NUT_XOA
SO_0:
MOV A,P1
CJNE A,#11010111b,NUT_ENTER
LCALL NUM_0
NUT_ENTER:
MOV A,P1
CJNE A,#11100111b,THOAT
LCALL ENTER
THOAT:
RET
NUM_0:
MOV P2,#0FFH
MOV A,#0
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
NUM_1:
MOV P2,#0FFH
MOV A,#1
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US; 100
CLR P2.0
RET
NUM_2:
MOV P2,#0FFH
MOV A,#2
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
NUM_3:
MOV P2,#0FFH
MOV A,#3
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
NUM_4:
MOV P2,#0FFH
MOV A,#4
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
NUM_5:
MOV P2,#0FFH
MOV A,#5
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
NUM_6:
MOV P2,#0FFH
MOV A,#6
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
NUM_7:
MOV P2,#0FFH
MOV A,#7
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
NUM_8:
MOV P2,#0FFH
MOV A,#8
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
NUM_9:
MOV P2,#0FFH
MOV A,#9
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
NUT_XOA:
MOV P2,#0FFH
MOV A,#0
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
ENTER:
MOV P2,#0FFH
MOV A,#9
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
DELAY_500US:
MOV R5,#250
DJNZ R5,$
RET
DELAY_200MS:
MOV R6,#20
LOOP3: LCALL DELAY_500US
DJNZ R6,LOOP3
RET
MALED: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
Mình dùng post 1 giao tiếp với bàn phím (chỉ sữ dụng các số và nút enter, xóa.) các nút khác bỏ qua.
P0 xuất ra led 7 đoạn:
Mình làm xong chương trình quét bàn phím rồi. Bây giờ mình muốn xuất số vừa nhập từ bàn phím vào ra cập led đầu . Ví dụ nhập 59 từ bàn phím vào thì cập led đầu hiện 5 trứoc và chuyển 5 qua led kế bên rồi số 9 thay led số 5 và ấn "enter" thì số đó được lưu vào một ô nhớ bất kỳ còn bấm "xóa" thì xóa về 00.(Nếu bấm số 5 hiển thị số 05) Mong các bạn giúp đở.
Xin chân thành cảm ơn
Code quet led:
OUT_LED:
MOV P2,#0H
MOV A,10H
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
MOV A,11H
MOVC A,@A+DPTR
MOV P0,A
SETB P2.1
LCALL DELAY_500US
CLR P2.1
MOV A,12H
MOVC A,@A+DPTR
MOV P0,A
SETB P2.2
LCALL DELAY_500US
CLR P2.2
MOV A,13H
MOVC A,@A+DPTR
MOV P0,A
SETB P2.3
LCALL DELAY_500US
CLR P2.3
MOV A,14H
MOVC A,@A+DPTR
MOV P0,A
SETB P2.4
LCALL DELAY_500US
CLR P2.4
MOV A,15H
MOVC A,@A+DPTR
MOV P0,A
SETB P2.5
LCALL DELAY_500US
CLR P2.5
MOV A,16H
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
LCALL DELAY_500US
CLR P2.6
MOV A,17H
MOVC A,@A+DPTR
MOV P0,A
SETB P2.7
LCALL DELAY_500US
CLR P2.7
RET
Quet Ban Phim:
;QUET PHIM HIEN THI RA LED
ORG 00H
SJMP MAIN
;P1.0,P1.1,P1.2,P1.3= HANG
;P1.4,P1.5,P1.6,P1.7= COT
;--------------------------------------------
MAIN:
MOV DPTR,#MALED
LCALL QUET_PHIM
SJMP MAIN
RET
QUET_PHIM:
QLAY1: MOV P1,#0FFH ; CHO TAT CA CAC HANG COT LEN MUC 1
MOV P1,#0F0H ;NOI DAT CAC HANG
MOV A,P1
ANL A,#0F0H
CJNE A,#0F0H,QLAY1
QLAY2: LCALL DELAY_200MS ;17
MOV A,P1
ANL A,#0F0H
CJNE A,#0F0H,TIEP ; CO PHIM NHAN THI TIEP
SJMP QLAY2 ;KO CO PHIM BAM QUAY LAI 2
TIEP:
MOV P1,#11111110B ;NOI DAT HANG 0
MOV A,P1 ; DOC PHIM
ANL A,#0F0H
CJNE A,#0F0H,HANG_00
MOV P1,#11111101B ;NOI DAT HANG 1
MOV A,P1 ; DOC PHIM
ANL A,#0F0H
CJNE A,#0F0H,HANG_01
MOV P1,#11111011B ;NOI DAT HANG 2
MOV A,P1 ; DOC PHIM
ANL A,#0F0H
CJNE A,#0F0H,HANG_02
MOV P1,#11110111B ;NOI DAT HANG 3
MOV A,P1 ; DOC PHIM
ANL A,#0F0H
CJNE A,#0F0H,HANG_03
SJMP THOAT
HANG_00: ;40
MOV A,P1
CJNE A,#11101110b,SO_2
LCALL NUM_1
SO_2: MOV A,P1
CJNE A,#11011110b,SO_3
LCALL NUM_2
SO_3: MOV A,P1
CJNE A,#10111110b,THOAT
LCALL NUM_3
HANG_01:
MOV A,P1
CJNE A,#11101101b,SO_5
LCALL NUM_4
SO_5: MOV A,P1
CJNE A,#11011101b,SO_6
LCALL NUM_5
SO_6: MOV A,P1
CJNE A,#10111101b,THOAT
LCALL NUM_6
HANG_02:
MOV A,P1
CJNE A,#11101011b,SO_8
LCALL NUM_7
SO_8: MOV A,P1
CJNE A,#11011011b,SO_9
LCALL NUM_8
SO_9: MOV A,P1
CJNE A,#10111011b,THOAT
LCALL NUM_9
HANG_03:
MOV A,P1
CJNE A,#11100111b,SO_0
LCALL NUT_XOA
SO_0:
MOV A,P1
CJNE A,#11010111b,NUT_ENTER
LCALL NUM_0
NUT_ENTER:
MOV A,P1
CJNE A,#11100111b,THOAT
LCALL ENTER
THOAT:
RET
NUM_0:
MOV P2,#0FFH
MOV A,#0
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
NUM_1:
MOV P2,#0FFH
MOV A,#1
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US; 100
CLR P2.0
RET
NUM_2:
MOV P2,#0FFH
MOV A,#2
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
NUM_3:
MOV P2,#0FFH
MOV A,#3
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
NUM_4:
MOV P2,#0FFH
MOV A,#4
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
NUM_5:
MOV P2,#0FFH
MOV A,#5
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
NUM_6:
MOV P2,#0FFH
MOV A,#6
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
NUM_7:
MOV P2,#0FFH
MOV A,#7
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
NUM_8:
MOV P2,#0FFH
MOV A,#8
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
NUM_9:
MOV P2,#0FFH
MOV A,#9
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
NUT_XOA:
MOV P2,#0FFH
MOV A,#0
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
ENTER:
MOV P2,#0FFH
MOV A,#9
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY_500US
CLR P2.0
RET
DELAY_500US:
MOV R5,#250
DJNZ R5,$
RET
DELAY_200MS:
MOV R6,#20
LOOP3: LCALL DELAY_500US
DJNZ R6,LOOP3
RET
MALED: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
Comment