please dont rip this site

PIC Microcontroler based Keyboards

7 switches with 1 A/D pin

by Bob Axtell of
http://www.platinumtechnical.com

;********************************************************;
; Code snippet for reading 7 switches on a single PIN
; Routine assumes that ADCON0 and ADCON1 are set to
; appropriate values for the PIC used.
; The routine tests 8bit ADC value against the voltage
; level presented. If it is LOWER than the test then
; that switch is grounded. NOTE: This can be minimized
; further. NOTE: this should be executed during an
; interrupt to make sure that the snippet is not missed.
;********************************************************;
;process keyboard: inside ints only
keybd:
	clrf	status
	rrf	adresh,w
	movwf	tmp1_
	bank1
	rrf	adresl,w
	clrf	status
	movwf	tmp_
	rrf	tmp1_,f
	rrf	tmp_,f 		;now fixed to 8 bits, NOT 10 bits
	clrf	tmp1_ 		;used to locate switch number
	incf 	tmp1_,f		;=SW1
	movlw	-d'18'		; 0.0V + 0.7V/2 = 0.35V Test limit
	addwf	tmp_,w		;OK Pressed?
	btfss	status,c	;check if LESS
	goto	keybd0 		;jump if OK SW pressed
	incf	tmp1_,f
	movlw	-d'54' 		; 0.7V + 0.35V = 1.05V
	addwf	tmp_,w 		;DN Pressed?
	btfss	status,c 	;check if LESS
	goto	keybd0 		;jump if DN SW pressed
	incf	tmp1_,f
	movlw	-d'90' 		; 1.4v + 0.35V = 1.75V
	addwf	tmp_,w 		;<< Pressed?
	btfss	status,c 	;check if LESS
	goto	keybd0 		;jump if << SW pressed
	incf	tmp1_,f
	movlw	-d'125' 	; 2.1V + 0.35V = 2.45V
	addwf	tmp_,w 		;< pressed?
	btfss	status,c 	;check if LESS
	goto	keybd0 		;jump if < SW pressed
	incf 	tmp1_,f
	movlw 	-d'161' 	;2.8V + 0.35V = 3.15V
	addwf 	tmp_,w 		;> pressed?
	btfss 	status,c 	;check if LESS
	goto 	keybd0 		;jump if > SW pressed
	incf 	tmp1_,f
	movlw 	-d'197' 	;3.5V + 0.35V = 3.85V
	addwf 	AN0,w 		;>> pressed?
	btfss 	status,c 	;check if LESS
	goto 	keybd0 		;jump if >> SW pressed
	incf 	tmp1_,f
	movlw 	-d'233' 	;4.2V + 0.35V = 4.55V
	addwf 	AN0,w 		;UP pressed?
	btfsc 	status,c 	;check if LESS
; no switches are pressed, so done
	goto 	keybd1
; now process the switches
keybd0:
	incf 	tmp1_,w
	movwf 	KEY 		;value will read 1 to 7 for appropriate SW
	bsf 	flags,KYPRESS 	;tell system it is time to service keypress
keybd1:
	bsf 	adcon0,GO 	;read for next time
	return
;********************************************************;
; end of snippet
;********************************************************;
	

file: /Techref/microchip/sw7_on_1pin.htm, 2KB, , updated: 2012/1/31 22:21, local time: 2024/12/25 10:17,
TOP NEW HELP FIND: 
18.227.46.54:LOG IN

 ©2024 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions?
Please DO link to this page! Digg it! / MAKE!

<A HREF="http://linistepper.com/techref/microchip/sw7_on_1pin.htm"> PIC Microcontroler based Keyboards: 7 switches with 1 A/D pin by Bob Axtell</A>

After you find an appropriate page, you are invited to your to this massmind site! (posts will be visible only to you before review) Just type a nice message (short messages are blocked as spam) in the box and press the Post button. (HTML welcomed, but not the <A tag: Instead, use the link box to link to another page. A tutorial is available Members can login to post directly, become page editors, and be credited for their posts.


Link? Put it here: 
if you want a response, please enter your email address: 
Attn spammers: All posts are reviewed before being made visible to anyone other than the poster.
Did you find what you needed?