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

📄 ccd.cpp

📁 和老师合作的半成品
💻 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 + -