📄 ccd.cpp
字号:
//=============================================
//////////// 添加对应的头文件 ////////////
//=============================================
//添加标准头文件
#include "StdAfx.h"
#include "..\resource.h"
#include "..\USB\USB.h" //USB通信
#include "..\CCD\CCD.h" //CCD操作
//==================================================================================================
///////////////////////////////////// WCCD类定义及初始化 //////////////////////////////////////
//==================================================================================================
WCCD::WCCD( VOID )
{
}
WCCD::~WCCD( VOID )
{
}
//==================================================================================================
/////////////////////////////// 通过USB操作CCD获取采样值并刷新 ///////////////////////////////
//==================================================================================================
BOOL APIENTRY WCCD::CCDTest( DWORD dwTest1 )
{
//==========================================================================================
//////////////////////////////////// 设置局部变量 ////////////////////////////////////
//==========================================================================================
DWORD i = 0;
for ( i=0;i<4096;i++ )
{
byRxData[i] = 0;
}
//==========================================================================================
//////////////////////////////////// 设置局部变量 ////////////////////////////////////
//==========================================================================================
USBGetCCDValue( dwTest ); //通过获取CCD采样值
CCDValueProcess( &byRxData[0],4096 ); //对CCD采样值进行处理
FlashScreen( 0 ); //数据处理后刷新屏幕
//==========================================================================================
////////////////////////////////////// 函数结束 //////////////////////////////////////
//==========================================================================================
return 1;
}
//==================================================================================================
///////////////////////////////////// 通过获取CCD采样值 //////////////////////////////////////
//==================================================================================================
DWORD APIENTRY WCCD::USBGetCCDValue( DWORD dwTest1 )
{
//==========================================================================================
//////////////////////////////////// 设置局部变量 ////////////////////////////////////
//==========================================================================================
//SYS
DWORD dwTemp = 0;
//USB
WUSB wUSB;
DWORD dwUSBRes = 0;
LPDWORD lpUSBStatus = (LPDWORD)(&byRxData[0]);
//==========================================================================================
//////////////////////////////////// 设置CCD操作 /////////////////////////////////////
//==========================================================================================
byTxData[0] = 0x03; //设置CCD采样
//==========================================================================================
//////////////////////////////////// USB数据交换 /////////////////////////////////////
//==========================================================================================
//调用USB函数交换数据,发送 16字节,接收 4096字节
dwUSBRes = wUSB.USB_ExchangeData( &byTxData[0], 16, &byRxData[0], 4096 );
//检查USB返回值
//wUSB.USB_CheckReturnValue( dwUSBRes );
//==========================================================================================
////////////////////////////////// 步进电机操作结束 //////////////////////////////////
//==========================================================================================
return 1;
}
//==================================================================================================
//////////////////////////////////// 对CCD采样值进行处理 /////////////////////////////////////
//==================================================================================================
DWORD APIENTRY WCCD::CCDValueProcess( LPBYTE lpCCDBuf,DWORD dwCCDBufSize )
{
//==========================================================================================
//////////////////////////////////// 设置局部变量 ////////////////////////////////////
//==========================================================================================
DWORD i = 0;
DWORD j = 0;
WORD wCCDRate = 0;
WORD wCCDValueH = 0x03FF; //白色
WORD wCCDValueL = 0x01F1; //黑色
BYTE byTemp = 0;
//==========================================================================================
//////////////////////////// 将CCD电压比率转换为256灰度值 ////////////////////////////
//==========================================================================================
/*
for ( i=0;i<2048;i++ )
{
//获取电压比率,16位
wCCDRate = *( ((LPWORD)lpCCDBuf) + i );
//裁减范围至 wCCDValueH ~ wCCDValueL
if ( wCCDRate > wCCDValueH )
{
wCCDRate = wCCDValueH;
}
if ( wCCDRate < wCCDValueL )
{
wCCDRate = wCCDValueL;
}
//范围 缩小至 0x0000~0x01FF
wCCDRate = wCCDRate - wCCDValueL;
//范围 缩小至 0x00~0xFF
wCCDRate = wCCDRate >> 1;
//黑白颠倒
byTemp = (BYTE)wCCDRate;
//byTemp = 0xFF - byTemp;
//拷贝回原Buff,0~2047
*( lpCCDBuf + i ) = byTemp;
}
*/
//==============================================================================================
//////////////////////////// 为缩小显示范围,将每4个象素合并 /////////////////////////////
//==============================================================================================
for ( i=0,j=0;i<512;i++,j=j+4 )
{
//统计四个象素
byTemp = *( lpCCDBuf + j + 0 );
wCCDRate = byTemp;
byTemp = *( lpCCDBuf + j + 1 );
wCCDRate += byTemp;
byTemp = *( lpCCDBuf + j + 2 );
wCCDRate += byTemp;
byTemp = *( lpCCDBuf + j + 3 );
wCCDRate += byTemp;
//求四个象素的平均值
wCCDRate = wCCDRate >> 2;
//平均值拷贝回原位
byTemp = (BYTE)wCCDRate;
*( lpCCDBuf + i ) = byTemp;
}
//==========================================================================================
////////////////////////////////////// 函数结束 //////////////////////////////////////
//==========================================================================================
return 1;
}
//==================================================================================================
///////////////////////////////////// 数据处理后刷新屏幕 /////////////////////////////////////
//==================================================================================================
DWORD APIENTRY WCCD::FlashScreen( DWORD dwTest1 )
{
//==========================================================================================
//////////////////////////////////// 设置局部变量 ////////////////////////////////////
//==========================================================================================
//==========================================================================================
////////////////////////////////////// 函数结束 //////////////////////////////////////
//==========================================================================================
return 1;
}
//==================================================================================================
////////////////////////////////////////// 程序结束 //////////////////////////////////////////
//==================================================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -