好文档 - 专业文书写作范文服务资料分享网站

数学模型与计算机控制 第八章 AD、DA转换原理实验程序

天下 分享 时间: 加入收藏 我要投稿 点赞

2280 NEXT J

2285 REM 从键盘上读字符,判断用户是否有指令,如果键入“Esc”键,则返回主菜单,如果键入“1”键,则重新做D/A转换实验,如果键入“2”键,则重新转换 2290 X$=INKEY$

2300 IF X$=CHR$(27) THEN GOTO 800 2310 IF X$=\2320 IF X$=\2330 GOTO 2290

3000 REM D/A、A/D转换原理

3010 CLS:SCREEN 2:LOCATE 3,10,0:INPUT \采样通道号(0-15)\3020 IF CHANNEL%<0 OR CHANNEL%>15 THEN GOTO 3010

3030 LOCATE 5,10,0:INPUT \输入递推平均滤波的递推平均项数(1-100)\

3040 IF NUMBER%<1 OR NUMBER%>100 THEN GOTO 3030

3050 LOCATE 7,10,0:INPUT \输入D/A输出为A/D的倍数(±100)\3060 CLS:SCREEN 1:LOCATE 2,6,0:PRINT \数模转换通道号选择\3070 LOCATE 5,7,0:PRINT \ 通 道 号 0\3080 LOCATE 7,7,0:PRINT \ 通 道 号 1\3090 LOCATE 9,7,0:PRINT \返 回 主 菜 单\3100 X$=INKEY$

3110 IF X$=\3120 IF X$=CHR$(27) THEN GOTO 800 3130 GOTO 3100

3140 CLS:SCREEN 2:CHANNELDA%=VAL(X$) 3150 GOSUB 5000

3160 ADNUMSUM=0:ADMVMAX= -5000:ADMVMIN= 5000 3170 FOR J=1 TO 400 3180 OUT S,CHANNEL%

3190 LOCATE 1,18,0:PRINT \模数(A/D) 数模(D/A)转换结果\3192 LOCATE 2,62,0:PRINT \递推平均项数 :\3194 LOCATE 3,62,0:PRINT \为 A/D 倍数 : \3196 LOCATE 4,64,0:PRINT \ \ )\3200 ADNUMSUM=0

3210 FOR I= 1 TO NUMBER% 3220 OUT S+1,CHANNEL%

3230 ADNUMSUM=ADNUMSUM+INP(S+2)*256+INP(S+3) 3240 X$=INKEY$

3250 IF X$=CHR$(27) THEN GOTO 800 3260 IF X$=\3270 IF X$=\3290 NEXT I

3300 ADNUM=ADNUMSUM/NUMBER% 3310 ADMV=ADNUM*5000/2048-5000

3330 IF ADMV > ADMVMAX THEN ADMVMAX=ADMV 3340 IF ADMV < ADMVMIN THEN ADMVMIN=ADMV

3350 LOCATE 10,1,0:PRINT \最大值 : \最小值 : \现在值 : \3360 PSET(60+J,INT(90-(90-20)/5000*ADMV)) 3361 REM D/A的电压值为A/D电压值的K倍 3362 DAMV=K*ADMV

3363 REM 限制D/A的电压值为±5000MV 3364 IF DAMV>5000 THEN DAMV=5000 3366 IF DAMV<-5000 THEN DAMV=-5000 3370 DANUM%=(DAMV+5000)*2048/5000

3380 IF DANUM%>4095 THEN DANUM%=4095 3390 IF DANUM%<0 THEN DANUM%=0 3400 DANUMN1%=INT(DANUM%/16)

3410 DANUMN2%=(DANUM%-DANUMN1%*16)*16 3420 OUT S+4+CHANNELDA%*2,DANUMN1% 3430 L=INP(S+4+CHANNELDA%*2)

3440 OUT S+5+CHANNELDA%*2,DANUM2% 3450 L=INP(S+5+CHANNELDA%*2)

3460 PSET(60+J,INT(90-(90-20)/5000*DAMV)) 3465 PSET(60+J,INT(90-(90-20)/5000*DAMV)+1) 3470 NEXT J 3480 GOTO 3150

5000 REM 操作提示、画坐标子程序 5005 REM 显示Y轴坐标的名称

5010 KEY OFF: CLS:LOCATE 1,5,0:PRINT \伏 V \5020 REM 显示X轴坐标的名称

5030 LOCATE 6,60,0:PRINT \时间\5035 REM 显示操作提示的内容

5040 LOCATE 6,70,0:PRINT \操作提示 :\

5050 LOCATE 7,64,0:PRINT \ 1 . 重新设定\5060 LOCATE 8,64,0:PRINT \ 2 . 重新转换\5070 LOCATE 9,64,0:PRINT \返回主菜单\5080 REM 画Y轴坐标,带箭头

5090 X1=60:Y1=160:X2=60:Y2=20:DX=4:DY=2:LINE (X1,Y1)-(X2,Y2): LINE-(X2-DX, Y2+DY):LINE -(X2+DX,Y2+DY):LINE -(X2,Y2)

5095 REM 将Y轴坐标加粗,因为计算机显示器的纵横比不同,为使Y轴和X轴粗细相当

5100 LINE (X1-1,Y1)-(X2-1,Y2+DY):LINE (X1+1,Y1)-(X2+1,Y2+DY) 5105 REM 画X轴坐标,带箭头

5110X1=60:Y1=90:X2=460:Y2=90:DX=4:DY=2:LINE(X1,Y1)-(X2,Y2):LINE(X2-DX, Y2+DY):LINE -(X2-DX,Y2-DY):LINE -(X2,Y2) 5120 FOR I=1 TO 6

5130 IF I> 4 GOTO 5230

5135 REM Y轴上画坐标刻度线(0~+5V) 5140 LINE (61,90-I*70/5)-(63,90-I*70/5) 5145 REM Y轴上画坐标刻度线(0~-5V) 5150 LINE (61,90+I*70/5)-(63,90+I*70/5)

5155 REM 数值的尺寸大小,X1为字宽,Y1为字高 5160 X1=6:Y1=4

5165 REM 数值的坐标位置,X,Y 5170 X=45

5180 Y=90-I*70/5

5185 REM 在Y轴正值方向上,分别画1,2,3,4 5190 ON I GOSUB 5290 ,5300,5310,5320 5200 Y=90+I*70/5

5205 REM 在Y轴负值方向上,分别画-1,-2,-3,-4 5210 ON I GOSUB 5290 ,5300,5310,5320 5220 X=30 :GOSUB 5380

5225 REM 在X轴上画刻度线

5230 LINE (60+I*60,90)-(60+I*60,88) 5240 Y=100 :X=60+I*60

5245 REM 在X轴上画1,2,3,4,5,6,

5250 ON I GOSUB 5290 ,5300,5310,5320,5330,5340 5260 NEXT I 5270 RETURN

5275 REM 5280~5380分别为画0~9,—,的子程序

5280 LINE (X-X1/2,Y-Y1/2)-(X+X1/2,Y-Y1/2):LINE-(X+X1/2,Y+Y1/2): LINE-(X-X1/2, Y+Y1/2): LINE-(X-X1/2,Y-Y1/2):RETURN 5290 LINE (X,Y-Y1/2)-(X,Y+Y1/2):RETURN 5300 LINE(X-X1/2,Y-Y1/2)-(X+X1/2,Y-Y1/2):LINE-(X+X1/2,Y):LINE-(X-X1/2,Y): LINE-(X-X1/2, Y+Y1/2):LINE-(X+X1/2,Y+Y1/2): RETURN 5310 LINE(X-X1/2,Y-Y1/2)-(X+X1/2,Y-Y1/2):LINE-(X+X1/2,Y):LINE-(X-X1/2,Y): LINE-(X+X1/2,Y):LINE-(X+X1/2,Y+Y1/2): LINE-(X-X1/2,Y+Y1/2):RETURN 5320 LINE(X-X1/2,Y-Y1/2)-(X-X1/2,Y):LINE-(X+X1/2,Y):LINE(X+X1/2,Y-Y1/2)- (X+X1/2,Y+Y1/2):RETURN 5330 LINE(X+X1/2,Y-Y1/2)-(X-X1/2,Y-Y1/2):LINE-(X-X1/2,Y):LINE-(X+X1/2,Y): LINE-(X+X1/2,Y+Y1/2): LINE-(X-X1/2,Y+Y1/2): RETURN 5340 LINE(X+X1/2,Y-Y1/2)-(X-X1/2,Y-Y1/2):LINE-(X-X1/2,Y):LINE-(X+X1/2,Y): LINE-(X+X1/2,Y+Y1/2): LINE-(X-X1/2,Y+Y1/2):LINE-(X-X1/2,Y):RETURN 5350 LINE(X-X1/2,Y-Y1/2)-(X+X1/2,Y-Y1/2): LINE-(X+X1/2,Y+Y1/2):RETURN

5360 LINE(X-X1/2,Y-Y1/2)-(X+X1/2,Y-Y1/2):LINE-(X+X1/2,Y+Y1/2):LINE-(X-X1/2, Y+Y1/2):LINE-(X-X1/2,Y-Y1/2): LINE(X-X1/2,Y)-(X+X1/2,Y):RETURN 5370 LINE(X+X1/2,Y-Y1/2)-(X-X1/2,Y-Y1/2):LINE-(X-X1/2,Y):LINE-(X+X1/2,Y): LINE(X+X1/2,Y-Y1/2)-(X+X1/2,Y+Y1/2): LINE-(X-X1/2,Y+Y1/2):RETURN 5380 LINE(X-X1/2,Y)-(X+X1/2,Y):RETURN

8.2.2 BASIC程序运行结果

程序运行启动封面如图8-1所示。

图8-1 程序运行启动封面

主菜单界面如图8-2所示。

图8-2 主菜单界面

A/D转换实验程序运行结果如图8-3所示。

图8-3 A/D转换实验程序运行结果

D/A转换实验程序运行结果如图8-4所示。

图8-4 D/A转换实验程序运行结果

D/A输出是A/D输入倍数实验程序运行结果如图8-5所示。

图8-5 D/A输出是A/D输入倍数实验程序运行结果

8.2.3 C源程序及说明

#include\ /*标准I/O库函数*/ #include\ /*字符屏幕函数*/ #include\图形功能函数*/ #include\ /* DOS接口函数*/

struct addanum_type /*定义结构体类型(实验参数)*/

{int adno; int sumno; int dano; int damv; float addak;int time;}addano;

/*AD通道adno,滤波sumno,DA通道dano,D/A电压damv,DA为AD倍数addak,延时time*/

int maxx,maxy; /*图形模式下最大有效的 X , Y 值*/

main()

{ face(); /*调封面*/

getaddanum(); /*调取磁盘文件参数*/ menu(); /*调主菜单*/ goodbyte(); /*调退出*/

restorecrtmode(); /*恢复原始屏幕模式*/ }

face() /*封面*/

{ int driver,mode; /*变量说明*/

driver=DETECT; /*图形驱动器代码,赋自动检测屏显硬件类型,*/ /*选用最大分辨率*/ mode=0; /*图形模式*/

initgraph(&driver,&mode,\初始化图形系统*/

maxx=getmaxx(); /*图形模式下最大有效的 X 值(639)*/

数学模型与计算机控制 第八章 AD、DA转换原理实验程序

2280NEXTJ2285REM从键盘上读字符,判断用户是否有指令,如果键入“Esc”键,则返回主菜单,如果键入“1”键,则重新做D/A转换实验,如果键入“2”键,则重新转换2290X$=INKEY$2300IFX$=CHR$(27)THENGOTO8002310IFX$=\2320IFX$=\2330GOTO2290<
推荐度:
点击下载文档文档为doc格式
6q0q830ilu28mwx1483k6i8ss1c8ox01bhi
领取福利

微信扫码领取福利

微信扫码分享