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(\} 数组排序测试源程序: #include int geti(float c[36],float a) { if(a<=c[35]) { for(i=0;c[i] return i-1; } else return 35; } int getjk(int c[36],int b) { return c[b]; } int main() { float B[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; cout< 实验主程序: #include\#include\sbit P1_5=P1^5; unsigned char i,beishu,cod,p1,p2; unsigned char volmax=0; float Ap,f; char display[3],screen[3]; void delay(unsigned char dly) { unsigned char j; for(j=dly;j>0;j--); } char geti(float c[36],float a) { if(a<=c[35]) { for(i=0;c[i] return i-1; } else return 35; } void vppfun(unsigned char vol) { 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}; int main() { unsigned char volget; int voltcal; char display[4],screen[4]; LcdInit(); display[1]=-2; PutStr(0,0,\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; //获取P2引脚数值,CD4051选通 P1=p1; P2=p2; voltcal=f*100; display[0]= voltcal/100; display[2]=( voltcal0)/10; display[3]= voltcal; for(i=0;i<4;i++) { screen[i]=display[i]+48; PutStr(0,0,\PutChar(i+6,1,screen[i]); } } } } 仿真结果: 图1 波形显示情况 图2 最小放大倍数检测 图3 最大放大倍数检测 2-6 在设计数据采集系统式,选择模拟多路开关要考虑的主要因素是什么? 解: 主要考虑减小串音干扰,具体为: (1) 减小Ri,为此前级应采用电压跟随器; (2) 选用Ron极小、Roff极大的开关管; (3) 减少输出端并联的开关数N。若N=1,则VN=0。 (4)减小串音应选用寄生电容小的MUX。 (5)模拟开关不用的输入端接地。 2-7 能否说一个带有采样保持器的数据采集系统的采样频率可以不受限制?为什么?P46 解:不能说带有采样保持器的数据采集系统的采样频率可以不受限制。 因为在A/D转换器在进行转换时需要一定的时间,在这个转换时间内,被转换的模拟量应基本保持不变,否则转换精度没有保证,甚至根本失去看转换的意义。所以转换时间tc制约着转换信号的最高频率。fmax?12m?1?tc(式1),进而影响数据采集系 12m?1统的采样频率fs?2fmax。在A/D之前加上采样/保持器后fmax??tAP(式2),tAP为 孔径时间。由于tAP?tc,所以由式2限定的信号频率远远高于式1限定的频率,采样/保持器扩展了被转换信号的范围,进而扩展了采样频率,但仍受tAP的限制,不能无限增大。 2-8在为一个数据采集系统选择微机时,主要考虑哪些因素? 解:(1)系统的通过速率,即系统速率、传输速率、采样速率或吞吐速率(单位时间内系统对模拟信号的采集次数)。 (2)系统的分辨率,即数据采集系统可以分辨的输入信号的最小变化量。 (3)系统的精度,当系统工作在额定速率下,系统采集的数值和实际值的差尽量要小。 2-9 一个数据采集系统的采样对象是温室大棚的温度和湿度,要求测量精度分别是 ±1°C和±3%相对误差,每10min采集一次数据,应选择何种类型的A/D转换器和通道方案? 解: 2-10 如果一个数据采集系统,要求有1%级精度性能指标,在设计该数据采集系统时,怎样选择系统的各个元器件?P55 解:通常传感器和信号放大电路所占的误差比例最大,其他各环节如采样/保持器和A/D转换器等误差,可以按选择元器件精度的一般规则和具体情况而定,选择元器件精度的一般规则是:每一个元器件的精度指标应该优于系统规定的某一最严格的性能指标的10倍左右。 所以此题中传感器和信号放大电路的总误差可分配成0.9%,A/D转换器和S/H器