View Single Post
Old 12-06-2007, 12:53 PM   #1
phamthanhkhuyen
Đệ tử 1 túi
 
Tham gia ngày: Nov 2006
Bài gửi: 25
:
KEYPAD nhờ giúp đở....

dưới đây là trích trong Tutorial 9.1 - Nigel Goodwin 2003
tôi ghi chú lại nhưng tôi thấy trong đoạn Chk_Keys ở dòng lệnh thứ 6 hình như viết sai thì phải mong các bạn chỉ giúp

Code:
;KEYPAD16
;trich trong Tutorial 9.1 - Nigel Goodwin 2003
;Keypad reading with LCD display
;chu thich lai boi PHAM THANH KHUYEN
;ngay 11/06/2207
		LIST	p=16F628A			;tell assembler what chip we are using
		include "P16F628A.inc"		;include the deFaults For the chip
		ERRORLEVEL	0,	-302		;suppress bank selection messages
		__conFig 0x3D18				;sets the conFiguration settings (oscillator type etc.)
;...................................................................
		cblock	0x20				;start oF general purpose registers
;cac bien cua Delay
count1			;used in delay routine
counta			;used in delay routine
countb			;used in delay routine

;cac bien cua Keypad

key
rows
	
		endc
;.................................................................
KEY_PORT	Equ	PORTB			;keypad port
KEY_TRIS		Equ	TRISB
Col1		Equ	0			;pins used For keypad inputs
Col2		Equ	1
Col3		Equ	2
Col4		Equ	3
;.....................................................................
;GHI CHU : sau khi thuc hien xong doan chuong trinh Chk_Keys
;ta duoc gia tri cua phim nhan nam o trong W va trong bien Key
;Keypad subroutine

Chk_Keys			movlw	0x00			;wait until no key pressed (doi cho den khi  khong co phim nhan)
			movwF	KEY_PORT		;set all output pins low	out out out out in in in in = 0000 xxxx
			movF	KEY_PORT,	W	;read port B
			andlw	0x0F			;mask oFF high byte	(che 4 bit cua byte cao)
			sublw	0x0F

		; ??????????????????????????????????????
			btFsc	STATUS, Z		;test iF any key pressed
		;thay bang	BTFSS	STATUS,Z	     ????

			goto	Keys			;iF none, read keys	
			call	Delay20			;
			goto	Chk_Keys		;else try again
;Cac chan cua port Keypad
;			out	out	out	out	in	in	in	in	
;			col1	col2	col3	col4	row1	row2	row3	row4
;			RB7	RB6	RB5	RB4	RB3	RB2	RB1	RB0

Keys	  		call    Scan_Keys
            			movlw   .16			;check For no key pressed	16
            			subwF   key, w		;neu Key=.16 co nghia la khong co phim nao nhan
           			btFss   STATUS, Z
           			 goto    Key_Found		;Key <>.16
			call	Delay20
			goto	Keys
Key_Found  	 	movF    key, w
			andlw	0x0F
			call	Key_Table		;lookup key in table	
			movwF	key		;save back in key
			return			;key pressed now in W
;.................................................................
Scan_Keys  		clrF    key
			movlw	0xF0		;set all output lines high
           			movwF   KEY_PORT		;11110000
           			movlw   .4			;
           			movwF   rows		;set number oF rows
           			bcF     STATUS, C		;put a 0 into carry

Scan	rrF     KEY_PORT, F				;0111xxxx	1011xxxx	1101xxxx	1110xxxx
           	bsF     STATUS, C		;Follow the zero with ones		
;comment out next two lines For 4x3 numeric keypad.			
           	btFss   KEY_PORT, Col4       ;Col4 equ 3	cccc1xxx
           	goto    Press		;	             cccc0xxx	
           	incF    key, F		;		
           	btFss   KEY_PORT, Col3	;Col3 equ 2	ccccx1xx	
           	goto    Press		;	             ccccx0xx	
           	incF    key, F		;		
           	btFss   KEY_PORT, Col2	;Col2 equ 1	ccccxx1x
           	goto    Press		;	             ccccxx0x
           	incF    key, F		;
           	btFss   KEY_PORT, Col1	;Col1 equ 0           ccccxxx1
          	goto    Press		;	              ccccxxx0
           	incF    key, F		;
           	decFsz  rows, F		;
           	goto    Scan		;
Press	  	return
;khi ket thuc Scan_Keys ta duov 1 gia tri cua Key
;end oF keypad subroutines.
;....................................................................
Key_Table  	ADDWF   PCL,F
            	RETLW   0x43	;C		col1	col2	col3	col4
            	RETLW   0x42	;B	row4	C	D	E	F				
            	RETLW   0x30	;0	row3	B	9	6	3		
            	RETLW   0x41	;A	row2	0	8	5	2		
            	RETLW   0x44	;D	row1	A	7	4	1
            	RETLW   0x39	;9
            	RETLW   0x38	;8
            	RETLW   0x37	;7
            	RETLW   0x45	;E
            	RETLW   0x36	;6
            	RETLW   0x35	;5
            	RETLW   0x34	;4
            	RETLW   0x46	;F
            	RETLW   0x33	;3
            	RETLW   0x32	;2
            	RETLW   0x31	;1
;....................................................................
;DEYLAY

Delay255	movlw	0xFF			;delay 255 mS
			goto	d0
Delay100	movlw	d'100'			;delay 100mS
			goto	d0
Delay50		movlw	d'50'			;delay 50mS
			goto	d0
Delay20		movlw	d'20'			;delay 20mS
			goto	d0
Delay5		movlw	0x05			;delay 5.000 ms (4 MHz clock)
d0			movwF	count1
d1			movlw	0xC7			;delay 1mS
			movwF	counta
			movlw	0x01
			movwF	countb
Delay_0
			decFsz	counta, F
			goto	$+2
			decFsz	countb, F
			goto	Delay_0

			decFsz	count1	,F
			goto	d1
			retlw	0x00
			end
phamthanhkhuyen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn