PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC - Thiết kế và Ứng dụng

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 20-12-2006, 04:45 PM   #1
tranhuyky
Đệ tử 2 túi
 
Tham gia ngày: Nov 2006
Bài gửi: 39
:
Send a message via Yahoo to tranhuyky
Giao tiếp keyboard ps/2, pic, LCD

Chào các bạn,
Mình có bài toán giao tiếp keyboard ps/2, pic và LCD 16x2.
Kết nối chân clock và data của keyboard ps/2 với pic6f877a qua cổng B0,B1. Nhiệm vụ đặt ra là:
* Nhấn 1 phím trên keyboard thì hiển thị phím đó ra lcd.
* Khi nhấn num lock, caps lock, scroll lock thì pic gởi tính hiệu cho keyboard để các led tương ứng này sáng lên.
* Nhấn backspace thì xóa ký tự...
Mong nhận sự chỉ giáo của các bạn.
tranhuyky vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-12-2006, 08:12 PM   #2
pham_dinh_hung83
Đệ tử 1 túi
 
Tham gia ngày: Jul 2006
Bài gửi: 17
:
đọc tài liệu của sony ấy, tương tự như tay playstation. các bác robocon vẫn làm, đừng nối dài dây hơn của nó nhe, đơ đấy. đội của mình thua vì nó ngĩ mà ớn.
nó cơ bản là tryền nối tiếp đồng bộ, các bít dữ liệu rơi trên xung ck.
vào trang bkpro.info có code mẫu,
ko bít cái của mình để đâu mất rồi
làm đồ án bận quá, có gì mail cho mình
ok, chúc vui
pham_dinh_hung83 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-12-2006, 11:33 PM   #3
tranhuyky
Đệ tử 2 túi
 
Tham gia ngày: Nov 2006
Bài gửi: 39
:
Send a message via Yahoo to tranhuyky
tính hiệu ACK trong keyboard

Trích:
Nguyên văn bởi pham_dinh_hung83 View Post
đọc tài liệu của sony ấy, tương tự như tay playstation. các bác robocon vẫn làm, đừng nối dài dây hơn của nó nhe, đơ đấy. đội của mình thua vì nó ngĩ mà ớn.
nó cơ bản là tryền nối tiếp đồng bộ, các bít dữ liệu rơi trên xung ck.
vào trang bkpro.info có code mẫu,
ko bít cái của mình để đâu mất rồi
làm đồ án bận quá, có gì mail cho mình
ok, chúc vui
Email của bạn là gì vậy?
Minh gap rac roi o phan truyen du lieu tu pic xuong keyboard, vd khi
nhan num lock thì pic nhan duoc tính hieu va goi yeu cau keyboard sang
led num lock. Minh truyen keyboard khong nhan duoc. Tren mang co noi co
2 loai ACK , 1 cái là 1byte(0xFA) 1 cái là 1 bit, vay khong biet host lam the
nào phan biet duoc ACK của keyboard là 1 bit hay 1 byte.
tranhuyky vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-12-2006, 06:50 PM   #4
pham_dinh_hung83
Đệ tử 1 túi
 
Tham gia ngày: Jul 2006
Bài gửi: 17
:
thực ra thì mình khá bận .
mấy hôm vừa rồi ít ngủ
mình cho bạn chương trình mình dùng 8051 giao tiếp ps2 tay đồ chơi điện tử playstation 2. có hiện thị lcd nhé. cố nghiên cứu ,
chúc vui
Code:
;-------------------------------------------------
	ORG	0000h
;-------------------------------------------------
BUTTON1		EQU	P3.6
BUTTON2		EQU	P3.7
DC2_NGUOC	BIT	P2.7

DC3_THUAN	BIT	P0.1
DC3_NGUOC	BIT	P0.2

DC4_THUAN	BIT	P0.3
DC4_NGUOC	BIT	P2.3

DC_BANH1_CHIEU	BIT	P0.0
DC_BANH1_VOLT	BIT	P0.7
DC_BANH1_CHAY	BIT	P0.6

DC_BANH2_CHIEU	BIT	P2.4
DC_BANH2_VOLT	BIT	P2.5
DC_BANH2_CHAY	BIT	P2.6

DC1_THUAN	BIT	P2.2
DC1_NGUOC	BIT	P2.1

DC2_THUAN	BIT	P2.0

;-------------------------------------------------
LCDDATA		EQU	P1
LCDD7		BIT	P1.7

LCDRS		BIT	P1.0
LCDRW		BIT	P1.1
LCDE		BIT	P1.2
;-------------------------------------------------
PsCom		BIT	P3.4
PsData		BIT	P3.5
PsClk		BIT	P3.2
PsATT		BIT	P3.3
fReady		BIT	01h
fAnalog		BIT	02h
;-------------------------------------------------
TEMP		EQU	30h
TEMP1		EQU	31h
;-------------------------------------------------
PsxStatus	EQU	32h
PsxVer		EQU	33h
PsxLX		EQU	34h
PsxLY		EQU	35h
PsxRX		EQU	36h
PsxRY		EQU	37h
PsxBt1		EQU	28h
PsxBt2		EQU	29h
;-------------------------------------------------
TRAI_TREN	BIT	PsxBt2.2
TRAI_DUOI	BIT	PsxBt2.0

PHAI_TREN	BIT	PsxBt2.3
PHAI_DUOI	BIT	PsxBt2.1

SANG_TRAI	BIT	PsxBt1.7
SANG_PHAI	BIT	PsxBt1.5
LEN_TREN	BIT	PsxBt1.4
XUONG_DUOI	BIT	PsxBt1.6

VUONG		BIT	PsxBt2.7
TRON		BIT	PsxBt2.5
TAM_GIAC	BIT	PsxBt2.4
GACH_CHEO	BIT	PsxBt2.6

SELECT		BIT	PsxBt1.0
START		BIT	PsxBt1.3

JOY1		BIT	PsxBt1.1
JOY2		BIT	PsxBt1.2
;-------------------------------------------------
WDTRST		EQU	0A6h
WDTPRG		EQU	0A7h
;-------------------------------------------------
	ORG	000h
	LJMP	MAIN

	ORG	100H
;-------------------------------------------------

;==================================================
MAIN:
	ORL	WDTPRG,#06		; WATCHDOG 1s o THACH ANH 11.0592MHz
	CALL	INITLCD
	CALL	MESSAGE
	CALL	CLRSCR
LOOP_PSX:
	CALL	Psx_Process
	CALL	HIENTHI
	CALL	DKRELAY
	CALL	DELAY
	SJMP	LOOP_PSX
	SJMP	$
;==================================================

;-------------------------------------------------
DKRELAY:
	CALL	CLRWDT

; ----- DIEU KHIEN ANALOG PHAI ------

	MOV	A,PsxRY
	ADD	A,#255		; SO SANH A VOI 00
	JC	NEXT_R1		; NEU A>0 THI KIEM TRA TIEP
	CLR	DC_BANH2_CHAY	; NEU A=0 THI CHO DONG CO PHAI CHAY TIEN O 24V
	SETB	DC_BANH2_CHIEU
	CLR	DC_BANH2_VOLT
	SJMP	EXIT_R
NEXT_R1:
	MOV	A,PsxRY
	ADD	A,#205		; SO SANH A VOI 50
	JC	NEXT_R2		; NEU A>50 THI KIEM TRA TIEP
	CLR	DC_BANH2_CHAY	; NEU A<=50 THI CHO DONG CO PHAI CHAY TIEN O 12V
	SETB	DC_BANH2_CHIEU
	SETB	DC_BANH2_VOLT
	SJMP	EXIT_R
NEXT_R2:
	MOV	A,PsxRY
	ADD	A,#55		; SO SANH A VOI 200
	JC	NEXT_R3		; NEU A>200 THI KIEM TRA TIEP
	SETB	DC_BANH2_CHAY	; NEU A<=200 THI CHO DONG CO PHAI DUNG
	SETB	DC_BANH2_CHIEU
	SETB	DC_BANH2_VOLT
	SJMP	EXIT_R
NEXT_R3:
	MOV	A,PsxRY
	ADD	A,#01		; SO SANH A VOI 255
	JC	NEXT_R4		; NEU A=255 THI CHO DONG CO PHAI LUI O 24V
	CLR	DC_BANH2_CHAY	; NEU A<255 THI CHO DONG CO PHAI LUI O 12V
	CLR	DC_BANH2_CHIEU
	SETB	DC_BANH2_VOLT
	SJMP	EXIT_R
NEXT_R4:
	CLR	DC_BANH2_CHAY	; CHO DONG CO PHAI LUI O 24V
	CLR	DC_BANH2_CHIEU
	CLR	DC_BANH2_VOLT	
EXIT_R:

; ----- KIEM TRA CHE DO CHAY THANG  ------
	
	JB	PHAI_TREN,KOTHANG
	MOV	PsxLY,PsxRY
KOTHANG:


; ----- DIEU KHIEN ANALOG TRAI ------

	MOV	A,PsxLY
	ADD	A,#255		; SO SANH A VOI 00
	JC	NEXT_L1		; NEU A>0 THI KIEM TRA TIEP
	CLR	DC_BANH1_CHAY	; NEU A=0 THI CHO DONG CO TRAI CHAY TIEN O 24V
	SETB	DC_BANH1_CHIEU
	CLR	DC_BANH1_VOLT
	SJMP	EXIT_L
NEXT_L1:
	MOV	A,PsxLY
	ADD	A,#205		; SO SANH A VOI 50
	JC	NEXT_L2		; NEU A>50 THI KIEM TRA TIEP
	CLR	DC_BANH1_CHAY	; NEU A<=50 THI CHO DONG CO TRAI CHAY TIEN O 12V
	SETB	DC_BANH1_CHIEU
	SETB	DC_BANH1_VOLT
	SJMP	EXIT_L
NEXT_L2:
	MOV	A,PsxLY
	ADD	A,#55		; SO SANH A VOI 200
	JC	NEXT_L3		; NEU A>200 THI KIEM TRA TIEP
	SETB	DC_BANH1_CHAY	; NEU A<=200 THI CHO DONG CO TRAI DUNG
	SETB	DC_BANH1_CHIEU
	SETB	DC_BANH1_VOLT
	SJMP	EXIT_L
NEXT_L3:
	MOV	A,PsxLY
	ADD	A,#01		; SO SANH A VOI 255
	JC	NEXT_L4		; NEU A=255 THI CHO DONG CO TRAI LUI O 24V
	CLR	DC_BANH1_CHAY	; NEU A<255 THI CHO DONG CO TRAI LUI O 12V
	CLR	DC_BANH1_CHIEU
	SETB	DC_BANH1_VOLT
	SJMP	EXIT_L
NEXT_L4:
	CLR	DC_BANH1_CHAY	; CHO DONG CO TRAI LUI O 24V
	CLR	DC_BANH1_CHIEU
	CLR	DC_BANH1_VOLT	
EXIT_L:






; ----- DIEU KHIEN KHOI PHIM BAM ------

	MOV	C,TRAI_TREN
	MOV	DC1_THUAN,C
	MOV	C,TRAI_DUOI
	MOV	DC1_NGUOC,C

	MOV	C,LEN_TREN
	MOV	DC2_THUAN,C
	MOV	C,XUONG_DUOI
	MOV	DC2_NGUOC,C

	
	MOV	C,VUONG
	MOV	DC3_THUAN,C
	MOV	C,TRON
	MOV	DC3_NGUOC,C


	MOV	C,TAM_GIAC
	MOV	DC4_THUAN,C
	MOV	C,GACH_CHEO
	MOV	DC4_NGUOC,C

	JB	START,EXIT_RL
	SJMP	$
EXIT_RL:
RET

;-------------------------------------------------
HIENTHI:

	CALL	CLRWDT
	CALL	CLRSCR

	MOV	A,PsxLX
	CALL	PUTS_A
	MOV	A,#'-'
	CALL	DATAWRT

	MOV	A,PsxLY
	CALL	PUTS_A
	MOV	A,#'-'
	CALL	DATAWRT

	MOV	A,PsxRX
	CALL	PUTS_A	
	MOV	A,#'-'
	CALL	DATAWRT

	MOV	A,PsxRY
	CALL	PUTS_A

	CALL	ENTER

	MOV	A,PsxStatus
	CALL	PUTS_A
	MOV	A,#'-'
	CALL	DATAWRT

	MOV	A,PsxVer
	CALL	PUTS_A
	MOV	A,#'-'
	CALL	DATAWRT

	MOV	A,PsxBT1
	CALL	PUTS_A
	MOV	A,#'-'
	CALL	DATAWRT

	MOV	A,PsxBT2
	CALL	PUTS_A	

RET



;>>>>>>-------------------------------------------------
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Nhom cac ham xu ly PSX
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Psx_Process:

	CALL	CLRWDT
	SETB fReady
	SETB fAnalog

	SETB PsCom
	SETB PsClk
	CLR PsATT				; Dua ATT xuong
	MOV A,#01h
	CALL Ps_Access

	MOV A,#42h
	CALL Ps_Access
	MOV PsxVer,B				; Expect to read 41h or 73h
	MOV R2,B
	CJNE R2,#73h,NoEqual01_PP
	JMP Cont01_PP				; Analog mode on
 NoEqual01_PP:
	CLR fAnalog
	MOV PsxLX,#128
	MOV PsxLY,#128
	MOV PsxRX,#128
	MOV PsxRY,#128
 Cont01_PP:
	MOV A,#0h
	CALL Ps_Access
	MOV PsxStatus,B
	MOV R2,B
	CJNE R2,#5Ah,NoEqual02_PP
	JMP Cont02_PP				; Neu Joystic chua ready thi CLR fReady va thoat
 NoEqual02_PP:
	CLR fReady
	RET
 Cont02_PP:
	MOV A,#0h				; SLCT JOYR JOYL STRT UP   RGHT DOWN LEFT
	CALL Ps_Access
	MOV PsxBt1,B

	MOV A,#0h				; L2   R2   L1   R1   /\   O    X    |_|
	CALL Ps_Access
	MOV PsxBt2,B
						; Neu khong o analog mode thi khong doc ve nua
	JNB fAnalog,EndRead_PP
	
	MOV A,#0h				; Right Joy 0x00 = Left  0xFF = Right
	CALL Ps_Access
	MOV PsxRX,B

	MOV A,#0h				; Right Joy 0x00 = Up    0xFF = Down
	CALL Ps_Access
	MOV PsxRY,B

	MOV A,#0h				; Left Joy  0x00 = Left  0xFF = Right
	CALL Ps_Access
	MOV PsxLX,B

	MOV A,#0h				; Left Joy  0x00 = Up  0xFF = Down
	CALL Ps_Access
	MOV PsxLY,B
 EndRead_PP:	
	SETB PsATT
RET

;>>>>>>-------------------------------------------------
; Transmit data store in A and record PSX data and store it in B
Ps_Access:
	MOV R2,#8
Loop_PA:
	RRC A
	MOV PsCom,C
	CALL CLK_Low
	XCH A,B
	MOV C,PsData
	RRC A
	XCH A,B
	CALL CLK_High
	DJNZ R2,Loop_PA
	MOV R2,#50
	DJNZ R2,$
RET
;>>>>>>-------------------------------------------------
CLK_Low:
	CLR PsCLK			; Dua xung xuong
	JB  PsCLK,$			; Doi xung xuong han
RET
;>>>>>>-------------------------------------------------
CLK_High:
	SETB PsCLK			; Dua xung len
	JNB  PsCLK,$			; Doi xung len han
RET

;-------------------------------------------------
MESSAGE:
	CALL	CLRSCR
	CALL	DELAY1S
	MOV	DPTR,#TEXT1
	CALL	DISPLAY
	CALL	ENTER
	MOV	DPTR,#TEXT2
	CALL	DISPLAY
	CALL	DELAY1S
	SJMP	MESSAGE
	JB	P3.6,NOCOPYRIGHT
	CALL	CLRSCR
	MOV	DPTR,#TEXT3
	CALL	DISPLAY
	CALL	ENTER
	MOV	DPTR,#TEXT4
	CALL	DISPLAY

WAIT:
	CALL	CLRWDT
;	JNB	P3.6,WAIT
	CALL	DELAY1S
	CALL	DELAY1S
	CALL	DELAY1S
	CALL	DELAY1S
	CALL	DELAY1S
	CALL	DELAY1S
NOCOPYRIGHT:
RET
;-------------------------------------------------
INITLCD:
	CALL	CLRWDT
	MOV	A,#00000010B
	CALL	COMNWRT
	MOV	A,#00101000B
	CALL	COMNWRT
	MOV	A,#00001100B
	ACALL	COMNWRT
RET
;-------------------------------------------------
DISPLAY:
	CALL	CLRWDT
 LOOP:
	ACALL	DELAY
	CLR	A
	MOVC	A,@A+DPTR
	JZ	EXIT
	ACALL	DATAWRT
	INC	DPTR
	SJMP LOOP
 EXIT:
 	RET
;-------------------------------------------------
COMNWRT:
	MOV	TEMP,A		;00000010B
	ANL	A,#11110000B
	MOV	LCDDATA,A
	SETB	LCDE
	NOP
	CLR	LCDE
	MOV	A,TEMP
	SWAP	A
	ANL	A,#11110000B
	MOV	LCDDATA,A
	SETB	LCDE
	NOP
	CLR	LCDE
	LCALL	DELAY50
	RET
;-------------------------------------------------
DATAWRT:
	MOV	TEMP,A
	ANL	A,#11110000B
	SETB	ACC.0
	MOV	LCDDATA,A
	SETB	LCDE
	NOP
	CLR	LCDE

	MOV	A,TEMP
	SWAP	A
	ANL	A,#11110000B
	SETB	ACC.0
	MOV	LCDDATA,A
	SETB	LCDE
	NOP
	CLR	LCDE
	LCALL	DELAY50
	RET
;-------------------------------------------------
PUTSTRING:
	CALL	CLRWDT
 LOOP_PS:
	CLR	A
	MOVC	A,@A+DPTR
	JZ	EXIT_PS
	ACALL	DATAWRT
	INC	DPTR
	SJMP LOOP_PS
 EXIT_PS:
RET
;-------------------------------------------------
ENTER:
	MOV	A,#0C0h
	CALL	COMNWRT
	RET
;-------------------------------------------------
POINTER_BACK:
	PUSH	ACC
	MOV	A,#0C0h
	CALL	COMNWRT
	POP	ACC
RET
;-------------------------------------------------
CLRSCR:
	PUSH	ACC
	MOV	A,#01h
	CALL	COMNWRT
	MOV	B,#6
	CALL	DELAYB
	POP	ACC
RET
;-------------------------------------------------
BACK_SPACE:

RET
;-------------------------------------------------
PUTS_A:
	PUSH	0
	PUSH	1
	PUSH	ACC
	MOV	R0,#3
	MOV	R1,#TEMP1
LOOP_A:
	MOV	B,#10
	DIV	AB
	PUSH	ACC
	MOV	A,#30h
	ADD	A,B
	MOV	@R1,A
	INC	R1
	POP	ACC
	DJNZ	R0,LOOP_A

	MOV	R0,#3
LOOP_B:
	DEC	R1
	MOV	A,@R1
	ACALL	DATAWRT
	DJNZ	R0,LOOP_B
	POP	ACC
	POP	1
	POP	0
RET
;-------------------------------------------------
CLRWDT:
	MOV	WDTRST,#01Eh
	MOV	WDTRST,#0E1h
RET

;-------------------------------------------------
DELAY:
	MOV	R3,#50
D1:	MOV	R4,#250
	DJNZ	R4,$
	DJNZ	R3,D1
	RET
DELAY50:
	PUSH	4
	MOV	R4,#50
	DJNZ	R4,$
	POP	4
	RET
DELAYB:
	PUSH	4

DLB:	MOV	R4,#255
	DJNZ	R4,$
	DJNZ	B,DLB
	POP	4
	RET

DELAY1S:
	CALL	CLRWDT
	MOV	R5,#4
D2:	MOV	R3,#250
D3:	MOV	R4,#250
	DJNZ	R4,$
	DJNZ	R3,D3
	DJNZ	R5,D2
RET
DELAYuS:
	MOV	R3,#50
	DJNZ	R3,$
RET

;-------------------------------------------------

TEXT1:
	DB	"-d7KQ#1-VO DICH-",0
TEXT2:
	DB	"--ROBOCON 2007--",0
TEXT3:
	DB	"   VO DICH   ",0
TEXT4:
	DB	"     ",0
;--------------------------------------------------
END

thay đổi nội dung bởi: namqn, 24-12-2006 lúc 08:40 PM.
pham_dinh_hung83 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-12-2006, 01:59 PM   #5
enti
Đệ tử 2 túi
 
Tham gia ngày: Nov 2006
Bài gửi: 26
:
Chào bạn pham_dinh_hung83, bài toán ở trên là giao tiếp PIC với PS/2 keyboard của PC chứ không phải playstation2 của Sony, nên keybaord phải nhận lênh của PIC để đáp ứng lại lệnh này. Mình đã làm rồi, nếu có gì thì PM.
enti vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-03-2007, 07:15 PM   #6
giangcs
Nhập môn đệ tử
 
Tham gia ngày: Feb 2007
Bài gửi: 3
:
Trích:
Nguyên văn bởi enti View Post
Chào bạn pham_dinh_hung83, bài toán ở trên là giao tiếp PIC với PS/2 keyboard của PC chứ không phải playstation2 của Sony, nên keybaord phải nhận lênh của PIC để đáp ứng lại lệnh này. Mình đã làm rồi, nếu có gì thì PM.
bạn có thể post code và sơ đồ nguyên lí để mọi người tham khảo không.
giangcs vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-05-2009, 06:27 AM   #7
khangspkt
Đệ tử 1 túi
 
Tham gia ngày: Aug 2006
Bài gửi: 14
:
Liên quan ghép nối/debug

Mình có gặp 1 rắc rối nhỏ với giao tiếp với vidieukhien. Khi kết nối data và clk với vidieukhien, để tạo trạng thái idle, treo 2 con điện trở 10k từ 2 chân này lên nguồn. Sau đó nhấn bàn phím PC, thấy ko có gì gọi là hoạt động. Mình có do thử 2 chân CLK và Data, tần số đo được là 100 Mhz. Theo mình biết thì tần số keyboard sử dụng ~ 30 Khz thôi

Anh em nào có làm rồi, chỉ mình cách kiểm tra nhé.

Mình làm trên 8051 theo project này
http://www.mytutorialcafe.com/Microc...yboard%202.htm

và làm cho pic theo link project này:
http://electronic-engineering.ch/mic...l#how_it_works

Mình đang cần gấp, nhưng gặp sự cố này ko biết giải quyết sao, nhờ anh em hỗ trợ
khangspkt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-06-2009, 01:04 AM   #8
robotden
Đệ tử 5 túi
 
robotden's Avatar
 
Tham gia ngày: May 2007
Bài gửi: 102
:
có ai làm thành công với pic chưa, hướng dẫn bà con đi
thank
robotden vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-07-2009, 01:08 PM   #9
vanhoan1
Nhập môn đệ tử
 
Tham gia ngày: Jun 2009
Bài gửi: 2
:
Smile day cost giao tiep ban phin hien thi lcd

Code:
// *****GIAO TIEP BAN PHIM VOI LCD***
// RS,RW,E POTRE
// LCD PORT B
// KEYPAD PORT D
//*************************************
#include "16F877A.h"
#include <DEFS_16f877a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#byte portD=0x08
#byte portB=0x06
#byte portE=0x09
#define LCD portb
#define rs re0
#define rw re1
#define e re2
const unsigned char line[]= {'M','O','I',' ','N','H','A','P',' ','S','O',' ',':','#'};
INT8 b=0;
void lenh(void)
{output_low(pin_e0) ;
output_low(pin_e1);
output_high(pin_e2);
output_low(pin_e2);
delay_ms(6);}
void du_lieu(void)
{
output_high(pin_e0);
output_low(pin_e1);
output_high(pin_e2);
output_low(pin_e2);
delay_ms(6);}
void goi()
{b=0;
while(line[b]!='#')
     {
         output_b(line[b]);
         du_lieu();
         delay_ms(100);
         b++;
      }
}
void main()
{  set_tris_e(0);output_e(0);
   set_tris_b(0);output_b(0);
   OUTPUT_B(0X38);
   lenh();
   portb=0x0E;
   lenh(); 
   output_b(0x82);
   lenh();
   delay_ms(1);
   goi();  
   delay_ms(1);
   portb=0xc0;
   lenh();
   delay_ms(100);
   output_D(0b11111111);
   delay_ms(10);
   while(true)
   {
//====================================output_D(11111110)============//
      output_D(0b11111110);
      DELAY_MS(10);

         if( input(pin_D4)==0 )   
         {
         portb=0x37;      //ghi 7
         du_lieu();
         DELAY_MS(150);   
         }

         if( input(PIN_D5)==0 )    //cho khi D5 xuong 0
         {
         portb=0x38;      //ghi 8
         du_lieu();
         DELAY_MS(150);
         }

         if( input(PIN_D6)==0 )   //cho khi D6 xuong 0
         {
         portb=0x39;      //ghi 9
         du_lieu();
         DELAY_MS(150);
         }

         if( input(PIN_D7)==0 )    //cho khi D7 xuong 0
         {
         portb='A';      // ghi a
         du_lieu();
         DELAY_MS(150);
         }
//====================================output_D(11111101)=============//
         output_D(0b11111101);
         DELAY_MS(10);
         if( input(PIN_D4)==0 )   //cho khi D4 xuong 0
         {
         portb=0x34;      //ghi 4
         du_lieu();
         DELAY_MS(150);
         }
         if( input(PIN_D5)==0 )    //cho khi D5 xuong 0
         {
         portb=0x35;      //ghi 5
         du_lieu();
         DELAY_MS(150);
         }
         if( input(PIN_D6)==0 )    //cho khi D6 xuong 0
         {
         portb=0x36;      //ghi 6
         du_lieu();
         DELAY_MS(150);
         }
         if( input(PIN_D7)==0 )   //cho khi D7 xuong 0
         {
         portb='B';      //ghi b
         du_lieu();
         DELAY_MS(150);
         }
//======================output_D(11111011)==========================//
         output_D(0b11111011);
         DELAY_MS(10);
        if( input(PIN_D4)==0 )   //cho khi D4 xuong 0
         {
         portb=0x31;      //ghi 1
         du_lieu();
         DELAY_MS(150);
         }
         if( input(PIN_D5)==0 )    //cho khi D5 xuong 0
         {
         portb=0x32;      //ghi 2
         du_lieu();
         DELAY_MS(150);
         }
         if( input(PIN_D6)==0 )    //cho khi D6 xuong 0
         {
         portb=0x33;      //ghi 3
         du_lieu();
         DELAY_MS(150);
         }
         if( input(PIN_D7)==0 )   //cho khi D7 xuong 0
         {
         portb='C';      //ghi c
         du_lieu();
         DELAY_MS(150);
         }
//*******************************
         output_D(0b11110111);
         DELAY_MS(10);
         if( input(PIN_D4)==0 )   //cho khi D4 xuong 0
         {
         portb='*';      //ghi *
         du_lieu();
         DELAY_MS(150);
         }
         if( input(PIN_D5)==0 )    //cho khi D5 xuong 0
         {
         portb=0x30;      //ghi 0
         du_lieu();
         DELAY_MS(150);
         }
         if( input(PIN_D6)==0 )    //cho khi D6 xuong 0
         {
         portb=0X01;      //CLEAR
         LENH();
         portb=0x82;
         lenh();
         delay_ms(1);
         goi();
         delay_ms(1);
         portb=0xcf;
         lenh();
         portb=0x04;
         lenh();
         }                       
         if( input(PIN_D7)==0 )   //cho khi D7 xuong 0  
         {portb='D';      //ghi d
           du_lieu();   
           DELAY_MS(150);
         }
   }
}

thay đổi nội dung bởi: namqn, 27-07-2009 lúc 02:46 PM. Lý do: định dạng code
vanhoan1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-07-2009, 02:47 PM   #10
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Bạn vanhoan1 nên post thêm sơ đồ nguyên lý của mạch ứng dụng.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-09-2009, 11:53 PM   #11
khangspkt
Đệ tử 1 túi
 
Tham gia ngày: Aug 2006
Bài gửi: 14
:
Nhan du lieu tu ban phím chuẩn PS/2

Chào các bạn, mình đã viết được chương trình nhận dữ liệu từ bàn phím phát dữ liệu theo chuẩn ps/2.
Tài liệu tham khảo các bạn tham khảo theo link mình cung cấp bên trên.
Chương trình này mình sử dụng để đọc dữ liệu từ đầu đọc barcode (đọc mã vạch). Chương trình hoạt động rất tốt và không có vấn đề gì. Xin được chia sẽ cùng các bạn

Trích:
;5 goi chuong trinh detect ky tu tu barcode reader
doc_barcode
clrf datareg
btfsc kclock
goto $-1
call getdata
btfss STATUS,C
goto doc_barcode ; re-get
bcf STATUS,C
return

getdata
call getscancode
;kiemtra w # F0
sublw h'F0'
btfss STATUS,Z
goto clear_c ;khong bang=>khong nhan capslock
btfsc kclock ;bang=> co nhan capslock
goto $-1
call getscancode
bsf STATUS,C
return
clear_c
bcf STATUS,C
return
getscancode ;in:from keyboard;out:w;lay du lieu noi tiep tu ps2keyboard, luu vao w
btfss kclock
goto $-1
movlw h'08'
movwf check8bit
getscancode2
btfsc kclock
goto $-1
btfsc kdata
btfss kdata
goto data_clear
goto data_set
xoaydatareg
rrf datareg
btfss kclock
goto $-1
decf check8bit
movf check8bit,w
sublw h'00'
btfss STATUS,Z
goto getscancode2 ;khongbang
btfsc kclock ;bang
goto $-1
btfss kclock
goto $-1
btfsc kclock
goto $-1
btfss kclock
goto $-1
movf datareg,w
return
convert_data2ascii
call KBDtable ; chuyen gia tri lay duoc tu ban phim bang cach tra bang, in:W, out:W
return
data_set
bsf STATUS,C
goto xoaydatareg
data_clear
bcf STATUS,C
goto xoaydatareg
Vài lưu ý khi sử dụng chương trình con này.
1. bạn khởi tạo kclock và kdata là 2 ngõ vào
2. 2 đường clock và data này phải được treo lên nguồn để giữ mức cao tạo trạng thái ilde
3. thanhghi datareg phải được khai báo từ đầu, sử dụng để lưu giá trị 8 bit dữ liệu của bàn phím gửi lên. Sau khi goji chương trình con này, bạn lấy dữ liệu từ thanh ghi này xử lý cho mục đích của bạn
4. bảng data của các phím được đính kèm theo file trong bài này. các bạn tải về sử dụng để chuyển đổi lần cuối ra ký tự ascii (phục vụ chương trình convert_data2ascii
lệnh call KBDtable ở trên.
5. có thắc mắc gì liên quan đến dữ liệu bàn phím này, bạn vui lòng gửi mail cho mình để mình có thể giúp bạn nhanh nhất.
Rất vui cùng chia sẻ dữ liệu cho cộng đồng pic.
File Kèm Theo
File Type: txt KDBtable.asm.txt (1.8 KB, 53 lần tải)
khangspkt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-09-2009, 12:03 PM   #12
LEO-XBS
Đệ tử 1 túi
 
LEO-XBS's Avatar
 
Tham gia ngày: Oct 2005
Bài gửi: 21
:
minh muon mua mot bo giao tiep ban phim may tinh voi con pic de thuc hien qua trinh khi an phim thi pic se cho ra mot day 5 xung, moi xung khoang 10ms. ban nao co the che tao hay dang co ma khong dung nua thi ban cho minh
__________________
=============================
________ Leo XBS _________
E-mail:leo_xbs1408@yahoo.com
"Đi một ngày đàng học một sàng khôn"
LEO-XBS vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-09-2009, 12:02 AM   #13
noridomoto
Nhập môn đệ tử
 
Tham gia ngày: Sep 2009
Bài gửi: 2
:
bạn vanhoan1 có sơ đồ nguyên lý không ? mới nhập môn PIC cách đây 1 tuần, nên nhìn code cũng chưa đoán ra đc cái mạch kết nối như thế nào cả.
Thân
noridomoto vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-09-2009, 05:23 PM   #14
madcow
Nhập môn đệ tử
 
Tham gia ngày: Sep 2008
Bài gửi: 5
:
Tham khảo http://www.nerdkits.com/videos/inter..._ps2_keyboard/ có nói về interupting keyboard input
madcow vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 02:41 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam