56.gif (1.19 MB, 下載次數: 55)
下載附件
2023-11-20 22:24 上傳
rem Main.bas file generated by New Project wizard
rem
rem Created: 周六 11月 18 2023 taotie
rem Processor: ATmega8
rem Compiler: BASCOM-AVR
rem Software name: 摩爾斯電碼自動發送仿真
rem Write your code here
$regfile = "m8def.dat"
$hwstack = 32
$swstack = 32
$framesize = 32
$crystal =8000000
$baud = 9600
Config Portb.0 = Output
Speaker Alias Portb.0
Dim I As Byte ' 臨時用作循環計數器
Dim M As Byte ' 我們表中當前摩爾斯電碼的索引
Dim L As Byte ' 表示摩爾斯電碼按位生成中最低有效位
Dim P As Byte '用于端口查詢速度和字符集
Dim char_location As Byte '字符位
Dim char_string As String * 26 '字符串
Dim char_string_length As Byte '字符串長度
Dim char_name As String * 1 '單字符名
Dim ASC_byte As Byte At char_name Overlay '覆蓋變量(單詞 char 的字節值)
'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Main:
' 選擇(碼與碼之間、字與字之間、詞與詞之間)時間間隔
CONST D_D = 100 '滴滴答答間隔時間
CONST MA_MA = 200 ' 電碼之間間隔時間
CONST DL_DL = 100*20 '段落間隔時間
Wait 1
Write_char:
Do
char_string = "1234567890abcdefghijk" '在這里寫入要發送的字符
p=len(char_string) '獲取字符串長度
Gosub pouxi_danchi
Loop
pouxi_danchi: '剖析單詞
char_string_length = Len(char_string) '單詞長度=Len(返回字符串的長度)。
For char_location = 1 To char_string_length '字符位=1 到 單詞長度
char_name = Mid(char_string , char_location , 1 ) 'char_name = Mid(字符串 , 字符位 , 要獲取/設置的字符數。)
print char_name
Gosub Text_out '調用純文本輸出
Next
if char_string_length=P then waitMS DL_DL '如果字符串已發送到末尾則暫停x秒
Return
Text_out: ' 過濾掉壞字符;查找有用的字符
If ASC_byte > 123 Then ' 重定向壞字符以暫停
ASC_byte = 32
End If
If ASC_byte > 94 Then ' 小寫 -> 大寫
ASC_byte =ASC_byte - 32
End If
ASC_byte = ASC_byte - 32 ' 本ascii表的字符只有以32開頭的部分
M = Lookup(ASC_byte , DIANMA_BIAO) ' 從表中獲取莫爾斯字符
Gosub Morse
Return
'摩爾斯電碼生成:
Morse:
If M = 0 Then ' 特殊情況:空格而不是不可溢出的ASCII字符
Goto char_end
End If
For I = 1 To 8
If M = 1 Then ' 該字節只有值1;繪圖結束!
Goto char_end '字符結束
End If
L = M And &B00000001 ' 讀取最低階位
If L = 1 Then
Sound Speaker , 360, 550 ' 發出嗒聲
Else
Sound Speaker , 120, 550 ' 發出嘀聲
End If
Waitms D_D ' 在摩爾斯電碼中暫停
Shift M , Right , 1 ' 將位向右移動一位
' wait 1
Next I
char_end:
Waitms MA_MA ' 在摩爾斯電碼之間暫停
Return
End
'- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DIANMA_BIAO: ' 用于純文本輸出
' Ascii 32 - 47 -> _!"#$%&'()*+,-./
Data 0 , 0 , &B01010010 , 0 , 0 , 0 , &B00101010 , 0 , &B00101101 , &B01101101 , 0 , &B00101010 , &B01110011 , &B01100001
Data &B01101010 , &B00101001
' Ascii 48 - 57 -> 0123456789
Data &B00111111 , &B00111110 , &B00111100 , &B00111000 , &B00110000 , &B00100000 , &B00100001 , &B00100011 , &B00100111 , &B00101111
' Ascii 58 - 64 -> :;<=>?@
Data &B01000111 , &B01110011 , &B00101101 , &B00110001 , &B01101101 , &B01001100 , 0
' Ascii 65 - 90 ABCDEFGHIJKLMNOPQRSTUVWXYZ
Data &B00000110 , &B00010001 , &B00010101 , &B00001001 , &B00000010 , &B00010100 , &B00001011 , &B00010000 , &B00000100
Data &B00011110 , &B00001101 , &B00010010 , &B00000111 , &B00000101 , &B00001111 , &B00010110 , &B00011011 , &B00001010
Data &B00001000 , &B00000011 , &B00001100 , &B00011000 , &B00001110 , &B00011001 , &B00011101 , &B00010011
' ASCII 91 -95 ???s (s statt ?
Data &B00011010 , &B00010111 , &B00011100 , &B00001000
|