智能仪器大作业标准答案王扬DOC.docx
《智能仪器大作业标准答案王扬DOC.docx》由会员分享,可在线阅读,更多相关《智能仪器大作业标准答案王扬DOC.docx(20页珍藏版)》请在冰豆网上搜索。
智能仪器大作业标准答案王扬DOC
课程名称:
数据采集与智能仪器
姓名:
王扬
学号:
0121009310608
班级:
电信1006
《数据采集与智能仪器》课程考核(大作业)
武汉理工大学信息学院
参考书赵茂泰《智能仪器原理及应用》(第三版)电子工业出版社
程德福《智能仪器》(第二版)机械工业出版社
第1章概述
本章要求掌握的内容:
智能仪器分类、基本结构及特点、智能仪器设计的要点
考试题(10分)
1智能仪器设计时采用CPLD/FPGA有哪些优点?
第2章数据采集技术
数据采集系统的组成结构、模拟信号调理、A/D转换技术、高速数据采集与传输、D/A转换技术、数据采集系统设计
考试题(30分)
1设计一个MCS-51单片机控制的程控增益放大器的接口电路。
已知输入信号小于10mv,要求当输入信号小于1mv时,增益为1000,而输入信号每增加1mv时,其增益自动减少一倍,直到100mv为止。
(15分)
评分标准:
正确设计硬件电路图(5分);正确编写控制程序(5分);完成仿真调试,实现基本功能(5分);
2运用双口RAM或FIFO存储器对教材中图2-22所示的高速数据采集系统进行改造,画出采集系统电路原理图,简述其工作过程。
正确设计硬件电路图(10分);正确描述工作过程(5分);
第3章人机接口
键盘;LED、LCD、触摸屏
1设计8031单片机与液晶显示模块LCM-512-01A的接口电路,画出接口电路图并编写上下滚动显示XXGCXY(6个大写英文字母)的控制程序(包含程序流程图)。
正确设计硬件电路图(10分);正确画出程序流程图(5分);正确编写控制程序(5分);完成仿真调试(10分)
第4章数据通信
RS232C、RS485串行总线,USB通用串行总线,PTR2000无线数据传输
1设计PC机与MCS-51单片机的RS232C数据通信接口电路(单片机端含8位LED显示),编写从PC机键盘输入数字,在单片机的6位LED上左右滚动显示的通信与显示程序。
正确设计硬件电路图(5分);正确画出程序流程图(5分);正确编写单片机通信程序(5分);在开发系统上运行,实现基本功能(10分);制作实物,实现基本功能,效果良好(5分)。
FPGA/CPLD芯片都是特殊的ASIC芯片,他们除了ASIC的特点之外,还有以下优点:
(1)随着VLSI工艺的不断提高,FPGA/CPLD的规模也越来越大,所能实现的功能越来越强可以实现系统集成;
(2)FPGA/CPLD的资金投入小,研制开发费用低;(3)FPGA/CPLD可反复的编程、擦除、使用或者在外围电路不动的情况下用不同的EPROM就可实现不同的功能;(4)FPGA/CPLD芯片电路的实际周期短;(5)FPGA/CPLD软件易学易用,可以使设计人员更能集中精力进行电路设计。
FPGA/CPLD适合于正向设计,对知识产权保护有利。
1硬件电路图
2程序框图
3程序
数组合并测试程序
#include
usingnamespacestd;
intmain()
{
inti,j;
floatk;
floatC[72];
floatA[8]={1,1.5,2,2.7,3.3,5.1,6.8,10};
floatB[8]={1,1.5,2,2.7,3.3,5.1,6.8,10};
for(i=0;i<8;i++)
for(j=0;j<8;j++)
C[i*8+j+1]=A[i]*B[j]/(A[i]+B[j]);
}
cout<for(i=0;i<8;i++){C[i+65]=A[i];}cout<for(i=0;i<72;i++){for(j=0;j<72-i;j++){if(C[j]>C[j+1]){k=C[j];C[j]=C[j+1];C[j+1]=k;}}}for(i=1;i<=72;i++){cout<}system("pause");}数组排序测试源程序#includeusingnamespacestd;inti,b,c,d,e;floata;intgeti(floatc[36],floata){if(a<=c[35]){for(i=0;c[i]{}returni-1;}elsereturn35;}intgetjk(intc[36],intb){returnc[b];}intmain(){floatB[36]={0.5,0.6,0.6667,0.7297,0.75,0.7674,0.8361,0.8571,0.8718,0.9091,0.9643,1,1.0313,1.1489,1.1591,1.2289,1.2453,1.3044,1.35,1.4366,1.485,1.5455,1.65,1.6667,1.7654,1.9326,2.0036,2.126,2.2218,2.4812,2.55,2.9143,3.3775,3.4,4.0476,5};intC[36]={77,76,75,74,66,73,72,65,71,70,64,55,63,54,62,61,53,60,44,52,43,51,33,50,42,41,32,40,31,30,22,21,20,11,10,0};cin>>a;b=geti(B,a);c=getjk(C,b);d=c/10;e=c%10;cout<system("pause");}实验主程序#include"SMC162.h"#include"TLC549.h"sbitP1_5=P1^5;unsignedchari,beishu,cod,p1,p2;unsignedcharvolmax=0;floatAp,f;chardisplay[3],screen[3];voiddelay(unsignedchardly){unsignedcharj;for(j=dly;j>0;j--);}chargeti(floatc[36],floata){if(a<=c[35]){for(i=0;c[i]{}returni-1;}elsereturn35;}voidvppfun(unsignedcharvol){if(vol>volmax)volmax=vol;}FloatcodeAmp[36]={0.5,0.6,0.6667,0.7297,0.75,0.7674,0.8361,0.8571,0.8718,0.9091,0.9643,1,1.0313,1.1489,1.1591,1.2289,1.2453,1.3044,1.35,1.4366,1.485,1.5455,1.65,1.6667,1.7654,1.9326,2.0036,2.126,2.2218,2.4812,2.55,2.9143,3.3775,3.4,4.0476,5};UnsignedcharCD[36]={77,76,75,74,66,73,72,65,71,70,64,55,63,54,62,61,53,60,44,52,43,51,33,50,42,41,32,40,31,30,22,21,20,11,10,0};intmain(){unsignedcharvolget;intvoltcal;chardisplay[4],screen[4];LcdInit();display[1]=-2;PutStr(0,0,"Pleasewait!");while(1){volget=TLC549_GetAD();//AD数据获取vppfun(volget);//峰值获取if(P1_5==0){delay(30);Ap=127.0/(volmax-128);//放大倍数获取beishu=geti(Amp,Ap);//通过如已知倍数比较获取合适倍数cod=CD[beishu];//将倍数与引脚关系相对应f=Amp[beishu];p1=cod/10;//获取P1引脚数值,CD4051选通p2=cod%10;//获取P2引脚数值,CD4051选通P1=p1;P2=p2;voltcal=f*100;display[0]=voltcal/100;display[2]=(voltcal%100)/10;display[3]=voltcal%10;for(i=0;i<4;i++){screen[i]=display[i]+48;PutStr(0,0,"TheAmpiis:");PutChar(i+6,1,screen[i]);}}}}4仿真结果图1波形显示情况图2最小放大倍数检测图3最大放大倍数检测2运用双口RAM或FIFO存储器对教材中图2-22所示的高速数据采集系统进行改造,画出采集系统电路原理图,简述其工作过程。(15分)评分标准:正确设计硬件电路图(10分);正确描述工作过程(5分)1硬件电路图2工作过程IDT7206是IDT公司容量为16K×9的且引脚功能完全兼容的串行FIFO双端口RAM单向的FIFO双端口存储器。因为是一个FIFO(先入先出)存储器,所以没有绝对地址的概念,只有读指针和写指针的相对位置。当相对位置为0时,表明存储器空;为所用的存储器的容量时,表明存储器已满。AD7677为ADI公司研制的16位、1MSPS的高速A/D转换器。采集系统的原理图如上图所示。用一片AD7677和两片IDT7206构成了一个16位的、最高采样频率可达1MHz、每组最大采样点数为16K的数据采集系统。若要增加采集样本长度,只需要换IDT7206即可,其硬件的连接方式基本不变。在此系统中单片机的作用只是控制何时采样,以及采样完成后对采样数据的处理,在采样过程中,单片机无须任何干预。至于一次采集多少次,可以由硬件决定,也可以有软件控制。在中断中,单片机首先关闭采样脉冲信号(使P1.1输出为0),然后把每一点数据分两次分别从IDT7206(存低位)和IDT7206(存高位)读出,进行处理。每组数据的数量应该由程序计数判断,当然也可以利用IDT7206的EF标志进行查询判断。在进行第二组数据的采集前,最好将IDT7206先复位,通过在IDT7206的RS引脚输入一个低脉冲,即在8031的P1.0引脚输出一个低脉冲。这样可以更充分地保证FIFORAM的读、写指针的稳定。第3章人机接口考试题(30分)1设计8031单片机与液晶显示模块LCM-512-01A的接口电路,画出接口电路图并编写上下滚动显示XXGCXY(6个大写英文字母)的控制程序(包含程序流程图)。评分标准:正确设计硬件电路图(10分);正确画出程序流程图(5分);正确编写控制程序(5分);完成仿真调试(10分)1.接口电路图2.程序流程图3.程序#includetypedefunsignedcharuint8;typedefunsignedintuint16;sbitRS=P2^0;sbitRW=P2^1;sbitEN=P2^5;sbitBUSY=P0^7;unsignedcharcodeword1[]={"XXGCXY"};unsignedcharcodeword2[]={"XXGCXY"};voiddelay(){uint16i,j;for(i=0;i<200;i++)for(j=0;j<200;j++);}voidwait(){P0=0xff;do{RS=0;RW=1;EN=0;EN=1;}while(BUSY==1);EN=0;}voidw_dat(uint8dat){wait();EN=0;P0=dat;RS=1;RW=0;EN=1;EN=0;}voidw_cmd(uint8cmd){wait();EN=0;P0=cmd;RS=0;RW=0;EN=1;EN=0;}voidInit_LCD1602(){w_cmd(0x38);w_cmd(0x0f);w_cmd(0x06);w_cmd(0x01);}voidw_string(uint8addr_start,uint8*p){w_cmd(addr_start);while(*p!='\0'){w_dat(*p++);}p="WHLGDX";delay();}main(){Init_LCD1602();while(1){w_string(0x80,word1);w_cmd(0x01);w_string(0xc0,word2);w_cmd(0x01);}}4.结果第4章数据通信考试题(30分)1设计PC机与MCS-51单片机的RS232C数据通信接口电路(单片机端含8位LED显示),编写从PC机键盘输入数字,在单片机的6位LED上左右滚动显示的通信与显示程序。评分标准:正确设计硬件电路图(5分);正确画出程序流程图(5分);正确编写单片机通信程序(5分);在开发系统上运行,实现基本功能(10分);制作实物,实现基本功能,效果良好(5分)。1.通信接口电路 2.上位机3.流程图4.程序(1)下位机51单片机程序#include#include#defineuintunsignedint#defineucharunsignedcharucharcodetab[]={0xc0,0xcf,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x990,0x88,0x83,0xc6,0xa1,0x06,0x8e,0xff};uchari,aa;uintflag;sbitP3_6=P3^6;voiddelay(uintn){uinti,j;for(i=0;ifor(j=0;j<110;j++);}voiddisplay(ucharn){P2=_crol_(P2,1);P0=tab[n];delay(100);}voidmain(){aa=0;P2=0xfe;TMOD=0X20;SM0=0;SM1=1;REN=1;TR1=1;EA=1;ES=1;TH1=0XFd;TL1=0XFd;P3_6=1;while(1){if(flag==1){if(flag==1){//发送接受到的数据ES=0;//关闭串口中断flag=0;SBUF='a';while(!TI);TI=0;ES=1;}display(aa);}}voidser()interrupt4{RI=0;a=SBUF;b=a;flag=1;}(2)上位机C#实现程序usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespaceWindowsFormsApplication1{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidbutton1_Click(objectsender,EventArgse){try{serialPort1.PortName=comboBox1.Text;serialPort1.Open();serialPort1.Write("q");System.Threading.Thread.Sleep(200);//1秒if(serialPort1.ReadExisting()=="a"){pictureBox1.Image=global::WindowsFormsApplication1.Properties.Resources.Connect_Y;button1.Enabled=false;button2.Enabled=true;button3.Enabled=true;}}catch{MessageBox.Show("连接错误");}}privatevoidbutton2_Click(objectsender,EventArgse){pictureBox1.Image=global::WindowsFormsApplication1.Properties.Resources.Connect_N;button1.Enabled=true;button2.Enabled=false;button3.Enabled=false;serialPort1.Close();}privatevoidbutton3_Click(objectsender,EventArgse){if(serialPort1.IsOpen==true){stringx=textBox1.Text;serialPort1.Write(x);}else{MessageBox.Show("请先进行连接",MessageBoxButtons.OK,MessageBoxIcon.Warning);}}}}5结果
{C[i+65]=A[i];}
cout<for(i=0;i<72;i++){for(j=0;j<72-i;j++){if(C[j]>C[j+1]){k=C[j];C[j]=C[j+1];C[j+1]=k;}}}for(i=1;i<=72;i++){cout<}system("pause");}数组排序测试源程序#includeusingnamespacestd;inti,b,c,d,e;floata;intgeti(floatc[36],floata){if(a<=c[35]){for(i=0;c[i]{}returni-1;}elsereturn35;}intgetjk(intc[36],intb){returnc[b];}intmain(){floatB[36]={0.5,0.6,0.6667,0.7297,0.75,0.7674,0.8361,0.8571,0.8718,0.9091,0.9643,1,1.0313,1.1489,1.1591,1.2289,1.2453,1.3044,1.35,1.4366,1.485,1.5455,1.65,1.6667,1.7654,1.9326,2.0036,2.126,2.2218,2.4812,2.55,2.9143,3.3775,3.4,4.0476,5};intC[36]={77,76,75,74,66,73,72,65,71,70,64,55,63,54,62,61,53,60,44,52,43,51,33,50,42,41,32,40,31,30,22,21,20,11,10,0};cin>>a;b=geti(B,a);c=getjk(C,b);d=c/10;e=c%10;cout<system("pause");}实验主程序#include"SMC162.h"#include"TLC549.h"sbitP1_5=P1^5;unsignedchari,beishu,cod,p1,p2;unsignedcharvolmax=0;floatAp,f;chardisplay[3],screen[3];voiddelay(unsignedchardly){unsignedcharj;for(j=dly;j>0;j--);}chargeti(floatc[36],floata){if(a<=c[35]){for(i=0;c[i]{}returni-1;}elsereturn35;}voidvppfun(unsignedcharvol){if(vol>volmax)volmax=vol;}FloatcodeAmp[36]={0.5,0.6,0.6667,0.7297,0.75,0.7674,0.8361,0.8571,0.8718,0.9091,0.9643,1,1.0313,1.1489,1.1591,1.2289,1.2453,1.3044,1.35,1.4366,1.485,1.5455,1.65,1.6667,1.7654,1.9326,2.0036,2.126,2.2218,2.4812,2.55,2.9143,3.3775,3.4,4.0476,5};UnsignedcharCD[36]={77,76,75,74,66,73,72,65,71,70,64,55,63,54,62,61,53,60,44,52,43,51,33,50,42,41,32,40,31,30,22,21,20,11,10,0};intmain(){unsignedcharvolget;intvoltcal;chardisplay[4],screen[4];LcdInit();display[1]=-2;PutStr(0,0,"Pleasewait!");while(1){volget=TLC549_GetAD();//AD数据获取vppfun(volget);//峰值获取if(P1_5==0){delay(30);Ap=127.0/(volmax-128);//放大倍数获取beishu=geti(Amp,Ap);//通过如已知倍数比较获取合适倍数cod=CD[beishu];//将倍数与引脚关系相对应f=Amp[beishu];p1=cod/10;//获取P1引脚数值,CD4051选通p2=cod%10;//获取P2引脚数值,CD4051选通P1=p1;P2=p2;voltcal=f*100;display[0]=voltcal/100;display[2]=(voltcal%100)/10;display[3]=voltcal%10;for(i=0;i<4;i++){screen[i]=display[i]+48;PutStr(0,0,"TheAmpiis:");PutChar(i+6,1,screen[i]);}}}}4仿真结果图1波形显示情况图2最小放大倍数检测图3最大放大倍数检测2运用双口RAM或FIFO存储器对教材中图2-22所示的高速数据采集系统进行改造,画出采集系统电路原理图,简述其工作过程。(15分)评分标准:正确设计硬件电路图(10分);正确描述工作过程(5分)1硬件电路图2工作过程IDT7206是IDT公司容量为16K×9的且引脚功能完全兼容的串行FIFO双端口RAM单向的FIFO双端口存储器。因为是一个FIFO(先入先出)存储器,所以没有绝对地址的概念,只有读指针和写指针的相对位置。当相对位置为0时,表明存储器空;为所用的存储器的容量时,表明存储器已满。AD7677为ADI公司研制的16位、1MSPS的高速A/D转换器。采集系统的原理图如上图所示。用一片AD7677和两片IDT7206构成了一个16位的、最高采样频率可达1MHz、每组最大采样点数为16K的数据采集系统。若要增加采集样本长度,只需要换IDT7206即可,其硬件的连接方式基本不变。在此系统中单片机的作用只是控制何时采样,以及采样完成后对采样数据的处理,在采样过程中,单片机无须任何干预。至于一次采集多少次,可以由硬件决定,也可以有软件控制。在中断中,单片机首先关闭采样脉冲信号(使P1.1输出为0),然后把每一点数据分两次分别从IDT7206(存低位)和IDT7206(存高位)读出,进行处理。每组数据的数量应该由程序计数判断,当然也可以利用IDT7206的EF标志进行查询判断。在进行第二组数据的采集前,最好将IDT7206先复位,通过在IDT7206的RS引脚输入一个低脉冲,即在8031的P1.0引脚输出一个低脉冲。这样可以更充分地保证FIFORAM的读、写指针的稳定。第3章人机接口考试题(30分)1设计8031单片机与液晶显示模块LCM-512-01A的接口电路,画出接口电路图并编写上下滚动显示XXGCXY(6个大写英文字母)的控制程序(包含程序流程图)。评分标准:正确设计硬件电路图(10分);正确画出程序流程图(5分);正确编写控制程序(5分);完成仿真调试(10分)1.接口电路图2.程序流程图3.程序#includetypedefunsignedcharuint8;typedefunsignedintuint16;sbitRS=P2^0;sbitRW=P2^1;sbitEN=P2^5;sbitBUSY=P0^7;unsignedcharcodeword1[]={"XXGCXY"};unsignedcharcodeword2[]={"XXGCXY"};voiddelay(){uint16i,j;for(i=0;i<200;i++)for(j=0;j<200;j++);}voidwait(){P0=0xff;do{RS=0;RW=1;EN=0;EN=1;}while(BUSY==1);EN=0;}voidw_dat(uint8dat){wait();EN=0;P0=dat;RS=1;RW=0;EN=1;EN=0;}voidw_cmd(uint8cmd){wait();EN=0;P0=cmd;RS=0;RW=0;EN=1;EN=0;}voidInit_LCD1602(){w_cmd(0x38);w_cmd(0x0f);w_cmd(0x06);w_cmd(0x01);}voidw_string(uint8addr_start,uint8*p){w_cmd(addr_start);while(*p!='\0'){w_dat(*p++);}p="WHLGDX";delay();}main(){Init_LCD1602();while(1){w_string(0x80,word1);w_cmd(0x01);w_string(0xc0,word2);w_cmd(0x01);}}4.结果第4章数据通信考试题(30分)1设计PC机与MCS-51单片机的RS232C数据通信接口电路(单片机端含8位LED显示),编写从PC机键盘输入数字,在单片机的6位LED上左右滚动显示的通信与显示程序。评分标准:正确设计硬件电路图(5分);正确画出程序流程图(5分);正确编写单片机通信程序(5分);在开发系统上运行,实现基本功能(10分);制作实物,实现基本功能,效果良好(5分)。1.通信接口电路 2.上位机3.流程图4.程序(1)下位机51单片机程序#include#include#defineuintunsignedint#defineucharunsignedcharucharcodetab[]={0xc0,0xcf,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x990,0x88,0x83,0xc6,0xa1,0x06,0x8e,0xff};uchari,aa;uintflag;sbitP3_6=P3^6;voiddelay(uintn){uinti,j;for(i=0;ifor(j=0;j<110;j++);}voiddisplay(ucharn){P2=_crol_(P2,1);P0=tab[n];delay(100);}voidmain(){aa=0;P2=0xfe;TMOD=0X20;SM0=0;SM1=1;REN=1;TR1=1;EA=1;ES=1;TH1=0XFd;TL1=0XFd;P3_6=1;while(1){if(flag==1){if(flag==1){//发送接受到的数据ES=0;//关闭串口中断flag=0;SBUF='a';while(!TI);TI=0;ES=1;}display(aa);}}voidser()interrupt4{RI=0;a=SBUF;b=a;flag=1;}(2)上位机C#实现程序usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespaceWindowsFormsApplication1{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidbutton1_Click(objectsender,EventArgse){try{serialPort1.PortName=comboBox1.Text;serialPort1.Open();serialPort1.Write("q");System.Threading.Thread.Sleep(200);//1秒if(serialPort1.ReadExisting()=="a"){pictureBox1.Image=global::WindowsFormsApplication1.Properties.Resources.Connect_Y;button1.Enabled=false;button2.Enabled=true;button3.Enabled=true;}}catch{MessageBox.Show("连接错误");}}privatevoidbutton2_Click(objectsender,EventArgse){pictureBox1.Image=global::WindowsFormsApplication1.Properties.Resources.Connect_N;button1.Enabled=true;button2.Enabled=false;button3.Enabled=false;serialPort1.Close();}privatevoidbutton3_Click(objectsender,EventArgse){if(serialPort1.IsOpen==true){stringx=textBox1.Text;serialPort1.Write(x);}else{MessageBox.Show("请先进行连接",MessageBoxButtons.OK,MessageBoxIcon.Warning);}}}}5结果
for(i=0;i<72;i++)
for(j=0;j<72-i;j++)
if(C[j]>C[j+1])
k=C[j];
C[j]=C[j+1];
C[j+1]=k;}
for(i=1;i<=72;i++)
cout<}system("pause");}数组排序测试源程序#includeusingnamespacestd;inti,b,c,d,e;floata;intgeti(floatc[36],floata){if(a<=c[35]){for(i=0;c[i]{}returni-1;}elsereturn35;}intgetjk(intc[36],intb){returnc[b];}intmain(){floatB[36]={0.5,0.6,0.6667,0.7297,0.75,0.7674,0.8361,0.8571,0.8718,0.9091,0.9643,1,1.0313,1.1489,1.1591,1.2289,1.2453,1.3044,1.35,1.4366,1.485,1.5455,1.65,1.6667,1.7654,1.9326,2.0036,2.126,2.2218,2.4812,2.55,2.9143,3.3775,3.4,4.0476,5};intC[36]={77,76,75,74,66,73,72,65,71,70,64,55,63,54,62,61,53,60,44,52,43,51,33,50,42,41,32,40,31,30,22,21,20,11,10,0};cin>>a;b=geti(B,a);c=getjk(C,b);d=c/10;e=c%10;cout<system("pause");}实验主程序#include"SMC162.h"#include"TLC549.h"sbitP1_5=P1^5;unsignedchari,beishu,cod,p1,p2;unsignedcharvolmax=0;floatAp,f;chardisplay[3],screen[3];voiddelay(unsignedchardly){unsignedcharj;for(j=dly;j>0;j--);}chargeti(floatc[36],floata){if(a<=c[35]){for(i=0;c[i]{}returni-1;}elsereturn35;}voidvppfun(unsignedcharvol){if(vol>volmax)volmax=vol;}FloatcodeAmp[36]={0.5,0.6,0.6667,0.7297,0.75,0.7674,0.8361,0.8571,0.8718,0.9091,0.9643,1,1.0313,1.1489,1.1591,1.2289,1.2453,1.3044,1.35,1.4366,1.485,1.5455,1.65,1.6667,1.7654,1.9326,2.0036,2.126,2.2218,2.4812,2.55,2.9143,3.3775,3.4,4.0476,5};UnsignedcharCD[36]={77,76,75,74,66,73,72,65,71,70,64,55,63,54,62,61,53,60,44,52,43,51,33,50,42,41,32,40,31,30,22,21,20,11,10,0};intmain(){unsignedcharvolget;intvoltcal;chardisplay[4],screen[4];LcdInit();display[1]=-2;PutStr(0,0,"Pleasewait!");while(1){volget=TLC549_GetAD();//AD数据获取vppfun(volget);//峰值获取if(P1_5==0){delay(30);Ap=127.0/(volmax-128);//放大倍数获取beishu=geti(Amp,Ap);//通过如已知倍数比较获取合适倍数cod=CD[beishu];//将倍数与引脚关系相对应f=Amp[beishu];p1=cod/10;//获取P1引脚数值,CD4051选通p2=cod%10;//获取P2引脚数值,CD4051选通P1=p1;P2=p2;voltcal=f*100;display[0]=voltcal/100;display[2]=(voltcal%100)/10;display[3]=voltcal%10;for(i=0;i<4;i++){screen[i]=display[i]+48;PutStr(0,0,"TheAmpiis:");PutChar(i+6,1,screen[i]);}}}}4仿真结果图1波形显示情况图2最小放大倍数检测图3最大放大倍数检测2运用双口RAM或FIFO存储器对教材中图2-22所示的高速数据采集系统进行改造,画出采集系统电路原理图,简述其工作过程。(15分)评分标准:正确设计硬件电路图(10分);正确描述工作过程(5分)1硬件电路图2工作过程IDT7206是IDT公司容量为16K×9的且引脚功能完全兼容的串行FIFO双端口RAM单向的FIFO双端口存储器。因为是一个FIFO(先入先出)存储器,所以没有绝对地址的概念,只有读指针和写指针的相对位置。当相对位置为0时,表明存储器空;为所用的存储器的容量时,表明存储器已满。AD7677为ADI公司研制的16位、1MSPS的高速A/D转换器。采集系统的原理图如上图所示。用一片AD7677和两片IDT7206构成了一个16位的、最高采样频率可达1MHz、每组最大采样点数为16K的数据采集系统。若要增加采集样本长度,只需要换IDT7206即可,其硬件的连接方式基本不变。在此系统中单片机的作用只是控制何时采样,以及采样完成后对采样数据的处理,在采样过程中,单片机无须任何干预。至于一次采集多少次,可以由硬件决定,也可以有软件控制。在中断中,单片机首先关闭采样脉冲信号(使P1.1输出为0),然后把每一点数据分两次分别从IDT7206(存低位)和IDT7206(存高位)读出,进行处理。每组数据的数量应该由程序计数判断,当然也可以利用IDT7206的EF标志进行查询判断。在进行第二组数据的采集前,最好将IDT7206先复位,通过在IDT7206的RS引脚输入一个低脉冲,即在8031的P1.0引脚输出一个低脉冲。这样可以更充分地保证FIFORAM的读、写指针的稳定。第3章人机接口考试题(30分)1设计8031单片机与液晶显示模块LCM-512-01A的接口电路,画出接口电路图并编写上下滚动显示XXGCXY(6个大写英文字母)的控制程序(包含程序流程图)。评分标准:正确设计硬件电路图(10分);正确画出程序流程图(5分);正确编写控制程序(5分);完成仿真调试(10分)1.接口电路图2.程序流程图3.程序#includetypedefunsignedcharuint8;typedefunsignedintuint16;sbitRS=P2^0;sbitRW=P2^1;sbitEN=P2^5;sbitBUSY=P0^7;unsignedcharcodeword1[]={"XXGCXY"};unsignedcharcodeword2[]={"XXGCXY"};voiddelay(){uint16i,j;for(i=0;i<200;i++)for(j=0;j<200;j++);}voidwait(){P0=0xff;do{RS=0;RW=1;EN=0;EN=1;}while(BUSY==1);EN=0;}voidw_dat(uint8dat){wait();EN=0;P0=dat;RS=1;RW=0;EN=1;EN=0;}voidw_cmd(uint8cmd){wait();EN=0;P0=cmd;RS=0;RW=0;EN=1;EN=0;}voidInit_LCD1602(){w_cmd(0x38);w_cmd(0x0f);w_cmd(0x06);w_cmd(0x01);}voidw_string(uint8addr_start,uint8*p){w_cmd(addr_start);while(*p!='\0'){w_dat(*p++);}p="WHLGDX";delay();}main(){Init_LCD1602();while(1){w_string(0x80,word1);w_cmd(0x01);w_string(0xc0,word2);w_cmd(0x01);}}4.结果第4章数据通信考试题(30分)1设计PC机与MCS-51单片机的RS232C数据通信接口电路(单片机端含8位LED显示),编写从PC机键盘输入数字,在单片机的6位LED上左右滚动显示的通信与显示程序。评分标准:正确设计硬件电路图(5分);正确画出程序流程图(5分);正确编写单片机通信程序(5分);在开发系统上运行,实现基本功能(10分);制作实物,实现基本功能,效果良好(5分)。1.通信接口电路 2.上位机3.流程图4.程序(1)下位机51单片机程序#include#include#defineuintunsignedint#defineucharunsignedcharucharcodetab[]={0xc0,0xcf,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x990,0x88,0x83,0xc6,0xa1,0x06,0x8e,0xff};uchari,aa;uintflag;sbitP3_6=P3^6;voiddelay(uintn){uinti,j;for(i=0;ifor(j=0;j<110;j++);}voiddisplay(ucharn){P2=_crol_(P2,1);P0=tab[n];delay(100);}voidmain(){aa=0;P2=0xfe;TMOD=0X20;SM0=0;SM1=1;REN=1;TR1=1;EA=1;ES=1;TH1=0XFd;TL1=0XFd;P3_6=1;while(1){if(flag==1){if(flag==1){//发送接受到的数据ES=0;//关闭串口中断flag=0;SBUF='a';while(!TI);TI=0;ES=1;}display(aa);}}voidser()interrupt4{RI=0;a=SBUF;b=a;flag=1;}(2)上位机C#实现程序usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespaceWindowsFormsApplication1{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidbutton1_Click(objectsender,EventArgse){try{serialPort1.PortName=comboBox1.Text;serialPort1.Open();serialPort1.Write("q");System.Threading.Thread.Sleep(200);//1秒if(serialPort1.ReadExisting()=="a"){pictureBox1.Image=global::WindowsFormsApplication1.Properties.Resources.Connect_Y;button1.Enabled=false;button2.Enabled=true;button3.Enabled=true;}}catch{MessageBox.Show("连接错误");}}privatevoidbutton2_Click(objectsender,EventArgse){pictureBox1.Image=global::WindowsFormsApplication1.Properties.Resources.Connect_N;button1.Enabled=true;button2.Enabled=false;button3.Enabled=false;serialPort1.Close();}privatevoidbutton3_Click(objectsender,EventArgse){if(serialPort1.IsOpen==true){stringx=textBox1.Text;serialPort1.Write(x);}else{MessageBox.Show("请先进行连接",MessageBoxButtons.OK,MessageBoxIcon.Warning);}}}}5结果
system("pause");
数组排序测试源程序
inti,b,c,d,e;
floata;
intgeti(floatc[36],floata)
if(a<=c[35])
for(i=0;c[i]{}returni-1;}elsereturn35;}intgetjk(intc[36],intb){returnc[b];}intmain(){floatB[36]={0.5,0.6,0.6667,0.7297,0.75,0.7674,0.8361,0.8571,0.8718,0.9091,0.9643,1,1.0313,1.1489,1.1591,1.2289,1.2453,1.3044,1.35,1.4366,1.485,1.5455,1.65,1.6667,1.7654,1.9326,2.0036,2.126,2.2218,2.4812,2.55,2.9143,3.3775,3.4,4.0476,5};intC[36]={77,76,75,74,66,73,72,65,71,70,64,55,63,54,62,61,53,60,44,52,43,51,33,50,42,41,32,40,31,30,22,21,20,11,10,0};cin>>a;b=geti(B,a);c=getjk(C,b);d=c/10;e=c%10;cout<system("pause");}实验主程序#include"SMC162.h"#include"TLC549.h"sbitP1_5=P1^5;unsignedchari,beishu,cod,p1,p2;unsignedcharvolmax=0;floatAp,f;chardisplay[3],screen[3];voiddelay(unsignedchardly){unsignedcharj;for(j=dly;j>0;j--);}chargeti(floatc[36],floata){if(a<=c[35]){for(i=0;c[i]{}returni-1;}elsereturn35;}voidvppfun(unsignedcharvol){if(vol>volmax)volmax=vol;}FloatcodeAmp[36]={0.5,0.6,0.6667,0.7297,0.75,0.7674,0.8361,0.8571,0.8718,0.9091,0.9643,1,1.0313,1.1489,1.1591,1.2289,1.2453,1.3044,1.35,1.4366,1.485,1.5455,1.65,1.6667,1.7654,1.9326,2.0036,2.126,2.2218,2.4812,2.55,2.9143,3.3775,3.4,4.0476,5};UnsignedcharCD[36]={77,76,75,74,66,73,72,65,71,70,64,55,63,54,62,61,53,60,44,52,43,51,33,50,42,41,32,40,31,30,22,21,20,11,10,0};intmain(){unsignedcharvolget;intvoltcal;chardisplay[4],screen[4];LcdInit();display[1]=-2;PutStr(0,0,"Pleasewait!");while(1){volget=TLC549_GetAD();//AD数据获取vppfun(volget);//峰值获取if(P1_5==0){delay(30);Ap=127.0/(volmax-128);//放大倍数获取beishu=geti(Amp,Ap);//通过如已知倍数比较获取合适倍数cod=CD[beishu];//将倍数与引脚关系相对应f=Amp[beishu];p1=cod/10;//获取P1引脚数值,CD4051选通p2=cod%10;//获取P2引脚数值,CD4051选通P1=p1;P2=p2;voltcal=f*100;display[0]=voltcal/100;display[2]=(voltcal%100)/10;display[3]=voltcal%10;for(i=0;i<4;i++){screen[i]=display[i]+48;PutStr(0,0,"TheAmpiis:");PutChar(i+6,1,screen[i]);}}}}4仿真结果图1波形显示情况图2最小放大倍数检测图3最大放大倍数检测2运用双口RAM或FIFO存储器对教材中图2-22所示的高速数据采集系统进行改造,画出采集系统电路原理图,简述其工作过程。(15分)评分标准:正确设计硬件电路图(10分);正确描述工作过程(5分)1硬件电路图2工作过程IDT7206是IDT公司容量为16K×9的且引脚功能完全兼容的串行FIFO双端口RAM单向的FIFO双端口存储器。因为是一个FIFO(先入先出)存储器,所以没有绝对地址的概念,只有读指针和写指针的相对位置。当相对位置为0时,表明存储器空;为所用的存储器的容量时,表明存储器已满。AD7677为ADI公司研制的16位、1MSPS的高速A/D转换器。采集系统的原理图如上图所示。用一片AD7677和两片IDT7206构成了一个16位的、最高采样频率可达1MHz、每组最大采样点数为16K的数据采集系统。若要增加采集样本长度,只需要换IDT7206即可,其硬件的连接方式基本不变。在此系统中单片机的作用只是控制何时采样,以及采样完成后对采样数据的处理,在采样过程中,单片机无须任何干预。至于一次采集多少次,可以由硬件决定,也可以有软件控制。在中断中,单片机首先关闭采样脉冲信号(使P1.1输出为0),然后把每一点数据分两次分别从IDT7206(存低位)和IDT7206(存高位)读出,进行处理。每组数据的数量应该由程序计数判断,当然也可以利用IDT7206的EF标志进行查询判断。在进行第二组数据的采集前,最好将IDT7206先复位,通过在IDT7206的RS引脚输入一个低脉冲,即在8031的P1.0引脚输出一个低脉冲。这样可以更充分地保证FIFORAM的读、写指针的稳定。第3章人机接口考试题(30分)1设计8031单片机与液晶显示模块LCM-512-01A的接口电路,画出接口电路图并编写上下滚动显示XXGCXY(6个大写英文字母)的控制程序(包含程序流程图)。评分标准:正确设计硬件电路图(10分);正确画出程序流程图(5分);正确编写控制程序(5分);完成仿真调试(10分)1.接口电路图2.程序流程图3.程序#includetypedefunsignedcharuint8;typedefunsignedintuint16;sbitRS=P2^0;sbitRW=P2^1;sbitEN=P2^5;sbitBUSY=P0^7;unsignedcharcodeword1[]={"XXGCXY"};unsignedcharcodeword2[]={"XXGCXY"};voiddelay(){uint16i,j;for(i=0;i<200;i++)for(j=0;j<200;j++);}voidwait(){P0=0xff;do{RS=0;RW=1;EN=0;EN=1;}while(BUSY==1);EN=0;}voidw_dat(uint8dat){wait();EN=0;P0=dat;RS=1;RW=0;EN=1;EN=0;}voidw_cmd(uint8cmd){wait();EN=0;P0=cmd;RS=0;RW=0;EN=1;EN=0;}voidInit_LCD1602(){w_cmd(0x38);w_cmd(0x0f);w_cmd(0x06);w_cmd(0x01);}voidw_string(uint8addr_start,uint8*p){w_cmd(addr_start);while(*p!='\0'){w_dat(*p++);}p="WHLGDX";delay();}main(){Init_LCD1602();while(1){w_string(0x80,word1);w_cmd(0x01);w_string(0xc0,word2);w_cmd(0x01);}}4.结果第4章数据通信考试题(30分)1设计PC机与MCS-51单片机的RS232C数据通信接口电路(单片机端含8位LED显示),编写从PC机键盘输入数字,在单片机的6位LED上左右滚动显示的通信与显示程序。评分标准:正确设计硬件电路图(5分);正确画出程序流程图(5分);正确编写单片机通信程序(5分);在开发系统上运行,实现基本功能(10分);制作实物,实现基本功能,效果良好(5分)。1.通信接口电路 2.上位机3.流程图4.程序(1)下位机51单片机程序#include#include#defineuintunsignedint#defineucharunsignedcharucharcodetab[]={0xc0,0xcf,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x990,0x88,0x83,0xc6,0xa1,0x06,0x8e,0xff};uchari,aa;uintflag;sbitP3_6=P3^6;voiddelay(uintn){uinti,j;for(i=0;ifor(j=0;j<110;j++);}voiddisplay(ucharn){P2=_crol_(P2,1);P0=tab[n];delay(100);}voidmain(){aa=0;P2=0xfe;TMOD=0X20;SM0=0;SM1=1;REN=1;TR1=1;EA=1;ES=1;TH1=0XFd;TL1=0XFd;P3_6=1;while(1){if(flag==1){if(flag==1){//发送接受到的数据ES=0;//关闭串口中断flag=0;SBUF='a';while(!TI);TI=0;ES=1;}display(aa);}}voidser()interrupt4{RI=0;a=SBUF;b=a;flag=1;}(2)上位机C#实现程序usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespaceWindowsFormsApplication1{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidbutton1_Click(objectsender,EventArgse){try{serialPort1.PortName=comboBox1.Text;serialPort1.Open();serialPort1.Write("q");System.Threading.Thread.Sleep(200);//1秒if(serialPort1.ReadExisting()=="a"){pictureBox1.Image=global::WindowsFormsApplication1.Properties.Resources.Connect_Y;button1.Enabled=false;button2.Enabled=true;button3.Enabled=true;}}catch{MessageBox.Show("连接错误");}}privatevoidbutton2_Click(objectsender,EventArgse){pictureBox1.Image=global::WindowsFormsApplication1.Properties.Resources.Connect_N;button1.Enabled=true;button2.Enabled=false;button3.Enabled=false;serialPort1.Close();}privatevoidbutton3_Click(objectsender,EventArgse){if(serialPort1.IsOpen==true){stringx=textBox1.Text;serialPort1.Write(x);}else{MessageBox.Show("请先进行连接",MessageBoxButtons.OK,MessageBoxIcon.Warning);}}}}5结果
{}
returni-1;
elsereturn35;
intgetjk(intc[36],intb)
returnc[b];
floatB[36]={0.5,0.6,0.6667,0.7297,0.75,0.7674,0.8361,0.8571,0.8718,0.9091,0.9643,1,1.0313,
1.1489,1.1591,1.2289,1.2453,1.3044,1.35,1.4366,1.485,1.5455,1.65,1.6667,1.7654,1.9326,2.0036,
2.126,2.2218,2.4812,2.55,2.9143,3.3775,3.4,4.0476,5};
intC[36]={77,76,75,74,66,73,72,65,71,70,64,55,63,54,62,61,53,60,
44,52,43,51,33,50,42,41,32,40,31,30,22,21,20,11,10,0};
cin>>a;
b=geti(B,a);
c=getjk(C,b);
d=c/10;
e=c%10;
cout<
实验主程序
#include"SMC162.h"
#include"TLC549.h"
sbitP1_5=P1^5;
unsignedchari,beishu,cod,p1,p2;
unsignedcharvolmax=0;
floatAp,f;
chardisplay[3],screen[3];
voiddelay(unsignedchardly)
unsignedcharj;
for(j=dly;j>0;j--);
chargeti(floatc[36],floata)
for(i=0;c[i]{}returni-1;}elsereturn35;}voidvppfun(unsignedcharvol){if(vol>volmax)volmax=vol;}FloatcodeAmp[36]={0.5,0.6,0.6667,0.7297,0.75,0.7674,0.8361,0.8571,0.8718,0.9091,0.9643,1,1.0313,1.1489,1.1591,1.2289,1.2453,1.3044,1.35,1.4366,1.485,1.5455,1.65,1.6667,1.7654,1.9326,2.0036,2.126,2.2218,2.4812,2.55,2.9143,3.3775,3.4,4.0476,5};UnsignedcharCD[36]={77,76,75,74,66,73,72,65,71,70,64,55,63,54,62,61,53,60,44,52,43,51,33,50,42,41,32,40,31,30,22,21,20,11,10,0};intmain(){unsignedcharvolget;intvoltcal;chardisplay[4],screen[4];LcdInit();display[1]=-2;PutStr(0,0,"Pleasewait!");while(1){volget=TLC549_GetAD();//AD数据获取vppfun(volget);//峰值获取if(P1_5==0){delay(30);Ap=127.0/(volmax-128);//放大倍数获取beishu=geti(Amp,Ap);//通过如已知倍数比较获取合适倍数cod=CD[beishu];//将倍数与引脚关系相对应f=Amp[beishu];p1=cod/10;//获取P1引脚数值,CD4051选通p2=cod%10;//获取P2引脚数值,CD4051选通P1=p1;P2=p2;voltcal=f*100;display[0]=voltcal/100;display[2]=(voltcal%100)/10;display[3]=voltcal%10;for(i=0;i<4;i++){screen[i]=display[i]+48;PutStr(0,0,"TheAmpiis:");PutChar(i+6,1,screen[i]);}}}}4仿真结果图1波形显示情况图2最小放大倍数检测图3最大放大倍数检测2运用双口RAM或FIFO存储器对教材中图2-22所示的高速数据采集系统进行改造,画出采集系统电路原理图,简述其工作过程。(15分)评分标准:正确设计硬件电路图(10分);正确描述工作过程(5分)1硬件电路图2工作过程IDT7206是IDT公司容量为16K×9的且引脚功能完全兼容的串行FIFO双端口RAM单向的FIFO双端口存储器。因为是一个FIFO(先入先出)存储器,所以没有绝对地址的概念,只有读指针和写指针的相对位置。当相对位置为0时,表明存储器空;为所用的存储器的容量时,表明存储器已满。AD7677为ADI公司研制的16位、1MSPS的高速A/D转换器。采集系统的原理图如上图所示。用一片AD7677和两片IDT7206构成了一个16位的、最高采样频率可达1MHz、每组最大采样点数为16K的数据采集系统。若要增加采集样本长度,只需要换IDT7206即可,其硬件的连接方式基本不变。在此系统中单片机的作用只是控制何时采样,以及采样完成后对采样数据的处理,在采样过程中,单片机无须任何干预。至于一次采集多少次,可以由硬件决定,也可以有软件控制。在中断中,单片机首先关闭采样脉冲信号(使P1.1输出为0),然后把每一点数据分两次分别从IDT7206(存低位)和IDT7206(存高位)读出,进行处理。每组数据的数量应该由程序计数判断,当然也可以利用IDT7206的EF标志进行查询判断。在进行第二组数据的采集前,最好将IDT7206先复位,通过在IDT7206的RS引脚输入一个低脉冲,即在8031的P1.0引脚输出一个低脉冲。这样可以更充分地保证FIFORAM的读、写指针的稳定。第3章人机接口考试题(30分)1设计8031单片机与液晶显示模块LCM-512-01A的接口电路,画出接口电路图并编写上下滚动显示XXGCXY(6个大写英文字母)的控制程序(包含程序流程图)。评分标准:正确设计硬件电路图(10分);正确画出程序流程图(5分);正确编写控制程序(5分);完成仿真调试(10分)1.接口电路图2.程序流程图3.程序#includetypedefunsignedcharuint8;typedefunsignedintuint16;sbitRS=P2^0;sbitRW=P2^1;sbitEN=P2^5;sbitBUSY=P0^7;unsignedcharcodeword1[]={"XXGCXY"};unsignedcharcodeword2[]={"XXGCXY"};voiddelay(){uint16i,j;for(i=0;i<200;i++)for(j=0;j<200;j++);}voidwait(){P0=0xff;do{RS=0;RW=1;EN=0;EN=1;}while(BUSY==1);EN=0;}voidw_dat(uint8dat){wait();EN=0;P0=dat;RS=1;RW=0;EN=1;EN=0;}voidw_cmd(uint8cmd){wait();EN=0;P0=cmd;RS=0;RW=0;EN=1;EN=0;}voidInit_LCD1602(){w_cmd(0x38);w_cmd(0x0f);w_cmd(0x06);w_cmd(0x01);}voidw_string(uint8addr_start,uint8*p){w_cmd(addr_start);while(*p!='\0'){w_dat(*p++);}p="WHLGDX";delay();}main(){Init_LCD1602();while(1){w_string(0x80,word1);w_cmd(0x01);w_string(0xc0,word2);w_cmd(0x01);}}4.结果第4章数据通信考试题(30分)1设计PC机与MCS-51单片机的RS232C数据通信接口电路(单片机端含8位LED显示),编写从PC机键盘输入数字,在单片机的6位LED上左右滚动显示的通信与显示程序。评分标准:正确设计硬件电路图(5分);正确画出程序流程图(5分);正确编写单片机通信程序(5分);在开发系统上运行,实现基本功能(10分);制作实物,实现基本功能,效果良好(5分)。1.通信接口电路 2.上位机3.流程图4.程序(1)下位机51单片机程序#include#include#defineuintunsignedint#defineucharunsignedcharucharcodetab[]={0xc0,0xcf,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x990,0x88,0x83,0xc6,0xa1,0x06,0x8e,0xff};uchari,aa;uintflag;sbitP3_6=P3^6;voiddelay(uintn){uinti,j;for(i=0;ifor(j=0;j<110;j++);}voiddisplay(ucharn){P2=_crol_(P2,1);P0=tab[n];delay(100);}voidmain(){aa=0;P2=0xfe;TMOD=0X20;SM0=0;SM1=1;REN=1;TR1=1;EA=1;ES=1;TH1=0XFd;TL1=0XFd;P3_6=1;while(1){if(flag==1){if(flag==1){//发送接受到的数据ES=0;//关闭串口中断flag=0;SBUF='a';while(!TI);TI=0;ES=1;}display(aa);}}voidser()interrupt4{RI=0;a=SBUF;b=a;flag=1;}(2)上位机C#实现程序usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespaceWindowsFormsApplication1{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidbutton1_Click(objectsender,EventArgse){try{serialPort1.PortName=comboBox1.Text;serialPort1.Open();serialPort1.Write("q");System.Threading.Thread.Sleep(200);//1秒if(serialPort1.ReadExisting()=="a"){pictureBox1.Image=global::WindowsFormsApplication1.Properties.Resources.Connect_Y;button1.Enabled=false;button2.Enabled=true;button3.Enabled=true;}}catch{MessageBox.Show("连接错误");}}privatevoidbutton2_Click(objectsender,EventArgse){pictureBox1.Image=global::WindowsFormsApplication1.Properties.Resources.Connect_N;button1.Enabled=true;button2.Enabled=false;button3.Enabled=false;serialPort1.Close();}privatevoidbutton3_Click(objectsender,EventArgse){if(serialPort1.IsOpen==true){stringx=textBox1.Text;serialPort1.Write(x);}else{MessageBox.Show("请先进行连接",MessageBoxButtons.OK,MessageBoxIcon.Warning);}}}}5结果
voidvppfun(unsignedcharvol)
if(vol>volmax)
volmax=vol;
FloatcodeAmp[36]={0.5,0.6,0.6667,0.7297,0.75,0.7674,0.8361,0.8571,0.8718,0.9091,0.9643,1,1.0313,1.1489,1.1591,1.2289,1.2453,1.3044,1.35,1.4366,1.485,1.5455,1.65,1.6667,1.7654,1.9326,2.0036,2.126,2.2218,2.4812,2.55,2.9143,3.3775,3.4,4.0476,5};
UnsignedcharCD[36]={77,76,75,74,66,73,72,65,71,70,64,55,63,54,62,61,53,60,44,52,43,51,33,50,42,41,32,40,31,30,22,21,20,11,10,0};
unsignedcharvolget;
intvoltcal;
chardisplay[4],screen[4];
LcdInit();
display[1]=-2;
PutStr(0,0,"Pleasewait!
");
while
(1)
volget=TLC549_GetAD();//AD数据获取
vppfun(volget);//峰值获取
if(P1_5==0)
delay(30);
Ap=127.0/(volmax-128);//放大倍数获取
beishu=geti(Amp,Ap);//通过如已知倍数比较获取合适倍数
cod=CD[beishu];//将倍数与引脚关系相对应
f=Amp[beishu];
p1=cod/10;//获取P1引脚数值,CD4051选通
p2=cod%10;//获取P2引脚数值,CD4051选通
P1=p1;
P2=p2;
voltcal=f*100;
display[0]=voltcal/100;
display[2]=(voltcal%100)/10;
display[3]=voltcal%10;
for(i=0;i<4;i++)
screen[i]=display[i]+48;
PutStr(0,0,"TheAmpiis:
PutChar(i+6,1,screen[i]);
4仿真结果
图1波形显示情况
图2最小放大倍数检测
图3最大放大倍数检测
正确设计硬件电路图(10分);正确描述工作过程(5分)
2工作过程
IDT7206是IDT公司容量为16K×9的且引脚功能完全兼容的串行FIFO双端口RAM单向的FIFO双端口存储器。
因为是一个FIFO(先入先出)存储器,所以没有绝对地址的概念,只有读指针和写指针的相对位置。
当相对位置为0时,表明存储器空;为所用的存储器的容量时,表明存储器已满。
AD7677为ADI公司研制的16位、1MSPS的高速A/D转换器。
采集系统的原理图如上图所示。
用一片AD7677和两片IDT7206构成了一个16位的、最高采样频率可达1MHz、每组最大采样点数为16K的数据采集系统。
若要增加采集样本长度,只需要换IDT7206即可,其硬件的连接方式基本不变。
在此系统中单片机的作用只是控制何时采样,以及采样完成后对采样数据的处理,在采样过程中,单片机无须任何干预。
至于一次采集多少次,可以由硬件决定,也可以有软件控制。
在中断中,单片机首先关闭采样脉冲信号(使P1.1输出为0),然后把每一点数据分两次分别从
IDT7206(存低位)和IDT7206(存高位)读出,进行处理。
每组数据的数量应该由程序计数判断,当然也可以利用IDT7206的EF标志进行查询判断。
在进行第二组数据的采集前,最好将IDT7206先复位,通过在IDT7206的RS引脚输入一个低脉冲,即在8031的P1.0引脚输出一个低脉冲。
这样可以更充分地保证FIFORAM的读、写指针的稳定。
1.接口电路图
2.程序流程图
3.程序
typedefunsignedcharuint8;
typedefunsignedintuint16;
sbitRS=P2^0;
sbitRW=P2^1;
sbitEN=P2^5;
sbitBUSY=P0^7;
unsignedcharcodeword1[]={"XXGCXY"};
unsignedcharcodeword2[]={"XXGCXY"};
voiddelay()
{uint16i,j;
for(i=0;i<200;i++)
for(j=0;j<200;j++);
voidwait()
P0=0xff;
do
RS=0;
RW=1;
EN=0;
EN=1;
while(BUSY==1);
voidw_dat(uint8dat)
wait();
P0=dat;
RS=1;
RW=0;
voidw_cmd(uint8cmd)
P0=cmd;
voidInit_LCD1602()
w_cmd(0x38);
w_cmd(0x0f);
w_cmd(0x06);
w_cmd(0x01);
voidw_string(uint8addr_start,uint8*p)
w_cmd(addr_start);
while(*p!
='\0')
w_dat(*p++);
p="WHLGDX";
delay();
main()
Init_LCD1602();
w_string(0x80,word1);
w_string(0xc0,word2);
4.结果
1.通信接口电路
2.上位机
3.流程图
4.程序
(1)下位机51单片机程序
#defineuintunsignedint
#defineucharunsignedchar
ucharcodetab[]={0xc0,0xcf,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x990,
0x88,0x83,0xc6,0xa1,0x06,
0x8e,0xff};
uchari,aa;
uintflag;
sbitP3_6=P3^6;
voiddelay(uintn)
uinti,j;
for(i=0;ifor(j=0;j<110;j++);}voiddisplay(ucharn){P2=_crol_(P2,1);P0=tab[n];delay(100);}voidmain(){aa=0;P2=0xfe;TMOD=0X20;SM0=0;SM1=1;REN=1;TR1=1;EA=1;ES=1;TH1=0XFd;TL1=0XFd;P3_6=1;while(1){if(flag==1){if(flag==1){//发送接受到的数据ES=0;//关闭串口中断flag=0;SBUF='a';while(!TI);TI=0;ES=1;}display(aa);}}voidser()interrupt4{RI=0;a=SBUF;b=a;flag=1;}(2)上位机C#实现程序usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespaceWindowsFormsApplication1{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidbutton1_Click(objectsender,EventArgse){try{serialPort1.PortName=comboBox1.Text;serialPort1.Open();serialPort1.Write("q");System.Threading.Thread.Sleep(200);//1秒if(serialPort1.ReadExisting()=="a"){pictureBox1.Image=global::WindowsFormsApplication1.Properties.Resources.Connect_Y;button1.Enabled=false;button2.Enabled=true;button3.Enabled=true;}}catch{MessageBox.Show("连接错误");}}privatevoidbutton2_Click(objectsender,EventArgse){pictureBox1.Image=global::WindowsFormsApplication1.Properties.Resources.Connect_N;button1.Enabled=true;button2.Enabled=false;button3.Enabled=false;serialPort1.Close();}privatevoidbutton3_Click(objectsender,EventArgse){if(serialPort1.IsOpen==true){stringx=textBox1.Text;serialPort1.Write(x);}else{MessageBox.Show("请先进行连接",MessageBoxButtons.OK,MessageBoxIcon.Warning);}}}}5结果
for(j=0;j<110;j++);
voiddisplay(ucharn)
P2=_crol_(P2,1);
P0=tab[n];
delay(100);
voidmain()
{aa=0;
P2=0xfe;
TMOD=0X20;
SM0=0;
SM1=1;
REN=1;
TR1=1;
EA=1;
ES=1;
TH1=0XFd;
TL1=0XFd;
P3_6=1;
if(flag==1)
//发送接受到的数据
ES=0;//关闭串口中断
flag=0;
SBUF='a';
while(!
TI);
TI=0;
display(aa);
voidser()interrupt4
RI=0;
a=SBUF;
b=a;
flag=1;}
(2)上位机C#实现程序
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
namespaceWindowsFormsApplication1
publicpartialclassForm1:
Form
publicForm1()
InitializeComponent();
privatevoidbutton1_Click(objectsender,EventArgse)
try
serialPort1.PortName=comboBox1.Text;
serialPort1.Open();
serialPort1.Write("q");
System.Threading.Thread.Sleep(200);//1秒
if(serialPort1.ReadExisting()=="a")
pictureBox1.Image=global:
:
WindowsFormsApplication1.Properties.Resources.Connect_Y;
button1.Enabled=false;
button2.Enabled=true;
button3.Enabled=true;
catch
MessageBox.Show("连接错误");
privatevoidbutton2_Click(objectsender,EventArgse)
WindowsFormsApplication1.Properties.Resources.Connect_N;
button1.Enabled=true;
button2.Enabled=false;
button3.Enabled=false;
serialPort1.Close();
privatevoidbutton3_Click(objectsender,EventArgse)
if(serialPort1.IsOpen==true)
stringx=textBox1.Text;
serialPort1.Write(x);
else
MessageBox.Show("请先进行连接",MessageBoxButtons.OK,MessageBoxIcon.Warning);
5结果
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1