DECLARE SUB InputMessage ()
DECLARE SUB Title ()
DECLARE SUB Menu ()
DECLARE SUB ComInit ()
DECLARE SUB SourdPlot (XR())
DECLARE SUB SourdPlot2 (A, XR())
DECLARE SUB SourdPlot3 (FIL$, XR())
DECLARE SUB SourdPlot4 (KAI, A, FIL$, XR(), FLAG)
DECLARE SUB Save (XR())
DECLARE SUB Load (KAI, FIL$, A, XR(), FLAG)
DECLARE SUB Waku (A)
DECLARE SUB Waku1 ()
DECLARE SUB Waku2 ()
DECLARE SUB Waku3 ()
DECLARE SUB Plot (KAI, FIL$, A, XR(), FLAG)
DECLARE SUB Plot1 (XR())
DECLARE SUB Plot2 (XR())
DECLARE SUB Plot3 (XR())
DECLARE SUB Erabu (A%, X, A)
DECLARE SUB Erabu2 (A%, X, YOKO)
DECLARE SUB LPUTC (C%)
DECLARE SUB LPUTS (A$)
'$INCLUDE: 'QB. BI'
'$INCLUDE: 'GRAPH. BI'
DIM SHARED XR(128), A%(2000)
CONST XO = 25, YO = 17, UX = 10, UY = 1, XFS = 10, YFS = 5, LO = 211, RO = 18, X = 160, N = 1, KAGE = 10
CLS
VIEW PRINT 1 TO 24
HAJIME:
BEEP
CALL Title
DO
IK$ = INKEY$
LOOP WHILE IK$ = ""
BEEP
B:
CALL Menu
CALL Erabu(A%, X, A)
CLS 2
SELECT CASE A
CASE 1
BEEP
CALL ComInit
CLS
CALL InputMessage
CALL Waku(1)
AA:
IK$ = ""
DO WHILE IK$ = ""
CALL SoundPlot(XR())
IK$ = INKEY$
LOOP
IF IK$ <> CHR$(32) THEN GOTO AA
CLOSE #1
CALL Save(XR()): CLS 2: GOTO B
CASE 2
BEEP
CLS
CALL Waku(2)
CALL Load(KAI, FIL$, A, XR(), FLAG): CLS 2: GOTO B
CASE 3
BEEP
CLS
CALL Waku1
CALL Waku2
CALL Waku3
CALL Load(KAI, FIL$, A, XR(), FLAG): CLS 2: GOTO B
CASE 4
BEEP
CLS
KAI = 0
CALL Waku(4)
CALL Load(KAI, FIL$, A, XR(), FLAG): CLS 2: GOTO B
END SELECT
LOCATE 1, 1
BEEP
CLS
END
SUB ComInit
OPEN "COM1:9600,N,8,1,ASC" FOR RANDOM AS 1
END SUB
SUB Erabu (A%, X, A)
LINE (160, 96)-(450, 112), 12, BF
GET (160, 96)-(459, 112), A%
LINE (160, 96)-(459, 112), 0, BF
start1:
X = 96: A = 1
PUT (160, X), A%, XOR
ittr1:
A$ = INKEY$: IF A$ = "" THEN GOTO ittr1
IF A$ <> CHR$(0) + CHR$(&H48) AND A$ <> CHR$(0) + CHR$(&H50) AND A$ <> CHR$(13) THEN BEEP: GOTO ittr1
PUT (160, X), A%, XOR
IF (A = 5 AND A$ = CHR$(0) + CHR$(&H50)) OR (A = 1 AND A$ = CHR$(0) + CHR$(&H48)) THEN PUT (160, X), A%: GOTO ittr1
IF A$ = CHR$(0) + CHR$(&H50) THEN BEEP: X = X + 16 * 3: A = A + 1: PUT (160, X), A%: IF A > 5 THEN GOTO start1
IF A$ = CHR$(0) + CHR$(&H48) THEN BEEP: X = X - 16 * 3: A = A - 1: PUT (160, X), A%: IF A < 1 THEN GOTO start1
IF A$ <> CHR$(13) THEN GOTO ittr1
END SUB
SUB Erabu2 (A%, X, YOKO)
VIEW SCREEN (0, 0)-(639, 399)
LINE (80, 368)-(128, 384), 12, BF
GET (80, 368)-(128, 384), A%
LINE (80, 368)-(128, 384), 0, BF
COLOR 23
LOCATE 22, 1:PRINT " →←で選んで,リターンキーを押して下さい ! ";
LOCATE 24, 11: COLOR 6:PRINT "波形A 波形B 波形C ";
LOCATE 24, 65: COLOR 2:PRINT "メニューへ";
start1:
X = 80: YOKO = 1
PUT (X, 368), A%, XOR
ittr:
A$ = INKEY$: IF A$ = "" THEN GOTO ittr
IF A$ <> CHR$(0) + CHR$(&H4D) AND A$ <> CHR$(0) + CHR$(&H4B) AND A$ <> CHR$(13) THEN GOTO ittr
PUT (X, 368), A%, XOR
IF (YOKO = 4 AND A$ = CHR$(0) + CHR$(&H4D)) OR (YOKO = 1 AND A$ = CHR$(0) + CHR$(&H4B)) THEN PUT (X, 368), A%: GOTO ittr
IF A$ = CHR$(0) + CHR$(&H4D) THEN BEEP: X = X + 16 * 9: YOKO = YOKO + 1: PUT (X, 368), A%: IF YOKO > 4 THEN GOTO start
IF A$ = CHR$(0) + CHR$(&H4B) THEN BEEP: X = X - 16 * 9: YOKO = YOKO - 1: PUT (X, 368), A%: IF YOKO < 1 THEN GOTO start
IF A$ <> CHR$(13) THEN GOTO ittr
LOCATE 12, 53: PRINT " ";
LOCATE 14, 53: PRINT " ";
BEEP
END SUB
SUB InputMessage
COLOR 6
LOCATE 12, 53: PRINT "取り込みたいところで"
LOCATE 14, 53: PRINT "スペースキーを押して下さい"
END SUB
SUB Load (KAI, FIL$, A, XR(), FLAG)
FLAG = 0
j:
IF A <> 4 THEN GOTO G
LOCATE 4, 22: COLOR 7: PRINT "取り込んだ波形を重ね合わせます"
LOCATE 10, 60: COLOR 7: PRINT "ー 波形A"
LOCATE 13, 60: COLOR 6: PRINT "ー 波形B"
LOCATE 16, 60: COLOR 4: PRINT "ー 波形C"
G:
IF A <> 3 THEN GOTO K
LOCATE 4, 26: COLOR 7: PRINT "取り込んだ波形を表示します"
LOCATE 6, 12: PRINT "波形A": LOCATE 6, 38: PRINT "波形B": LOCATE 6, 64: PRINT "波形C"
K:
COLOR 7
CALL Erabu2(A%, X, YOKO)
IF YOKO = 1 THEN FIL$ = "波形A"
IF YOKO = 2 THEN FIL$ = "波形B"
IF YOKO = 3 THEN FIL$ = "波形C"
IF YOKO = 4 THEN GOTO H
OPEN FIL$ FOR INPUT AS #1
FOR i = 1 TO 128
INPUT #1, XR(i)
NEXT
CLOSE #1
IF A = 2 THEN CALL SoundPlot2(A, XR())
IF A = 3 THEN CALL SoundPlot3(FIL$, XR())
IF A = 4 THEN FLAG = 1: CALL SoundPlot4(KAI, A, FIL$, XR(), FLAG)
LOCATE 4, 17: PRINT " 取り込んだ波形です "
IF A = 2 THEN GOTO K
IF A = 3 OR A = 4 THEN GOTO j
H:
END SUB
SUB LPUTC (C%)
WHILE (INP(&H42) AND 4) <> 4
WEND
OUT &H40, C%
OUT &H46, 14
OUT &H46, 15
END SUB
SUB LPUTC (A$)
FOR K = 1 TO LEN(A$)
C% = ASC(MID$(A$, K, 1))
LPUTC C%
NEXT K
END SUB
SUB Menu
CLS
LINE (0, 0)-(639, 399), 9, BF
LINE (16 * 8, 5 * 16)-(60 * 8, 20 * 16), 7, B
LINE (16 * 8 + 1, 5 * 16 + 1)-(60 * 8 - 1, 20 * 16 - 1), 0, BF
COLOR 15
LOCATE 3, 28: PRINT "オペレーションメニュー"
COLOR 6
LOCATE 7, 21: PRINT "1 波形を取り込む ・・・・"
LOCATE 10, 21: PRINT "2 波形を確認する ・・・・"
LOCATE 13, 21: PRINT "3 波形を比べる ・・・・・"
LOCATE 16, 21: PRINT "4 波形を重ねる ・・・・・"
COLOR 2
LOCATE 19, 21: PRINT "5 終了 ・・・・・・・・・"
COLOR 21
LOCATE 23, 17: PRINT "↑ ↓で選んで,リターンキーを押して下さい !"
COLOR 7
END SUB
SUB Plot (KAI, FIL$, A, XR(), FLAG)
IF A = 1 OR A = 2 THEN col = 7
IF A = 4 AND FIL$ = "波形A" THEN col = 7
IF A = 4 AND FIL$ = "波形B" THEN col = 6
IF A = 4 AND FIL$ = "波形C" THEN col = 4
IF A = 4 THEN KAI = KAI + 1
IF KAI >= 3 OR FLAG = 1 THEN GOTO L
FOR i = 1 TO XFS - 1
LINE (8 * XO + 8 * UX * 128 / XFS * i / 50, 16 * YO + 8 - 2 * UY * (-50) - 80 - 1)-
(8 * XO + 8 * UX * 128 / XFS * i / 50, 16 * YO + 8 - 2 * UY * 50 - 80 + 1), 4, , &H8888
NEXT
FOR i = -YFS + 1 TO YFS - 1
LINE (8 * XO, 16 * YO + 8 - 2 * UY * 10 * i - 80)-
(8 * XO + 8 * UX * 128 / 50, 16 * YO + 8 - 2 * UY * 10 * i - 80), 4, , &H8888
NEXT
L:
COLOR col
i = 2: PSET (8 * XO + 8 * UX * 1.28 * (i - 1) / 50, 16 * YO + 8 - 2 * UY * XR(i) - 80)
FOR i = 3 TO 99
LINE -(8 * XO + 8 * UX * 1.28 * (i - 1) / 50, 16 * YO + 8 - 2 * UY * XR(i) - 80)
NEXT
END SUB
SUB Plot1 (XR())
i = 2: PSET (8 * XO + 8 * UX * 1.28 * (i - 1) / 50 - LO + RO, 16 * YO + 8 - 2 * UY * XR(i) - 80)
FOR i = 3 TO 99
LINE -(8 * XO + 8 * UX * 1.28 * (i - 1) / 50 - LO + RO, 16 * YO + 8 - 2 * UY * XR(i) - 80), 7
NEXT
END SUB
SUB Plot2 (XR())
i = 2: PSET (8 * XO + 8 * UX * 1.28 * (i - 1) / 50 + RO, 16 * YO + 8 - 2 * UY * XR(i) - 80)
FOR i = 3 TO 99
LINE -(8 * XO + 8 * UX * 1.28 * (i - 1) / 50 + RO, 16 * YO + 8 - 2 * UY * XR(i) - 80), 7
NEXT
END SUB
SUB Plot3 (XR())
i = 2: PSET (8 * XO + 8 * UX * 1.28 * (i - 1) / 50 + LO + RO, 16 * YO + 8 - 2 * UY * XR(i) - 80)
FOR i = 3 TO 99
LINE -(8 * XO + 8 * UX * 1.28 * (i - 1) / 50 + LO + RO, 16 * YO + 8 - 2 * UY * XR(i) - 80), 7
NEXT
END SUB
SUB Save (XR())
BEEP
LOCATE 4, 15: PRINT " この波形を取り込みました "
COLOR 7
LOCATE 12, 53: PRINT "どこに保存しますか?"
LOCATE 14, 53: PRINT "保存しないときはメニューへ"
CALL Erabu2(A%, X, YOKO)
IF YOKO = 1 THEN FIL$ = "波形A"
IF YOKO = 2 THEN FIL$ = "波形B"
IF YOKO = 3 THEN FIL$ = "波形C"
IF YOKO = 4 THEN GOTO GG
OPEN FIL$ FOR OUTPUT AS #1
FOR i = 1 TO 128
WHILE #1, XR(i)
NEXT
CLOSE #1
GG:
END SUB
SUB SoundPlot (XR())
PRINT #1, "c"
DO WHILE INPUT$(1, #1) <> "e"
LOOP
PRINT #1, "i"
FOR i = 1 TO 100
LINE INPUT #1, D$
XR(i) = (10 * VAL("&H" + RIGHT&(D$, 2)) / 256 - 5) * 10
NEXT
CLS 1
FOR i = 1 TO XFS
LINE (8 * XO + 8 * UX * 128 / XFS * i / 50, 16 * YO + 8 - 2 * UY * (-50) - 80 - 1)-
(8 * XO + 8 * UX * 128 / XFS * i / 50, 16 * YO + 8 - 2 * UY * 50 - 80 + 1), 4, , &H8888
NEXT
i = 2: PSET (8 * XO + 8 * UX * 1.28 * (i - 1) / 50, 16 * YO + 8 - 2 * UY * XR(i) - 80),
FOR i = 3 TO 99
LINE -(8 * XO + 8 * UX * 1.28 * (i - 1) / 50, 16 * YO + 8 - 2 * UY * XR(i) - 80), 7
NEXT
END SUB
SUB SoundPlot2 (A, XR())
VIEW SCREEN (8 * XO + 1, 16 * YO + 8 - 2 * UY * (-50) - 80 - 1)-
(8 * XO + 8 * UX * 127 / 50, 16 * YO + 8 - 2 * UY * 50 - 80 + 1)
CLS 1
VIEW SCREEN (0, 0)-(639, 399)
CALL Plot(KAI, FIL$, A, XR(), FLAG)
END SUB
SUB SoundPlot3 (FIL$, XR())
IF FIL$ = "波形A" THEN CALL Plot1(XR())
IF FIL$ = "波形B" THEN CALL Plot2(XR())
IF FIL$ = "波形C" THEN CALL Plot3(XR())
END SUB
SUB SoundPlot4 (KAI, A, FIL$, XR(), FLAG)
VIEW SCREEN (0, 0)-(639, 399)
CALL Plot(KAI, FIL$, A, XR(), FLAG)
END SUB
SUB Title
CLS
LINE (60, 60)-(580, 150), 9, BF
LINE (59, 59)-(581, 151), 6, B
LINE (58, 58)-(582, 152), 6, B
LINE (57, 57)-(583, 153), 6, B
PAINT (61, 61), 6, 9
COLOR 6
LOCATE 7, 15: PRINT " デジタルオシロスコープで";
COLOR 7: PRINT "波の性質";
COLOR 6: PRINT "を調べよう"
COLOR 7
COLOR 19
LOCATE 22, 21: PRINT "用意ができましたら,どれかキーを押して下さい"
COLOR 7
END SUB
SUB Waku (A)
CLS 1
COLOR 7
LOCATE 4, 28: PRINT "デジタルオシロスコープ"
LINE (8 * XO, 16 * YO + 8 - 2 * UY * (-50) - 80)-
(8 * XO + 8 * UX * 127 / 50 + 1, 16 * YO + 8 - 2 * UY * 50 - 80), 4, B
PAINT(0, 0), 9, 4
LINE (63, 360)-(576, 392), 0, BF
LINE (63, 360)-(576, 392), 10, B
LINE (40 + KAGE, 149 + KAGE)-(152 + KAGE, 249 + KAGE), 0, BF
LINE (40, 149)-(152, 249), 1, BF
LOCATE 14, 8: PRINT "横軸:時間"
LOCATE 12, 8: PRINT "縦軸:振幅"
FOR i = 0 TO XFS
KPUT 8 * XO + 8 * UX * 128 / XFS * i / 50 - 12,
16 * YO + 8 - 2 * UY * (-50) - 75, RIGHT$(STR$(i), 2), 7, 9
NEXT
KPUT 8 * XO + 8 * UX * 128 / XFS * (XFS + 1) / 50 - 10,
16 * YO + 8 - 2 * UY * (-50) - 75, "ms", 7, 9
FOR i = -YFS TO YFS
KPUT 8 * XO - 24, 16 * YO + 8 - 2 * UY * 10 * i - 88, RIGHT$(STR$(i), 2), 7, 9
NEXT
FOR i = 1 TO XFS
LINE (8 * XO + 8 * UX * 128 / XFS * i / 50, 16 * YO + 8 - 2 * UY * (-50) - 80 - 1)-
(8 * XO + 8 * UX * 128 / XFS * i / 50, 16 * YO + 8 - 2 * UY * 50 - 80 + 1), 4, , &H8888
NEXT
FOR i = -YFS + 1 TO YFS - 1
LINE (8 * XO, 16 * YO + 8 - 2 * UY * 10 * i - 80)-
(8 * XO + 8 * UX * 128 / 50, 16 * YO + 8 - 2 * UY * 10 * i - 80), 4, , &H8888
NEXT
IF A <> 1 GOTO END.SUB
COLOR 2
LOCATE 24, 17: PRINT "メニューに戻りたい時もスペースキーを押して下さい";
END.SUB:
BEEP
END SUB
SUB Waku2 (A)
FOR i = 1 TO XFS -1
LINE (8 * XO + 8 * UX * 128 / XFS * i / 50 + RO, 16 * YO + 8 - 2 * UY * (-50) - 80 - 1)-
(8 * XO + 8 * UX * 128 / XFS * i / 50 + RO, 16 * YO + 8 - 2 * UY * 50 - 80 + 1), 4, , &H8888
NEXT
FOR i = -YFS + 1 TO YFS -1
LINE (8 * XO + RO, 16 * YO + 8 - 2 * UY * 10 * i - 80)-
(8 * XO + 8 * UX * 128 / 50 + RO, 16 * YO + 8 - 2 * UY * 10 * i - 80), 4, , &H8888
NEXT
LINE (8 * XO + RO, 16 * YO + 8 - 2 * UY * (-50) - 80)-
(8 * XO + 8 * UX * 127 / 50 + RO + 1, 16 * YO + 8 - 2 * UY * 50 - 80), 4, B
END SUB
SUB Waku3 (A)
FOR i = 1 TO XFS -1
LINE (8 * XO + 8 * UX * 128 / XFS * i / 50 + LO + RO, 16 * YO + 8 - 2 * UY * (-50) - 80 - 1)-
(8 * XO + 8 * UX * 128 / XFS * i / 50 + LO + RO, 16 * YO + 8 - 2 * UY * 50 - 80 + 1), 4, , &H8888
NEXT
FOR i = -YFS + 1 TO YFS -1
LINE (8 * XO + LO + RO, 16 * YO + 8 - 2 * UY * 10 * i - 80)-
(8 * XO + 8 * UX * 128 / 50 + LO + RO, 16 * YO + 8 - 2 * UY * 10 * i - 80), 4, , &H8888
NEXT
LINE (8 * XO + LO + RO + 1, 16 * YO + 8 - 2 * UY * 10 * i - 80)-
(8 * XO + 8 * UX * 128 / 50 + LO + RO - 1, 16 * YO + 8 - 2 * UY * 50 - 80), 4, B
PAINT (0, 0), 9, 4
LINE (63, 360)-(576, 392), 0, BF
LINE (63, 360)-(576, 392), 10, B
END SUB
|