石原 博の覚書

電子工作に関する日々の覚書を記載します

FlashForthでSC1602をコントロール

2021-11-14 17:43:34 | 日記

良くあるSC1602をコントロールしてみる。後から調べると「ff5-tutorial-guide-2014-05-12.pdf」のp.41に、同様のものがあったがpic用。こちらはavr(arduino pro mini)なので、なにかの参考になるかと思う。

ソース記載のとおり4ビットパラレル。waitは適当。読み出しは行っていない。CGRAMへ書き込みも簡単に試してみた。

=========================
-lcd
marker -lcd

\ SC1602(HD44780)
\ portb0..3 -> DB4..7
\ portb4 -> R/W
\ portb5 -> RS
\ portc0 -> E

$24 constant ddrb
$25 constant portb
$27 constant ddrc
$28 constant portc

: b2n ( d7..d0 -- d3..d0 d7..d4 ) dup $0f and swap 4 rshift ;
: pbwr ( n -- )
    portb c! 1 ms 1 portc mset 1 portc mclr ; ( write portb, pulse portc1 )
: wrd ( n -- )  b2n $20 or pbwr $20 or pbwr ; ( write data $20 RS_HIGH )
: wrc ( n -- )  b2n pbwr pbwr ; ( write command $20 RS_LOW )
: clr ( -- )       $01 wrc ;
: home ( -- )      $02 wrc ;
: setddpos ( pos -- ) b2n $8 or pbwr pbwr ; 
: setcgpos ( pos -- ) b2n $4 or pbwr pbwr ; 
: setcg ( x0 x1 x2 x3 x4 x5 x6 n -- ) ( write CG RAM n=address x0..x6=pattern )
    3 lshift 7 for dup r@ + setcgpos swap wrd next drop ;

: init ( -- )
   $3f ddrb c! ( RS, R/W, DB7, DB6, DB5, DB4 )
   $01 ddrc c! ( E )

   $3 pbwr 5 ms
   $3 pbwr 1 ms
   $3 pbwr
   $2 pbwr
   $28 wrc ( DL=0 4bit  N=1 2line  F=0 5x10dot )
   $0c wrc ( Display ON/OFF )
           ( D=1 display on  C=0 block cursor off  B=0 blink off )
   clr     ( Clear Display )
   $06 wrc ( Entry Mode Set I/D=1 右シフト  S=0 表示シフトOFF )
;

: wrch ( c pos[0..31] -- )
    dup 32 < if
      dup 15 > if 48 + then setddpos wrd
    then ;

init
$00 $1f $11 $11 $11 $1f $00 0 setcg ( square )
$00 $04 $0a $11 $0a $04 $00 1 setcg ( rhombus )

0 0 wrch
1 1 wrch
$41 2 wrch
$42 3 wrch

 



最新の画像もっと見る

コメントを投稿