2015/07/31 情報技術 A 13p1271 西岡 圭佑 1. スロットのようにボタンで動く数値を止める装置 今回私はスロットの一部を作ってみた。本来は三つの数字が動いていてそれを順に止め ていくものだが、そのうちの一つを作った。数字表示 LED には 0、1、2 と 0 から 9 までの 数字が 10mS で順に表示されている。ボタンを押すと、ボタンを押されたときの数字を表 示したまま 0 から 9 まで表示するループからはずれ、もう一度ボタンを押すとまたそのル ープに戻るようになっている。つまり電源をいれると数字が 0 から 9 まで表示され、一度 ボタンを押すとそのときの数字で止まり、もう一度ボタンを押すとまた数字が動き出すと いうものである。 2. 外観と使い方 図 1 10ms ごとに 0 から 9 までの数字が表示 図 2 ボタンを押すとそのときの値で止まる ① 電源を入れると数字が 0 から 9 まで 10mS の間隔で表示される ② 一度ボタンを押すとその時の数字で止まる ③ もう一度ボタンを押すと数字はまた動き出す 3. 回路図とプログラム 図 3 回路図 *プログラム .include "tn2313def.inc" .cseg LDI R16,0b01111111 OUT DDRB,R16 LDI R16,0b00000000 OUT DDRD,R16 LDI R16,RAMEND OUT SPL,R16 IN R16,PIND ANDI R16,0b00000001 LOOP: BRNE SWON LDI R16,0b01000000 OUT PORTB,R16 RCALL T10mS IN R16,PIND ANDI R16,0b00000001 BRNE SWON LDI R16,0b01111001 OUT PORTB,R16 RCALL T10mS IN R16,PIND ANDI R16,0b00000001 BRNE SWON LDI R16,0b00100100 OUT PORTB,R16 RCALL T10mS IN R16,PIND ANDI R16,0b00000001 BRNE SWON LDI R16,0b00110000 OUT PORTB,R16 RCALL T10mS IN R16,PIND ANDI R16,0b00000001 BRNE SWON LDI R16,0b00011001 OUT PORTB,R16 RCALL T10mS IN R16,PIND ANDI R16,0b00000001 BRNE SWON LDI R16,0b00010010 OUT PORTB,R16 RCALL T10mS IN R16,PIND ANDI R16,0b00000001 BRNE SWON LDI R16,0b00000010 OUT PORTB,R16 RCALL T10mS IN R16,PIND ANDI R16,0b00000001 BRNE SWON LDI R16,0b01011000 OUT PORTB,R16 RCALL T10mS IN R16,PIND ANDI R16,0b00000001 BRNE SWON LDI R16,0b00000000 OUT PORTB,R16 RCALL T10mS IN R16,PIND ANDI R16,0b00000001 BRNE SWON LDI R16,0b00011000 OUT PORTB,R16 RCALL T10mS RJMP SWON: LOOP RCALL T10mS IN R16,PIND ANDI R16,0b00000001 BRNE SWON SWON1: RCALL T10mS IN R16,PIND ANDI R16,0b00000001 BRNE SWON2 RJMP SWON1 SWON2: RCALL T10mS IN R16,PIND ANDI R16,0b00000001 BRNE SWON2 RJMP LOOP T100US: LDI R20,30 L100US: DEC R20 BRNE L100US RET T1MS: LDI R21,10 L1MS: RCALL T100US DEC R21 BRNE L1MS RET T10MS: LDI R22,100 L10MS: RCALL T100US DEC R22 BRNE L10MS RET T1S: LDI R23,100 L1S: RCALL T10MS DEC R23 BRNE L1S RET 4. 工夫点と苦労した点 今回自分が工夫したところは一つの押しボタンのみで数字を止めること、また動き出す ようにプログラムしたことである。一つ目のつまずきは押しボタンが押されたらそのルー プから外すようにプログラムした時にボタンが押されたときの数字ではなく、一定の数字 しか表示されなかったことである。それはひとつひとつの数字表示の度にボタンが押され たかを探させることで解決した。またボタンのチャータリングの問題でかなりつまずいた。 ボタンが押されたとき、瞬時に金属がつながったか離れたかを判断しているのではなく何 回かつながったはなれたを繰り返している、これにより最初はボタンを押した時の精度が かなり低かった。しかしボタンを押した時に一度ループから抜け、さらにその時にまだ押 されているか、離れたかを探させることで精度が 100%になった。
© Copyright 2024 ExpyDoc