bringartmのブログ

忘れそうなことを記録にのこそうと。

早押しボタンに司会者用コントロールを追加。プログラム作成。

Ichigojamの基板に7セグLEDを表示する回路基板を乗っけて、拡張性のあるインターフェイスができましたので、早押しボタンで回答者を一桁の数字を表示する仕組みにしました。

IN1,IN2,IN3,IN4,OUT1,OUT2,OUT3 (IN4~7に設定) で 回答者4名と出題者1名のボタンを制御しています。

f:id:bringartm:20170221195619j:plain
プログラムは下記の通り。 
(注)行内の空白や、注釈は説明用に付与をしました。 そのためプログラム入力するときには削除してください。そうしないとプログラム制限を超えメモリーオーバーになります。

100 '20170219 HC595 7SEG
110 cls: clv: OUT1,-1: OUT2,-1: OUT3,-1  'OUTの-1設定でINに変更
120 LET [90],63,6,91,79,102,109,125,39,127,111 '[90]からの10個配列で、7SEGの表示を設定
130 @INIT
140 P=0:GSB @SEG_DISP
150 @PRE
160 ifIN(7)<>0thenWAIT1:GOTO@PRE '7:司会者「出題」ボタン
170 Q=IN()&15 ’出題ボタンを押したときにフライング者を特定 Q:4ビットの押下状態を記憶
180 H=80:LET[80],0,0,0,0 :K=80:G=0 '[80]からの4個配列で、回答先着順を記憶 H;回答配列添え字 K:回答権番号
190 PLAY "T260 <G8B8": WAIT30 '出題のジングル
200 GSB @SEG_OFF ’出題中を表す、ドットのみの表示
210 @Thinking
220 B=in()
230 if B&(112+Q)=(112+Q) then GOTO @Thinking 'B: IN配列、今回7つ分を判断するため127(112+15)でモニタ繰り返し Q:4ビットで回答権がないものとマスクして 有効なキーが押されたとき次の行へ遷移
240 'SENCE 
250 forI=1to7: if B>>(I-1)&1 = 0 then P=I 'P: 回答者を特定
260 next
270 ifP>4then GOTO@CTRL 'P:5 正解 6: 不正解/次点 7:リセット
280 Q = Q&(15-1<<(P-1)): [H]=P :if[H-1]=[H] goto @Thinking else H=H+1 'Q:回答権は一人一回 H:回答配列
290 ? "Touch No = ",[80],[81],[82],[83]
300 if G=0 then F=[K] :GSB390:PLAY "T260 O5C8":G=1 ’音を出すのは一回だけ F:7SEGの表示数字
310 goto @Thinking
320 @CTRL
330 if P=5 then PLAY "T260 O5GCGCGC": goto@INIT
340 if P=6 then PLAY "T260 EEE": K=K+1: G=0: WAIT20 ’K:回答順位 
350 if P=7 then K=84 ’K:84 回答順位は80~83のため閾値を84とする
360 F=[K]:if K=84 then GOTO @INIT
370 GSB @SEG_DISP : goto @Thinking
380 '---SUB-RATCH---
390 @SEG_DISP  ’[90]から[99]までのLEDの表示数字構成からビットごとに操作
400 OUT5,0:FORS=7TO0STEP-1:OUT4,0:OUT6,[F+90]>>S&1:OUT4,1:NEXT:OUT5,1
410 RTN 
420 @SEG_OFF 'ドットのみ表示
430 OUT5,0:OUT4,0:OUT6,1:OUT4,1:FORS=7TO1STEP-1:OUT4,0:OUT6,0:OUT4,1:NEXT:OUT5,1
440 RTN