; ------------------------------------------------------------------- ; dec をLCDに表示 ; 呼び出しアドレスにより、適当な桁から表示できま。 ; flag,0 を立てておくと、固定小数点(10倍)だとして表示します。 ; ------------------------------------------------------------------- print_dec5 movf dec+0,W call write_lcd_data print_dec4 movf dec+1,W call write_lcd_data print_dec3 movf dec+2,W call write_lcd_data print_dec2 movf dec+3,W call write_lcd_data ; 小数点表示 btfss flag,0 goto print_dec1 movlw '.' call write_lcd_data print_dec1 movf dec+4,W call write_lcd_data return ; ------------------------------------------------------------------- ; 液晶ライト ; IN W キャラクタ or コマンド ; 破壊 lcd_data_temp ; ------------------------------------------------------------------- write_lcd_data movwf lcd_data_temp swapf lcd_data_temp,W ; まず上位データを call write_lcd_raw ; 出力 movf lcd_data_temp,W ; 次に下位データを call write_lcd_raw ; 出力 movf lcd_data_temp,W ; 連続表示に備えて。 return ; ------------------------------------------------------------------- ; 液晶ライト(生) ; IN W キャラクタ or コマンド ; 破壊 W ; ------------------------------------------------------------------- write_lcd_raw ;bsf LED_COM ; LED コモン 消灯 (「ますく」で代用) andlw B'00001111' ; ますく iorlw B'00010000' ; ますく movwf PORTA ; RAポートへ出力 nop ; ちょこっとwait bsf E ; Eピンを'H' nop ; ちょこっとLOVE bcf E ; Eピンを'L' nop ; ぷっち以下略 movf ra_save,W ; RA の出力を元に戻す movwf PORTA movlw D'40' ; wait movwf calc_cn bcf LED_COM ; LED コモン 点灯 call wait_us return ; ------------------------------------------------------------------- ; 液晶初期化 ; ------------------------------------------------------------------- init_lcd movlw D'15' movwf calc_cn ; wait 15ms call wait_ms bcf RS ; RS='L' movlw B'00000011' call write_lcd_raw movlw D'5' movwf calc_cn ; wait 4.1ms call wait_ms movlw B'00000011' call write_lcd_raw movlw D'100' movwf calc_cn ; wait 100us call wait_us movlw B'00000000' call write_lcd_raw movlw B'00000010' call write_lcd_raw ; 0 0 0010 (4bit) movlw B'00101000' ; duty,font set9 call write_lcd_data movlw B'00000001' ; クリアコマンド call write_lcd_data movlw D'2' movwf calc_cn call wait_ms movlw B'00000110' ; entry mode set call write_lcd_data movlw B'00001100' ; display on,cursor off call write_lcd_data return