スロットマシン(2015)

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%になった。