gets(c);//利用gets而不用cin是为了当输入的数据中含有空格时能读取完整的码
if(check(c))//首先检查输入的数据是否符合要求,01串符合要求
{
Differential_Manchester_Encody(c);
//根据用户需要决定是否继续编码过程
cout<<"continueornot[y/n]:
";
cin>>temp;
getchar();//这个getchar()是必须存在的,否则gets函数会读取cin>>temp中的回车
}
}
return0;
}
九、运行结果:
十、实验总结:
1、结果分析:
(1)差分曼彻斯特码编码规则:
从上图可看出差分曼彻斯特码的编码规则,即:
i.每个单位周期内,以1/2周期的时刻处,分为高低两个等时长电平。
有两种:
上升(先高后低)或下降(先低后高)。
ii.数据流的二进制编码中,第一个数据位是1,则编码为下降。
0则相反。
iii.数据流的二进制编码中,其它数据位,则根据此位跟前一位的电平比较。
相同则编码为不跳变(跟上一位后半部分一样)。
不同则相反。
(2)差分曼彻斯特码特点:
在信号为开始时不改变信号极性,表示逻辑“1”;在信号为开始时改变信号极性,表示逻辑“0”。
当比特为1时,前T/2比特位的电平与上一个比特位的后T/2的比特位的电平相同;当比特为0时,前T/2比特位的电平与上一个比特位的后T/2比特位的电平相反。
2、实验感想:
首先,让我对差分曼彻斯特编码原理有了进一步的了解。
差分曼彻斯特码又叫数字双相码,每个时钟中间都有一次跳变这个跳变作同步之用。
其次,通过这次课程设计,我认识到了完成一项课程设计工作不但需要对知识的掌握和理解,还需要不懂就问,同学间共同努力来解决课程设计当中的种种困难,开拓创新能力的目的。
最后,通过这次课程设计,让我对说明书的模板有了更清晰的了解,加深了我思想中对文章模范化的概念,对我一年后的毕业论文也起了轮廓性作用。
这将会变成我们在大学生活中获得的又一笔巨大的财富。
附录代码:
#include
usingnamespacestd;
#defineMAX1024
boolcheck(char*ch)
{
boolflag=true;
intindex=1;
chartemp='n';
if(ch[0]=='\0')
{
cout<<"(----请输入上述转换的数据!
----)"<flag=false;
}
while(ch[index]!
='\0'&&ch[0]!
='\0')
{
if(ch[index]=='')//如果输入的数据中有空格则忽略
{
index++;
continue;
}
if(ch[index]!
='0'&&ch[index]!
='1')
{
cout<<"源数据有误!
"<cout<<"是否继续?
[y/n]:
";
cin>>temp;
if(temp!
='y')exit
(1);
flag=false;
break;
}
index++;
}
returnflag;
}
voidtest()
{
charc[MAX];
inta[16]={0};
inti=0,j;
cout<<"请输入一个十六进制数:
"<cin>>c;
while(c[i])
{
if(c[i]>'0'&&c[i]<'9')
c[i]=c[i++]-48;
else
if(c[i]>='A'&&c[i]<='Z')
c[i]=c[i++]-55;
elseif(c[i]>='a'&&c[i]<='z')
c[i]=c[i++]-87;
else
{
cout<<"输入错误,请从新输入"<return;
}
}
i=0;
while(c[i])
{
for(j=3;j>=0;j--)
{
a[j]=c[i]%2;
c[i]/=2;
}
for(j=0;j<4;j++)
cout<i++;
}
cout<}
voidDifferential_Manchester_Encody(char*ch)
{
intindex=1;
chartemp;
cout<<"差分曼彻斯特编码图像为:
"<if(ch[0]=='0')
{
cout<<"-_";
temp='1';
}
else
{
cout<<"_-";
temp='0';
}
while(ch[index]!
='\0')
{
if(ch[index]=='')
{
index++;
continue;
}
if(ch[index]=='1')
{
if(temp=='1')
{
cout<<"_-";
temp='0';
}
else
{
cout<<"-_";
temp='1';
}
}
else
{
if(temp=='1')
{
cout<<"-_";
temp='1';
}
else
{
cout<<"_-";
temp='0';
}
}
index++;
}
cout<}
intmain()
{
test();
charc[MAX];
chartemp='y';
while(temp=='y')
{
cout<<"非归零码为:
"<gets(c);
if(check(c)){
Differential_Manchester_Encody(c);
cout<<"continueornot[y/n]:
";
cin>>temp;
getchar();
}
}
return0;
}