PIC 21:REを使って文字DATAを入れる!


ロータリエンコーダを使って8文字のDATAを入れる!

 この実験は[PIC-17]の続きです。赤外線の受信部として作り始めたのですがどんどん脇の方の実験になってしまいました、でもこれって大事なので気が乗っている時にやっておきたいです。

 いつも同じ画面では飽きるので、Mode設定で画面に少し文字を追加できると便利です。そこでREとSWの組み合わせで文字DATAを入れることにしました。
 LCDにはあまりスペースは無いのですが、80Hから87Hまでの8文字に文字を入れる物です。取りあえずDATAの保存は考えず「文字の選択が出来れば!」と不十分ですが試しに作ってみました。

 実際に使うにはもう少し煮詰めなければなりませんが、文字が入れられるようになりましたので2/3程度出来たでしょうか。
 実用一歩手前という所でしょう(少し甘いかなー)!

 最後のM_KEY2の所で8文字のチエックをしてその後の処理をする予定だが、今の所「文字選択とLCD表示」だけ、他の処理はしていません。

2007/APR/16

REでの文字入力部分
;--------------------------------
MAIN_0
	movlw	'0'		;input start DATA
	movwf	TEMP2
	CALL	LCD_DATA
	movf	LCD_ADR,W		;Address back
	CALL	LCD_CMD
MAIN
	clrf	FLAG
	call	RE_CHECK		;Rotary encoder
	movf	FLAG,F		;flag check
	btfsc	STATUS,Z		;activ on RE ?
	goto	M_KEY		;not to again
	btfss	FLAG,0		;
	goto	MAIN_3
	decf	TEMP2,W		;be for character
	sublw	' '
	btfsc	STATUS,C
	movlw	0xff
	btfss	STATUS,C
	decf	TEMP2,W
	movwf	TEMP2
MAIN_2
	movf	TEMP2,W
	CALL	LCD_DATA		;LCD_SET
	movf	LCD_ADR,W		;Address back
	CALL	LCD_CMD
	goto	M_KEY
MAIN_3
	incfsz	TEMP2,F		;next character
	goto	MAIN_2
	movlw	' '
	movwf	TEMP2
	goto	MAIN_2
;--------------------------------
M_KEY
	call	KEY_SW		;check SW1
	btfss	K_FLAG,0		;bit0=SW1
	goto	MAIN		;not FLAG
	call	TIME05S
	bcf	K_FLAG,0		;FLAG clr
	incf	LCD_ADR,F
	movf	LCD_ADR,W		;Address
	CALL	LCD_CMD	
M_KEY2
	goto	MAIN_0
*文字は、LCDの80H-87Hの8文字をエリアとした。
*変数は、LCDのアドレス、文字(TEMP2)をLCDに出す。
*選択時、LCDに文字を書き込む時はバックさせ同じ所に文字を出させる。
*選択は、SWを押した時アドレスを+1して新規(文字はスペース" "から)に受付、1文字分移動する。KEY_SWは[PIC_18]のプログラムと同じ。
*文字は、点滅をさせた、カソールだけでは点滅しないので出ても良く分からない為。

*REの回転で文字が一つ進む(戻る)、0-1FHはパスさせた。他にもなにも無い所があるが面倒なので処理しない。
 回転させると点滅よりREでの選択の方が早く、文字を良く見ないと希望の文字が通り過ぎることがある。
 点滅は別のメカニズムでやっているようだ。

サブルーチン
*RE_CHECKはロータリエンコーダが作動したかのチエック用、右または左の回転がFLAGに入れられ戻る。
*LCD_DATAは画面に文字を出すプログラム。
*LCD_CMDはコマンド命令、ここでは主に一文字戻すのに使っている。
*TIME05Sは0.5秒の待ち時間 *KEY_SWはスイッチが作動したかのチエック用で、K_FLAGに入れて戻る。

[英数字の他、かな文字まで入れられる。]
[LCD]

[もどる]もどる  [MAIN MENU

inserted by FC2 system