Exemplo n.º 1
0
unsigned char myI2Cgetc(void)
{
	my_I2C_working_var = 0;
	mySCL = 0;WaitFall();
	mySDAd = 1;WaitRise();// Allow slave to control SDA
	mySCL = 1;WaitClock();
	if (mySDAr)	my_I2C_working_var|=0x80; 	// bit 7 first
	mySCL = 0;WaitFall();
	mySCL = 1;WaitClock();
	if (mySDAr)	my_I2C_working_var|=0x40;
	mySCL = 0;WaitFall();
	mySCL = 1;WaitClock();
	if (mySDAr)	my_I2C_working_var|=0x20;
	mySCL = 0;WaitFall();
	mySCL = 1;WaitClock();
	if (mySDAr)	my_I2C_working_var|=0x10;
	mySCL = 0;WaitFall();
	mySCL = 1;WaitClock();
	if (mySDAr)	my_I2C_working_var|=0x8;
	mySCL = 0;WaitFall();
	mySCL = 1;WaitClock();
	if (mySDAr)	my_I2C_working_var|=0x4;
	mySCL = 0;WaitFall();
	mySCL = 1;WaitClock();
	if (mySDAr)	my_I2C_working_var|=0x2;
	mySCL = 0;WaitFall();
	mySCL = 1;WaitClock();
	if (mySDAr)	my_I2C_working_var|=0x1;
	mySCL = 0;WaitFall();
	return my_I2C_working_var; 
}
Exemplo n.º 2
0
unsigned char _myI2Cputc(void)
{
	mySCL = 0;WaitFall();
	mySDAd = 1;WaitRise();
	if (!(my_I2C_working_var&0x80)){mySDAd = 0;WaitFall();} // bit 7 first
	mySCL = 1;WaitClock();
	mySCL = 0;WaitFall();
	mySDAd = 1;WaitRise();
	if (!(my_I2C_working_var&0x40)){mySDAd = 0;WaitFall();}				
	mySCL = 1;WaitClock();
	mySCL = 0;WaitFall();
	mySDAd = 1;WaitRise();
	if (!(my_I2C_working_var&0x20)){mySDAd = 0;WaitFall();}			
	mySCL = 1;WaitClock();
	mySCL = 0;WaitFall();
	mySDAd = 1;WaitRise();
	if (!(my_I2C_working_var&0x10)){mySDAd = 0;WaitFall();}				
	mySCL = 1;WaitClock();
	mySCL = 0;WaitFall();
	mySDAd = 1;WaitRise();
	if (!(my_I2C_working_var&0x8)){mySDAd = 0;WaitFall();}				
	mySCL = 1;WaitClock();
	mySCL = 0;WaitFall();
	mySDAd = 1;WaitRise();
	if (!(my_I2C_working_var&0x4)){mySDAd = 0;WaitFall();}				
	mySCL = 1;WaitClock();
	mySCL = 0;WaitFall();
	mySDAd = 1;WaitRise();
	if (!(my_I2C_working_var&0x2)){mySDAd = 0;WaitFall();}				
	mySCL = 1;WaitClock();
	mySCL = 0;WaitFall();
	mySDAd = 1;WaitRise();
	if (!(my_I2C_working_var&0x1)){mySDAd = 0;WaitFall();} 					
	mySCL = 1;WaitClock();
	mySCL = 0;WaitFall();

	// Check for Ack
	my_I2C_working_var = 0;
	mySDAd = 1;WaitRise(); 	// Slave will hold low for ack	

	if (!mySDAr)			
		{my_I2C_working_var |= 1;} // return 1 indicates ack

	mySCL = 1;WaitClock();
	return my_I2C_working_var; 
}
Exemplo n.º 3
0
int Game_Main(void *parms)
{
	// this is the workhorse of your game it will be called
	// continuously in real-time this is like main() in C
	// all the calls for you game go here!

	// game logic here...

	// 计时
	StartClock();
	// 清屏
	renderer.fillSurface(0);

	/*****************************
	处理输入
	*****************************/
	static DWORD m_deltaTime;

	DWORD curTime = timeGetTime();
	static DWORD lastTime = curTime;
	m_deltaTime = curTime - lastTime;
	lastTime = curTime;

	if (KEY_DOWN('W') || KEY_DOWN(VK_UP))
	{
		Vector4 delta = Vector4(0, 0, 0.01f * m_deltaTime, 1);
		Matrix4 mrot = camera.MatrixCamera.inverse();
		delta = delta * mrot;
		camera.position = delta;
	}

	if (KEY_DOWN('S') || KEY_DOWN(VK_DOWN))
	{
		Vector4 delta = Vector4(0, 0, -0.01f * m_deltaTime, 1);
		Matrix4 mrot = camera.MatrixCamera.inverse();
		delta = delta * mrot;
		camera.position = delta;
	}

	if (KEY_DOWN('A') || KEY_DOWN(VK_LEFT))
	{
		Vector4 delta = Vector4(-0.01f * m_deltaTime, 0, 0, 1);
		Matrix4 mrot = camera.MatrixCamera.inverse();
		delta = delta * mrot;
		camera.position = delta;
	}

	if (KEY_DOWN('D') || KEY_DOWN(VK_RIGHT))
	{
		Vector4 delta = Vector4(0.01f * m_deltaTime, 0, 0, 1);
		Matrix4 mrot = camera.MatrixCamera.inverse();
		delta = delta * mrot;
		camera.position = delta;
	}

	if (KEY_DOWN(VK_PRIOR))
	{
		Vector4 delta = Vector4(0, -0.01f * m_deltaTime, 0, 1);
		Matrix4 mrot = camera.MatrixCamera.inverse();
		delta = delta * mrot;
		camera.position = delta;
	}
	
	if (KEY_DOWN(VK_NEXT))
	{
		Vector4 delta = Vector4(0, 0.01f * m_deltaTime, 0, 1);
		Matrix4 mrot = camera.MatrixCamera.inverse();
		delta = delta * mrot;
		camera.position = delta;
	}

	static float ang;

	camera.CameraUpdateMatrix();

	rend_list.ResetList();
	// 表面加锁
	renderer.lockSurface();

	renderer.clearZBuffer();

	//开始
	if (rot_pause == 0){
		++ang;
	}
	if (ang >= 360)
		ang = 0;

	//foreach object
	{
		//g_Obj.ObjectWorldTransform();
		// 每次旋转一下物体

		Matrix4 mrot = Matrix4(Quaternion::Euler(0.0f, ang * kPi / 180, 0.0f * kPi / 180));//20.0f * kPi / 180
		g_Obj.ObjectTransform(mrot, RENDER_TRANSFORM_LOCALTOTRANS, 0);
		g_Obj.ObjectWorldTransform();
	}

	{
		//g_Obj.ObjectWorldTransform();
		// 每次旋转一下物体
		Matrix4 mrot = Matrix4(Quaternion::Euler(ang * kPi / 180, 0.0f, 0.0f));//20.0f * kPi / 180
		g_Obj_c.ObjectTransform(mrot, RENDER_TRANSFORM_LOCALTOTRANS, 0);
		g_Obj_c.ObjectWorldTransform();
	}
	
	{
		Matrix4 mrot = Matrix4(Quaternion::Euler(0.0f, 0.0f, ang * kPi / 180));//20.0f * kPi / 180
		g_Obj_s.ObjectTransform(mrot, RENDER_TRANSFORM_LOCALTOTRANS, 0);
		g_Obj_s.ObjectWorldTransform();
	}

	rend_list.InsertGameObject(g_Obj);
	rend_list.InsertGameObject(g_Obj_c);
	rend_list.InsertGameObject(g_Obj_s);

	// 背面消除
	rend_list.DeleteBackface(camera);


	// 相机变换
	rend_list.CameraTransform(camera);

	//剪裁
	rend_list.ClipPoly(camera);

	// 光照
	if (open_light == 1) {
		directional_light.LightTransform(camera.MatrixCamera);
		rend_list.ProcessLight(camera, ambient_light, directional_light);
	}

	// 投影变换
	rend_list.ProjectTransform(camera);

	// 视口变换
	rend_list.ScreenTransform(camera);

	draw_polys = renderer.drawRenderList(rend_list);

	// 表面解锁
	renderer.unlockSurface();

	// 输出
	renderer.flipSurface();

	// 锁帧
	WaitClock();

	// return success
	return(1);

} // end Game_Main