虚拟示波器设计的问题~~~~~~~~~~~~~~~~(急啊,解决了给500)

andysern 2002-07-14 01:12:21
(请高手看看啊,真的很急)
设计目的:
1.理解动态信号的数据采集技术以及实时信号的显示控制方法
2.掌握虚拟示波器的组成原理,程序设计方法
设计内容
1.搭建ADC0809数据采集线路,增加NE555等集成电路搭建方波,正玄波发生电路,利用MC4066及电阻搭建信号衰减电路,完整构成动态信号采集控制线路。
2.编写动态信号采集程序,完成虚拟示波器功能。程序要求:
a.按实际示波器要求编写操作界面,以及功能操作按钮。
b.中断方式采集动态模拟信号,并显示在示波器界面的波形窗口中,能通过控制界面上,下,左,右移动信号波形,具有信号消隐处理:能调节改变信号的扫描频率。;
c.能控制衰减电路控制输入信号幅度,数字显示信号幅度最大值。
d.具有虚拟示波器的一些附加功能,如:电源开关,数据存储回放,数据处理(如平滑)功能。
e.整个程序可在MS-DOS下用TURBO C实现,也可以在WINODS下用DELPHI,VB,VC等实现


因为比较急,所以希望高手能指点一二,下面有一段程序,如果不能直接编写的出来的话,可以参照一下,帮着改一点地方,拜托拉,高分送上~~~~~~~~~~

#define HOME 71
#define ENTER 28
#define UP 72
#define DOWN 80

#include <graphics.h>
#include <stdio.h>
#include <conio.h>
#include <process.h>
#include <stdlib.h>
#include <dos.h>
#include <ctype.h>

unsigned int xcount=1,dx,dy,endcount=400,i;
void interrupt far adc();
int x=60,y=100;
int xx1,xx2,yy1,yy2;
unsigned int result,data[500];
int get_key();
void draw();


main()
{
void(interrupt far *mode)();
int graphdriver=VGA;
int graphmode=VGAHI;
int key,key1;
int i=0;
int j;
int m=1;
int n=1;
int area[7][4]={{530,80,570,110},{530,125,570,155},{530,170,570,200},
{530,215,570,245},{530,260,570,290},{530,305,570,335},{530,350,570,380}};
initgraph(&graphdriver,&graphmode,"");
setbkcolor(1);
setfillstyle(1,3);
bar(50,50,590,410);
setcolor(15);
rectangle(50,50,590,410);
rectangle(520,60,580,400);
rectangle(60,60,510,400);
for(i=0;i<=6;i++)
rectangle(area[i][0],area[i][1],area[i][2],area[i][3]);
settextjustify(CENTER_TEXT,CENTER_TEXT);
setcolor(4);
outtextxy(550,95,"start");
outtextxy(550,140,"clear");
outtextxy(550,185,"broad");
outtextxy(550,230,"high");
outtextxy(550,275,"up");
outtextxy(550,320,"down");
outtextxy(550,365,"exit");
for(;;)
{
disable();
mode=getvect(0x0a);
setvect(0x0a,adc);
enable();
outportb(0x220,00);
while(!kbhit()){}
setvect(0x0a,mode);
key=get_key();
switch(key)
{
case HOME:
setcolor(15);
rectangle(area[i][0],area[i][1],area[i][2],area[i][3]);
i=0;
setcolor(4);
rectangle(area[i][0],area[i][1],area[i][2],area[i][3]);
break;
case UP:
i--;
setcolor(15);
if(i<0)
rectangle(area[0][0],area[0][1],area[0][2],area[0][3]);
if(i<0) i=6;
setcolor(4);
rectangle(area[i][0],area[i][1],area[i][2],area[i][3]);
if(i<6)
{
setcolor(15);
rectangle(area[i+1][0],area[i+1][1],area[i+1][2],area[i+1][3]);
}
break;
case DOWN:
i++;
if(i>6)
{setcolor(15);
rectangle(area[6][0],area[6][1],area[6][2],area[6][3]);
}
if(i>6) i=0;
setcolor(4);
rectangle(area[i][0],area[i][1],area[i][2],area[i][3]);
if(i>0)
{
setcolor(15);
rectangle(area[i-1][0],area[i-1][1],area[i-1][2],area[i-1][3]);
}
break;
case ENTER:
switch(i)
{
case 0: dx=6;
dy=1;
setcolor(5);
line(60,230,510,230);
adc();
break;
case 1: setfillstyle(1,3);
bar(61,61,509,399);
setcolor(15);
rectangle(60,60,510,400);
break;
case 2: if(m<=6)
{m++;
dx=dx*m;}
else m=1;
setcolor(5);
line(60,230,510,230);
adc();
break;
case 3: if(n<=3) {n++;dy=dy*n; }
else n=1;
setcolor(5);
line(60,230,510,230);
adc();
break;
case 4: if(y>0)
y=y-10;
else y=100;
setcolor(5);
line(60,230,510,230);
adc();
break;
case 5: if(y<400)
y=y+10;
else y=100;
setcolor(5);
line(60,230,510,230);
adc();
break;
case 6:
exit(0);
default:
break;
}
break;
default:
break;
} }
closegraph();
}
int get_key()
{
union REGS rg;
rg.h.ah=0;
int86(0x16,&rg,&rg);
return rg.h.ah;
}


void interrupt far adc()
{
disable();
result=inportb(0x220);
if(xcount<=endcount){
if (xcount==1)
moveto(x+dx,y+dy*result);
else
setcolor(5);
xx1=x+xcount*dx;
yy1=y+dy*result;
if(xx1>=510) xx1=510;
if(xx1<=x+dx) xx1=x+dx;
if(yy1>=400) yy1=400;
if(yy1<=60) yy1=60;
lineto(xx1,yy1);
data[xcount]=dy*result;
xcount++; }
else {
setcolor(3);
moveto(x+dx,y+data[1]);
for(i=2;i<=endcount;i++)
{
xx2=x+i*dx;
yy2=y+data[i];
if(xx2>=510) xx2=510;
if(xx2<=x+dx) xx2=x+dx;
if(yy2>=400) yy2=400;
if(yy2<=60) yy2=60;
lineto(xx2,yy2);
}
xcount=1;
setcolor(5);
}
outportb(0x220,00);
outportb(0x20,0x20);
enable();
}

...全文
72 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
andysern 2002-07-14
  • 打赏
  • 举报
回复
那你帮我解决一下,可以嘛?
sttony 2002-07-14
  • 打赏
  • 举报
回复
我想应该没有什么技术上难题,基本上就是从i/o读一组数,在到屏幕上显示.我的机器还在路上呢,
andysern 2002-07-14
  • 打赏
  • 举报
回复
如果可以的话,当然是完全的最好了,我一定给分~~~~~~~~~
但是也可以局部实现~~~~~只要可以,我就给分~
sttony 2002-07-14
  • 打赏
  • 举报
回复
这个程序已到了比较复杂的程度.你的意思是不是要完全完成?那实在有点大
andysern 2002-07-14
  • 打赏
  • 举报
回复
这个问题就这么难吗,怎么没有人回答啊~

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧