videopc.c
来自「"DIGITAL SIGNAL PROCESSING WITH C AND TH」· C语言 代码 · 共 220 行
C
220 行
/*VIDEOPC.C-PC HOST PROGRAM FOR IMAGE PROCESSING PROJECT*/
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include "pc.c"
#include "pc_1.h"
#include "projcmd.h"
void send_cmd();
void init_graphic();
void transfer();
int pause = 0;
int update = 1;
void main()
{
init_evm();
init_graphic();
buffer = 256;
send_cmd();
for(;;)
{
if (!pause) transfer();
if (kbhit()) update = 1;
if (kbhit()) send_cmd();
}
}
void send_cmd()
{
int command;
command = get_command();
switch(command)
{
case RESET:
case LPA:
case LPB:
case LPC:
case SEL_RATE:
case INCREASE:
case DECREASE:
case AVER:
case EDGE1:
case EDGE2:
case L_PLUS:
case L_MINUS:
break;
case PAUSE: if (pause) {pause = 0; break;}
else {pause = 1; break;}
case QUIT:
closegraph();
exit(EXIT_SUCCESS);
break;
default:
command = NONE;
break;
}
if (command) send_command(command);
}
void init_graphic()
{
int m, loop;
int X0 = 65, Y0 = 50;
int X1 = X0 + 508, Y1 = Y0 + 265;
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "");
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
setbkcolor(BLUE);
rectangle(X0-1, Y0-1, X1+1, Y1+1);
settextjustify (CENTER_TEXT, CENTER_TEXT);
for (loop = 0; loop < 11; loop++)
{
int vert;
char string[4] = {0};
vert = Y0+5+loop*25;
itoa(100-(loop*10), string, 10);
line (X0-5, vert, X0, vert);
outtextxy (X0-20, vert, string);
}
settextstyle(DEFAULT_FONT, HORIZ_DIR, 2);
outtextxy (getmaxx()/2, Y0-30, "VIDEO LINE RATE PROCESSING");
settextstyle(DEFAULT_FONT, VERT_DIR, 1);
outtextxy (X0-50, Y0+128, "IRE units");
settextstyle(DEFAULT_FONT, HORIZ_DIR, 0);
settextjustify(LEFT_TEXT, CENTER_TEXT);
outtextxy (94, 360, " F1 RESET ");
outtextxy (94, 375, " F2 500K LPF ");
outtextxy (94, 390, " F3 1Meg LPF ");
outtextxy (94, 405, " F4 3Meg LPF ");
outtextxy (94, 420, " F5 AVERAGING");
outtextxy (94, 442, " LINE SEL ");
outtextxy (360,360, " F6 # LINES ");
outtextxy (360,375, " F7 EDGE1 ");
outtextxy (360,390, " F8 EDGE2 ");
outtextxy (360,405, " F9 PAUSE ");
outtextxy (360,420, "F10 QUIT ");
outtextxy (360,442, " RATE ");
line (108,432,111,432); // start of up arrow
line (107,433,112,433);
line (106,434,113,434);
line (109,431,109,439);
line (110,431,110,439);
line (109,446,109,454); // start of down arrow
line (110,446,110,454);
line (106,451,113,451);
line (107,452,112,452);
line (108,453,111,453);
line (372,435,380,435); // start of left arrow
line (372,436,380,436);
line (375,439,375,432);
line (374,438,374,433);
line (373,437,373,434);
line (372,450,380,450); // start of right arrow
line (372,451,380,451);
line (377,454,377,447);
line (378,453,378,448);
line (379,452,379,449);
rectangle (210,350,285,460);
rectangle (470,350,545,460);
setfillstyle(SOLID_FILL,LIGHTGRAY);
setviewport(X0, Y0, X1, Y1, 1);
outtextxy(150,128, "PRESS SPACE BAR TO CONTINUE");
}
void transfer()
{
int i, value, index, status, line, sel_rate, rate;
char string[4] = {0};
int temp[720];
while(READ_CMD);
WRITE_CMD(128);
while(READ_CMD != 128);
CLR_READ_ACK;
READ_DATA;
index = 0;
for(i = 0; i < buffer; i++)
{
do
{
UPDATE_STATUS0;
}
while(!IS_READ_ACK);
CLR_READ_ACK;
value = (int)READ_DATA;
temp[index++] = (value >> 8) & 255;
temp[index++] = value & 255;
}
WRITE_CMD(NONE);
bar(0,0,508,265);
setcolor(LIGHTGRAY);
lineto (0, (256- temp[0]));
setcolor(WHITE);
for (i = 0; i < 508; i++)
lineto (i, (256 - temp[i]));
if (update)
{
update = 0;
status = temp[508];
line = temp[509];
rate = temp[510];
sel_rate = temp[511];
setviewport(211,351,284,459,1);
bar(0,0,73,108);
if (status & 1) outtextxy(25, 24,"ON");
else outtextxy(25,24, "OFF");
status = status >> 1;
if (status & 1) outtextxy(25, 39,"ON");
else outtextxy(25,39, "OFF");
status = status >> 1;
if (status & 1) outtextxy(25, 54,"ON");
else outtextxy(25,54, "OFF");
status = status >> 1;
if (status & 1) outtextxy(25, 69,"ON");
else outtextxy(25,69, "OFF");
itoa(line, string, 10);
outtextxy (25,91, string);
setviewport(471,351,544,459,1);
bar (0,0,73,108);
itoa(sel_rate, string, 10);
outtextxy (33, 9, string);
status = status >> 1;
if (status & 1) outtextxy(25, 24,"ON");
else outtextxy(25, 24, "OFF");
status = status >> 1;
if (status & 1) outtextxy(25, 39,"ON");
else outtextxy(25, 39, "OFF");
rate = 60/rate;
if (rate > 1)
{
itoa(rate, string, 10);
outtextxy (25, 92, "1/ ");
outtextxy (45, 92, string);
}
else
{
rate = temp[510];
rate = rate/60;
if (!rate) rate = 1;
itoa(rate, string, 10);
outtextxy (33, 92, string);
}
setviewport(65,50,573,315,1);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?