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

📄 mainlib.c

📁 s1d13716的源码 windiws ce 或8位单片机
💻 C
字号:
#include "hal.h"
#include "datatype.h"
#include "chiplib.h"
#include "io.h"
#include "topc.h"
#include "car.h"
#include "key.h"
#include "JpegComm.h"

#define L1F10251
//#define L1F10253

#ifdef L1F10251
#define LCDWIDTH 128
#define LCDHEIGHT 128
#else
#define LCDWIDTH 128
#define LCDHEIGHT 160
#endif

#define CAMERAWIDTH 640
#define CAMERAHEIGHT 480

#define USINGSCALERATE 2

//#define JUSTPREVIEW
//#define JUSTDECODE
//#define JUSTMDECODE

extern void vInitKey( void );
extern void vEnableKey0Int();
extern void vDisableKey0Int();

extern unsigned char gucKeyCode;

void SetBright(Int32 value);
void SetContrastValue(UInt16 Value);
void BackLightOn(Boolean on);
static void prvSaveRegT( UInt8* pSaveReg );
static void prvRestoreRegT( UInt8* pSaveReg );
static UInt16 gCamEncodeRegIndex[] =
{
	REG0102_CMSIGNAL	,
	REG0108_CMCONTROL	,
	REG003C_LCDXFER	,
	REG0224_YUVWRSTART0,
};
#define CAMENC_REG_SIZE	(sizeof(gCamEncodeRegIndex) / sizeof( UInt16))

UInt8 saveReg[4];
unsigned long tmpjpg[12*1024*100/4];
PREVIEWINFO prvinfo;

extern unsigned char wow[];
extern unsigned char abcd[];
//extern unsigned char image[];

void main(void)
{
	UInt32 addr1,addr2;
	UInt32 ret;
	Boolean retjpg;
	UInt8 contrast;
	UInt32 EncodedSize;
	Boolean prvStarting;
	prvWorld JpegWorld;
	Int32 bright;
		
	JPEGINFO Jinfo;

#ifdef L1F10251
	contrast=0x3D;
#endif

#ifdef L1F10253
	contrast=0x3F;
#endif



	if (FALSE == halAcquireController())
		return;
	if (FALSE == halInitController(fINIT_NORMAL))//| fDONT_CLEAR_MEM
		return;

	BackLightOn(TRUE);
	
	halDelayUS(1000);
	
	addr1=GetStartAddress(cl_MAIN_WINDOW);
	addr2=GetStartAddress(cl_OVERLAY_WINDOW);

	halWriteDisplay8(addr2, 0xE0, LCDWIDTH*LCDHEIGHT);
	halWriteDisplay8(addr2+16*LCDWIDTH, 0x01, LCDWIDTH*(LCDHEIGHT-32));

	clStartOneFrameTransfer();
	halWriteData(sizeof(UInt16),addr1, car,LCDWIDTH*LCDHEIGHT*2);
	clStartOneFrameTransfer();

#ifdef JUSTDECODE
	jpegInit(&Jinfo);

	Jinfo.m_pBuf=(UInt8 *)wow;
	Jinfo.m_EncSize=3709;
	Jinfo.m_BufSize=80*1024;
	Jinfo.m_fMotionJPEG=FALSE;
	Jinfo.m_FrameCount=1;
	Jinfo.m_MemEnc=FALSE;
	Jinfo.m_fSOE=FALSE;
	Jinfo.m_Width=LCDWIDTH;
	Jinfo.m_Height=LCDHEIGHT;
	Jinfo.m_DesiredHeight=LCDHEIGHT/2;
	Jinfo.m_DesiredWidth=LCDWIDTH/2;
	Jinfo.m_XStart=0;
	Jinfo.m_RWidth=LCDWIDTH;
	Jinfo.m_YStart=0;
	Jinfo.m_RHeight=LCDHEIGHT;
	Jinfo.m_fAFAP=FALSE;
	Jinfo.m_fWrAlways=TRUE;
	Jinfo.m_HScaleRate=1;
	Jinfo.m_fIndScale=FALSE;
	Jinfo.m_VScaleRate=1;
	Jinfo.m_ScaleMode=0x01;
	Jinfo.m_YUVFmt=YUVFmt422;
	Jinfo.m_fFastCpu=TRUE;
	Jinfo.m_fScale=TRUE;
	previewStop();
	retjpg=jpegDecode(&Jinfo);
	ret=jpegGetLastError();	

	clStartOneFrameTransfer();

	while(1);
#endif

#ifdef JUSTMDECODE
	jpegInit(&Jinfo);

	Jinfo.m_pBuf=abcd;//(UInt8 *)image;
	Jinfo.m_EncSize=142588;//158932;
	Jinfo.m_BufSize=80*1024;
	Jinfo.m_fMotionJPEG=FALSE;
	Jinfo.m_FrameCount=1;
	Jinfo.m_MemEnc=FALSE;
	Jinfo.m_fSOE=FALSE;
	Jinfo.m_Width=LCDWIDTH;
	Jinfo.m_Height=LCDHEIGHT;
	Jinfo.m_DesiredHeight=LCDHEIGHT;
	Jinfo.m_DesiredWidth=LCDWIDTH;
	Jinfo.m_XStart=0;
	Jinfo.m_RWidth=LCDWIDTH;
	Jinfo.m_YStart=0;
	Jinfo.m_RHeight=LCDHEIGHT;
	Jinfo.m_fAFAP=FALSE;
	Jinfo.m_fWrAlways=TRUE;
	Jinfo.m_HScaleRate=1;
	Jinfo.m_fIndScale=FALSE;
	Jinfo.m_VScaleRate=1;
	Jinfo.m_ScaleMode=0x01;
	Jinfo.m_YUVFmt=YUVFmt422;
	Jinfo.m_fFastCpu=TRUE;
	Jinfo.m_fScale=TRUE;
	Jinfo.m_Delay=20000;
	previewStop();
	retjpg=jpegMDecode(&Jinfo);
	ret=jpegGetLastError();	

	clStartOneFrameTransfer();

	while(1);
#endif

	SetSwivelViewMode(cl_MAIN_WINDOW, 180);
	previewStart();

	prvinfo.XStart=0;
	prvinfo.YStart=0;
	prvinfo.Width=LCDWIDTH*2;
	prvinfo.Height=LCDHEIGHT*2;
	prvinfo.ScaleRate=2;
		
/*
	prvinfo.XStart=(CAMERAWIDTH-LCDWIDTH*USINGSCALERATE)/2;
	prvinfo.YStart=(CAMERAHEIGHT-LCDHEIGHT*USINGSCALERATE)/2;
	prvinfo.Width=LCDWIDTH*USINGSCALERATE;
	prvinfo.Height=LCDHEIGHT*USINGSCALERATE;
	prvinfo.ScaleRate=USINGSCALERATE;
*/
	previewZoomT(&prvinfo);

	prvStarting=TRUE;
		
	//SetSwivelViewMode(cl_MAIN_WINDOW, 90);
	//SetWinMirror(cl_MAIN_WINDOW, TRUE);
	
	halDelayUS(1000000);

#ifdef JUSTPREVIEW
	while(1);
#endif

	vInitKey(  );
	vEnableKey0Int();

	bright=0;

	gucKeyCode=NULLKEY;
	
	while(1)
	{

	switch(gucKeyCode)
		{
		case LEFTKEY:
			gucKeyCode=NULLKEY;
//			if(bright>0)
//				bright--;
//			SetBright(bright);
			if(contrast>0x1)
				contrast--;
			SetContrastValue(contrast);

			break;
		case RIGHTKEY:
			gucKeyCode=NULLKEY;
//			if(bright<0x3F)
//				bright++;
//			SetBright(bright);			

#ifdef L1F10251
			if(contrast<0x7F)
#endif

#ifdef L1F10253
			if(contrast<0xFF)
#endif
				contrast++;
			SetContrastValue(contrast);

			break;
		case UPKEY:
			gucKeyCode=NULLKEY;
			prvSaveWorld(&JpegWorld);

			memset ((UInt8 *)tmpjpg,0,176*240*4);

//			previewStop();
			jpegInit(&Jinfo);
/*			Jinfo.m_pBuf=(UInt8 *)tmpjpg;
			Jinfo.m_BufSize=sizeof(tmpjpg);
			Jinfo.m_fMotionJPEG=FALSE;
			Jinfo.m_FrameCount=1;
			Jinfo.m_MemEnc=TRUE;
			Jinfo.m_fSOE=FALSE;
			Jinfo.m_Width=128;
			Jinfo.m_Height=128;
			Jinfo.m_XStart=0;
			Jinfo.m_YStart=0;
			Jinfo.m_RWidth=128;
			Jinfo.m_RHeight=128;
			Jinfo.m_XEnd=127;
			Jinfo.m_YEnd=127;
			Jinfo.m_fAFAP=TRUE;
			Jinfo.m_fWrAlways=FALSE;
			Jinfo.m_HScaleRate=1;
			Jinfo.m_fIndScale=FALSE;
			Jinfo.m_VScaleRate=1;
			Jinfo.m_ScaleMode=0x01;
			Jinfo.m_YUVFmt=YUVFmt422;
			Jinfo.m_fFastCpu=TRUE;
			Jinfo.m_Delay=8000;
*/

			Jinfo.m_pBuf=(UInt8 *)tmpjpg;
			Jinfo.m_BufSize=12*1024*100;
			Jinfo.m_fMotionJPEG=TRUE;
			Jinfo.m_FrameCount=100;
			Jinfo.m_MemEnc=FALSE;
			Jinfo.m_fSOE=FALSE;
			Jinfo.m_Width=128*2;
			Jinfo.m_Height=128*2;
			Jinfo.m_XStart=0;
			Jinfo.m_YStart=0;
			Jinfo.m_RWidth=0;
			Jinfo.m_RHeight=0;
			Jinfo.m_XEnd=128*2-1;
			Jinfo.m_YEnd=128*2-1;
			Jinfo.m_fAFAP=TRUE;
			Jinfo.m_fWrAlways=TRUE;
			Jinfo.m_HScaleRate=2;
			Jinfo.m_fIndScale=TRUE;
			Jinfo.m_VScaleRate=2;
			Jinfo.m_ScaleMode=0x01;
			Jinfo.m_YUVFmt=YUVFmt422;
			Jinfo.m_fInfLoop=FALSE;
			Jinfo.m_Delay=10000;

/*		
			Jinfo.m_pBuf=(UInt8 *)tmpjpg;
			Jinfo.m_BufSize=5*1024*100;
			Jinfo.m_fMotionJPEG=FALSE;
			Jinfo.m_FrameCount=1;
			Jinfo.m_MemEnc=FALSE;
			Jinfo.m_fSOE=FALSE;
			Jinfo.m_Width=LCDWIDTH*USINGSCALERATE;
			Jinfo.m_Height=LCDHEIGHT*USINGSCALERATE;
			Jinfo.m_XStart=(CAMERAWIDTH-LCDWIDTH*USINGSCALERATE)/2;
			Jinfo.m_RWidth=LCDWIDTH*USINGSCALERATE;
			Jinfo.m_YEnd=(CAMERAHEIGHT-LCDHEIGHT*USINGSCALERATE)/2;
			Jinfo.m_RHeight=LCDHEIGHT*USINGSCALERATE;
			Jinfo.m_fAFAP=TRUE;
			Jinfo.m_fWrAlways=FALSE;
			Jinfo.m_HScaleRate=USINGSCALERATE;
			Jinfo.m_fIndScale=FALSE;
			Jinfo.m_VScaleRate=USINGSCALERATE;
			Jinfo.m_ScaleMode=0x01;
			Jinfo.m_YUVFmt=YUVFmt422;
			Jinfo.m_Delay=0;
*/
/*
			Jinfo.m_pBuf=(UInt8 *)tmpjpg;
			Jinfo.m_BufSize=176*240*4;
			Jinfo.m_fMotionJPEG=FALSE;
			Jinfo.m_FrameCount=1;
			Jinfo.m_MemEnc=FALSE;
			Jinfo.m_fSOE=FALSE;
			Jinfo.m_Width=640;
			Jinfo.m_Height=480;
			Jinfo.m_XStart=0;
			Jinfo.m_RWidth=640;
			Jinfo.m_YStart=0;
			Jinfo.m_RHeight=480;
			Jinfo.m_fAFAP=TRUE;
			Jinfo.m_fWrAlways=FALSE;
			Jinfo.m_HScaleRate=1;
			Jinfo.m_fIndScale=FALSE;
			Jinfo.m_VScaleRate=1;
			Jinfo.m_ScaleMode=0x01;
			Jinfo.m_YUVFmt=YUVFmt422;
*/		
			
			retjpg=jpegEncode(&Jinfo);

			prvRestoreWorld(&Jinfo,&JpegWorld);
			
			//halWriteReg8(REG022A_YOFFSET0, 0);
			ret=jpegGetLastError();	

			EncodedSize=Jinfo.m_EncSize;
				
			break;
		case DOWNKEY:
			gucKeyCode=NULLKEY;

			//prvSaveRegT(saveReg);
			//prvSaveWorld(&JpegWorld);
			
			jpegInit(&Jinfo);
			Jinfo.m_pBuf=(UInt8 *)tmpjpg;
			Jinfo.m_EncSize=EncodedSize;
			Jinfo.m_BufSize=80*1024;
			Jinfo.m_fMotionJPEG=FALSE;
			Jinfo.m_FrameCount=1;
			Jinfo.m_MemEnc=FALSE;
			Jinfo.m_fSOE=FALSE;
			Jinfo.m_Width=LCDWIDTH;
			Jinfo.m_Height=LCDHEIGHT;
			Jinfo.m_XStart=0;
			Jinfo.m_RWidth=LCDWIDTH;
			Jinfo.m_YStart=0;
			Jinfo.m_RHeight=LCDHEIGHT;
			Jinfo.m_fAFAP=FALSE;
			Jinfo.m_XEnd=LCDWIDTH-1;
			Jinfo.m_YEnd=LCDHEIGHT-1;
			Jinfo.m_fWrAlways=TRUE;
			Jinfo.m_HScaleRate=1;
			Jinfo.m_fIndScale=FALSE;
			Jinfo.m_VScaleRate=1;
			Jinfo.m_ScaleMode=0x01;
			Jinfo.m_YUVFmt=YUVFmt422;
			Jinfo.m_fFastCpu=TRUE;
			Jinfo.m_DesiredHeight=LCDHEIGHT;
			Jinfo.m_DesiredWidth=LCDWIDTH;
/*			
			Jinfo.m_pBuf=(UInt8 *)error;
			Jinfo.m_EncSize=9027;
			Jinfo.m_BufSize=80*1024;
			Jinfo.m_fMotionJPEG=FALSE;
			Jinfo.m_FrameCount=1;
			Jinfo.m_MemEnc=FALSE;
			Jinfo.m_fSOE=FALSE;
			Jinfo.m_Width=LCDWIDTH;
			Jinfo.m_Height=LCDHEIGHT;
			Jinfo.m_XStart=0;
			Jinfo.m_RWidth=LCDWIDTH;
			Jinfo.m_YStart=0;
			Jinfo.m_RHeight=LCDHEIGHT;
			Jinfo.m_fAFAP=FALSE;
			Jinfo.m_fWrAlways=TRUE;
			Jinfo.m_HScaleRate=1;
			Jinfo.m_fIndScale=FALSE;
			Jinfo.m_VScaleRate=1;
			Jinfo.m_ScaleMode=0x01;
			Jinfo.m_YUVFmt=YUVFmt422;
			Jinfo.m_fFastCpu=TRUE;
*/						
			retjpg=jpegDecode(&Jinfo);
			ret=jpegGetLastError();	

			break;

		case OKKEY:
			if(prvStarting)
			{
				previewStop();
				//halDelayUS(500000);
				prvStarting=FALSE;
				halWriteDisplay16(addr1, 0x07E0, LCDWIDTH*LCDWIDTH);
				clStartOneFrameTransfer();				
			}
			else
			{
				previewStart();
				previewZoom(&prvinfo);
				prvStarting=TRUE;
			}
			gucKeyCode=NULLKEY;
			break;
			
		}
	
	}
}

void SetBright(Int32 value)
{
	halWriteReg8(REG007F_PWMWHITECYCLE, value);
}

void SetContrastValue(UInt16 Value)
{
	
	halWriteReg8(REG003C_LCDXFER, 0x00);

#ifdef L1F10251
	while ((halReadReg8(REG0038_LCDSTATUS) & 0x01))
		continue;
	halWriteReg8(REG0030_LCDCMD0, 0x25);
	halWriteReg8(REG0031_LCDCMD1, 0x00);
	
	while ((halReadReg8(REG0038_LCDSTATUS) & 0x01))
		continue;
	halWriteReg8(REG0032_LCDWRITE0, Value);
	halWriteReg8(REG0033_LCDWRITE1, Value>>8);

	while ((halReadReg8(REG0038_LCDSTATUS) & 0x01))
		continue;
	halWriteReg8(REG0030_LCDCMD0, 0x2c);
	halWriteReg8(REG0031_LCDCMD1, 0x00);
#endif

#ifdef L1F10253
	while ((halReadReg8(REG0038_LCDSTATUS) & 0x01))
		continue;
	halWriteReg8(REG0030_LCDCMD0, 0x2A);
	halWriteReg8(REG0031_LCDCMD1, 0x00);
	
	while ((halReadReg8(REG0038_LCDSTATUS) & 0x01))
		continue;
	halWriteReg8(REG0030_LCDCMD0, Value);
	halWriteReg8(REG0031_LCDCMD1, Value>>8);
#endif


	halWriteReg8(REG003C_LCDXFER, 0x01);
}


void BackLightOn(Boolean on)
{
	halWriteReg8(REG0070_PWMCTRL0,0x05);
	halWriteReg8(REG007F_PWMWHITECYCLE,0x00);//0x3F);      
	halWriteReg8(REG0072_PWMCTRL1,0x01); 
}

void prvSaveRegT( UInt8* pSaveReg )
{
	UInt8 i;

	for ( i = 0; i < CAMENC_REG_SIZE; ++i, ++pSaveReg )
	{
		*pSaveReg = halReadReg8( gCamEncodeRegIndex[ i ] );
	}
}

void prvRestoreRegT( UInt8* pSaveReg )
{
	UInt8 i;

	for ( i = 0; i < CAMENC_REG_SIZE; ++i, ++pSaveReg )
	{
		halWriteReg8( gCamEncodeRegIndex[ i ], *pSaveReg );
	}
}

⌨️ 快捷键说明

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