Sahara's WebLog

日記のような、備忘録のような、うらみつらみのような、自慢のような…。

PIC32MM0064GPL028 + HX1230 – 線や円を描く –

PIC32MM0064GPL028 + HX1230 – 文字の表示まで –」の続き。
PICの大御所のところでLCDに線を引くコードを見かけた記憶だけあった。
http://www.picfun.com/PIC24H/app24H01.html
当時は見てもチンプンカンプンだった気がするが、今日見てみたら何となくやってることが分かる。
ので、SG12864Aという液晶用のコードだがHX1230に移植する、というか参考にさせていただくことにした。

とりあえず線を引く。
2点間を通る直線上の点の座標を順に求めていけばいいので、ここは中学生レベルの問題だ。
結局のところ、96×64の範囲の平面上のある点を特定してそのドットを点灯させるか消灯させるか、ということに尽きる。
参考にしたのは下に絵で示した(上のリンク先から拝借)の赤線の部分。

縦に8つ並ぶビットのうちのどのビットが該当する点なのかを求める部分、その点の現在の様子との整合性を取る部分、の2点だ。
8で割った余り分だけシフトするというのはホウと思った。
あと、SG12864Aにはメモリを読み出す命令があるようだ。
一方で、HX1230では現在のメモリの様子を読みだせるかどうかわからない。
そこで、PIC上に仮想メモリを用意してそこにも液晶の点灯状態を記憶させることにした。

赤線が仮想メモリだ。
LCDのメモリへのアクセス方法はHX1230の方が単純なので、大先生のコードよりすっきりしている。
以上で、「あるドットを指定して点灯状態を変える。」という処理が出来るようになった。
あとは線だろうが円だろうが、数学の平面図形の知識で何でも描けることになる。

とても表へ出せるようなコードではないが、例えば円は下のようなコードで描くことが出来る。

円の方程式ってやつだ。
ラジアン忘れてた。
角度の部分が見づらいのは、値の変化を細かくし過ぎると重くなるし、粗いと円が破線になるしでちょっと設定を決めかねているからだ。

細かな部分の詰めは必要だが、ここまでの段階での全ての集大成がこれ。

円周上の点を決めること、2点間を結ぶ線を引くこと、の2つの処理を行っている。

PIC32MM0064GPL028 + HX1230 – 正方形の部分を90°回転させる –」もやってみた。
PIC32MM0064GPL028 関連記事一覧

このエントリーをはてなブックマークに追加

Posted under: PIC32MM0064GPL028, 液晶


コメントを残す

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload CAPTCHA.