课程设计报告--摩尔斯电码发声器.doc

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课程设计报告 ——Morse电码发声器 学号 姓名:张江涛 学号 姓名:陆圣鹏 学号 姓名:彭 力 程序方案: 0-9和A-Z的摩尔斯电码表如下图所示: 将0-9和A-Z的摩尔斯电码制作为一个36行6列的二维数组,如下图所示 当输入0-9或A-Z之间的字符时,程序会根绝具体的字符,从摩尔斯电码表的二维数组中选出对应该字符的一行数组输出,作为该字符的摩尔斯电码。 用一个字节的二进制数代表一个字符的摩尔斯电码,左起第一个1为起始标志(起始标志及之前的0无效)。 起始标志后的0表示点。 起始标志后的1表示划。 如: A 的报文信息 0000 0101 B 的报文信息 0001 1000 C 的报文信息 0001 1010 按此规律建立一个报文信息表,报文信息表要按 0—9 、A—Z的顺序排列,发送时先查表找字符对应的报文信息,左移报文信息找起始标志,(起始标志及之前的0不发声),然后调用点划子程序发点划声响,发送一个字符循环8次则自动结束。报文信息表同样为一个36行6列的二维数组,如下图所示: 系统细节方案: 点划间隔子程序是通过调用window.h库中的Beep函数是系统发出声音。程序收到字符后,根据字符对应的摩尔斯电码表中的数组,输出该字符的摩尔斯电码,并且查找到该字符的01报文信息表,通过两个循环,调用点划子程序,完成电码的发音功能。 子程序及其流程图: 点声音程序代码: 点声音程序流程图 int dot()//点声音 { Beep(7000,200); return 0; } 划声音程序代码: 划声音程序流程图 int dash()//划声音 { Beep(7000,600); return 0; } 点划之间间隔程序代码: int space()//电码间隔声音 { Beep(0,400); return 0; } 主程序详解: 程序设计初期,用C++编写了一个控制台应用,先编写了一个电码编译的子程序: int tra(char c)//电码编译 { if(c=48c=57) { coutc的摩尔斯电码是:m[c-48]endl; for(i=0;i8;i++) { if(n[c-48][i]==1) { j=i+1; break; } } for(i=j;i8;i++) { if(n[c-48][i]==0) dot();//调用响铃点函数 if(n[c-48][i]==1) dash();//调用响铃划函数 space(); } } else if(c=65c=90) { coutc的摩尔斯电码是:m[c-65+10]endl; for(i=0;i8;i++) { if(n[c-65+10][i]==1) { j=i+1; break; } } for(i=j;i8;i++) { if(n[c-65+10][i]==0) dot(); if(n[c-65+10][i]==1) dash(); space(); } } else if(c48||(c57c65)||c90) { coutc输入格式错误,不是0-9或A-Z之间的字符endl; } return 0; } 电码编译子程序流程图: 在主程序中利用fstream库中的ifstream文件流又编写了一段可以打开文件的语句,主程序代码如下: int main()//主程序 { while(1) { cout请选择输入字符或者文件路径endl;//选择输入字符还是文件 cinch; if(ch==c)//输入字符进行编括译 { cout请输入0-9或A-Z之间的字符endl; while(1) { cinc; tra(c);//调用编码函 Sleep(500);//设置读取字符延迟 } } else if(ch==f)//输入文件路径进行编译 { cout请输入文件路径endl; string filename; cinfilename; ifstream infile(filename,ios::in); if(!infile) { cerr打开文件错误endl; } while(infile.get(c)) { tr

文档评论(0)

li455504605 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档