⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plot.cpp

📁 data matrix编码程序 将字符串转换为二维码黑白图形
💻 CPP
字号:
//---------------------------------------------------------------------------


#pragma hdrstop

#include "Plot.h"
#include <windows.h>
#include "Winio.h"
#include <Forms.hpp>
//---------------------------------------------------------------------------

#pragma package(smart_init)
unsigned short PORT_A = 0x378;
unsigned short PORT_B = 0x37A;
unsigned short PORT_C = 0x379;
unsigned short PORT_D = 0x37B;

//PORT_A=0x278写信号  -- 控制标记头移动
unsigned long PLOT_Y_CP   = 0x01;
unsigned long PLOT_Z_DIR  = 0x02;
unsigned long PLOT_Y_DIR  = 0x04;
unsigned long PLOT_Z_CP   = 0x08;
unsigned long PLOT_X_CP   = 0x10;
unsigned long PLOT_READY  = 0x20;
unsigned long PLOT_X_DIR  = 0x40;

//PORT_B=0x27A写信号  -- 控制标记头打印
unsigned long PLOT_DCF    = 0x01; //IsVer2=0, 0=Pendown; IsVer2=1, 1=PenDown
unsigned long PLOT_FINISH = 0x02;

//PORT_C=0x279 读信号
unsigned long PLOT_PEN_IS_DOWN      = 0x04;
unsigned long PLOT_IS_STOP          = 0x08;
unsigned long PLOT_X_IS_NOT_ORIGIN  = 0x10;
unsigned long PLOT_Y_IS_NOT_ORIGIN  = 0x20;
unsigned long PLOT_PLOT_IS_START    = 0x40;
unsigned long PLOT_SWITCH_IS_UP     = 0x40;
unsigned long PLOT_Z_IS_NOT_ORIGIN  = 0x80;

//PORT_D = 0x27B 读信号
unsigned long PLOT_IS_VERSION2      = 0x80;


TPlot::TPlot() {
  InitializeWinIo();
  unsigned long value = 0;
  GetPortVal(PORT_D, &value, 1);
  FIsVer2 = value & PLOT_IS_VERSION2 ? 1 : 0;
  PenUp();
  X = 0;
  Y = 0;
  DelayTime = 100;
}

TPlot::~TPlot() {
  ShutdownWinIo();
}

void TPlot::PenUp(void) {
  unsigned long value;
  value = FIsVer2 ? 0x0000 : 0x0001;
  SetPortVal(PORT_D, value, 1);
}

void TPlot::PenDown(void) {
  unsigned long value;
  value = FIsVer2 ? 0x0001 : 0x0000;
  SetPortVal(PORT_D, value, 1);
}

void TPlot::MoveTo(unsigned long x, unsigned long y) {
  if (!x) {
    do {
      RelMove(-1, 0);
    } while (IsXOrigin());
  }
  if (!y) {
    do {
      RelMove(0, -1);
    } while (IsYOrigin());
  }
}

void TPlot::RelMove(long dx, long dy) {
  long cx = 0, cy = 0;
  do {
    if (abs(cy * dx) > abs(cx * dy)) {
      if (dx > 0) {
        MoveRight();
        cx++;
      }
      if (dx < 0) {
        MoveLeft();
        cx--;
      }
    }
    else {
      if (dy > 0) {
        MoveDown();
        cy++;
      }
      if (dy < 0) {
        MoveUp();
        cy--;
      }
    }
  } while ((cx == dx) && (cy ==dy));
}

bool TPlot::IsXOrigin() {
  unsigned long value = 0;
  GetPortVal(PORT_C, &value, 1);
  value &= PLOT_X_IS_NOT_ORIGIN;
  return (value == 0);
}

bool TPlot::IsYOrigin() {
  unsigned long value = 0;
  GetPortVal(PORT_C, &value, 1);
  value &= PLOT_Y_IS_NOT_ORIGIN;
  return (value == 0);
}

void TPlot::MoveLeft() {
  SetPortVal(PORT_A, PLOT_X_CP, 1);
  Delay();
  SetPortVal(PORT_A, 0, 1);
  Delay();
  X--;
}

void TPlot::MoveRight() {
  SetPortVal(PORT_A, PLOT_X_CP | PLOT_X_DIR, 1);
  Delay();
  SetPortVal(PORT_A, PLOT_X_DIR, 1);
  Delay();
  X++;
}

void TPlot::MoveUp() {
  SetPortVal(PORT_A, PLOT_Y_CP, 1);
  Delay();
  SetPortVal(PORT_A, 0, 1);
  Delay();
  Y--;
}

void TPlot::MoveDown() {
  SetPortVal(PORT_A, PLOT_Y_CP | PLOT_Y_DIR, 1);
  Delay();
  SetPortVal(PORT_A, PLOT_Y_DIR, 1);
  Delay();
  Y++;
}

void TPlot::Delay() {
  TimeCount = 0;
  while (TimeCount < DelayTime) {
    Application->ProcessMessages();
  }
}

void TPlot::Test() {
  unsigned long w = 1000, h = 1000;
  PenUp();
  MoveTo(0, 0);
  PenDown();
  MoveTo(w, 0);
  MoveTo(w, h);
  MoveTo(0, h);
  MoveTo(0, 0);
  for (unsigned long i = 0; i <= w; i++) {
    SetPortVal(PORT_A, PLOT_X_DIR | PLOT_X_CP | PLOT_Y_DIR | PLOT_Y_CP, 1);
    Delay();
    X++;
    Y++;
  }
  PenUp();
  MoveTo(w, 0);
  PenDown();
  for (unsigned long i = 0; i <= w; i++) {
    SetPortVal(PORT_A, PLOT_X_CP | PLOT_Y_DIR | PLOT_Y_CP, 1);
    Delay();
    X--;
    Y++;
  }
  PenUp();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -