2015-03-22 21:33 | カテゴリ:PIC応用回路
デジタル式アナログ時計の実現方法を考えています。

16x16ドットという限られた表示スペースなので、かなり表現が難しくなると思い、まずは、アナログ時計の針のデザインを検討しました。

長針と短針でそれぞれ、回転させるとどの様に表現されるのか?
長針は、1分刻みで、動かしたいので、60通りのデザインになります。
さすがに短針は、そうは行かないので、1時間に2回動くようにしました。

MX01-1.jpg

MX01-2.jpg

要するに、プログラムでは、1秒をカウントして、1分になったら、分針を一つ進め、30分で、短針も1つ進める、という動きを繰り返せばよい訳です。

これを、たとえば、C#言語や、BASIC言語などの、IF分や、case分でプログラムしようとすると、60個のIF分が並んで分岐させることになります。

でも、アセンブラでは、便利な命令があって、レジスタの内容(値)をプログラムカウンターに加算する命令があるのです。
そうすると、秒のカウント値をそのときのプログラムカウンターに加算すれば、秒の値に応じて、分岐させることが出来ます。

MX01-5.jpg

これは、秒のカウントに応じて分岐するプログラムの一例です。

MX01-4.jpg

同様に、分に応じて分岐。

MX01-3.jpg

そして、時間です。

この様に分岐させた先にGOTO命令の先に、長針や短針のドット表示を制御するプログラムを記述すれば、見かけ上、長針や短針が動いているように見えます。

というアイデアです。

また、秒のカウントだけではなく、ドットLEDをダイナミックに1msec毎に16行分スキャンしてやらないと、LEDが全桁表示しませんので(ダイナミック点灯式)あわせて、その制御も、割り込み処理の中でしなければなりません。
うーーん、複雑な制御です。

はたして、、、、


管理者のみに表示する