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; }
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; }
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