单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:568|回复:1
打印上一主题下一主题

bascom avr单片机摩尔斯电码自动发送仿真程序

[复制链接]
跳转到指定楼层
楼主
ID:342822发表于 2023-11-20 22:25|只看该作者|只看大图回帖奖励


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

评分

黑币 +50
收起理由
+ 50
共享资料的黑币奖励!

查看全部评分

沙发
ID:342822发表于 2023-12-4 20:14|只看该作者

手机版|小黑屋|51黑电子论坛|51黑电子论坛6群QQ管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网