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

📄 gm_rwreg.c

📁 mcu for gm5621带遥控,键盘输入的单片机代码.供学习参考使用.谢谢.
💻 C
字号:
#include "board.h"
#include "debug.h"
#include "debugDef.h"
#include "misc.h"
#include "gm_rwreg.h"
#include "global.h"
#include "Power.h"

void gm_stop(void);

void gm_init(void)
{
	//Set_gm_CSZ();
	Set_gm_SCL();
	Set_gm_SDA();
	//Clr_gm_SDA();
}

Bool gm_start(GMBus_Direction direct)
{
	DWORD count;
  	Clr_gm_SCL(); // SCL=0
  		count = 0;
  	//Clr_gm_SDA();
	while(gm_SDAHi())
	{
		count++;
		if (count>=1000000)
			return FALSE;
	
	}
	

	
  	if (direct) // Read
    		Set_gm_SDA(); //SDA=1
  	else
    		Clr_gm_SDA(); //SDA=0
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
  		Set_gm_SCL();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
      		Clr_gm_SCL();	

		return TRUE;
}

void gm_stop(void)
{
	//printMsg("stop");
	//Set_gm_CSZ();
	Set_gm_SCL();
	Set_gm_SDA();
}
Bool gm_sendByte(BYTE value)
{
	Bool result;
	BYTE i;


	if (!gm_start(GM_WRITE))
	{
		#if DebugVersion
		printMsg("Write err");
		#endif
		
		return FALSE;
	}

	
  	for (i=0; i<8; i++)
    	{ 
    		(value&BIT7)?(Set_gm_SDA()):(Clr_gm_SDA());
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Set_gm_SCL();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		value<<=1;
      		Clr_gm_SCL();	
    	}
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
		Delay4us();
	gm_stop();
return result;

}


BYTE gm_readByte(void)
{

	BYTE i;
	BYTE value;

	value = 0x00;
	if (!gm_start(GM_READ))
	{
		#if DebugVersion
		printMsg("Read err");
		#endif
		
		return 0;
	}
	
	
  	for (i=0; i<8; i++)
    	{ 
    		value<<=1;
    		Set_gm_SDA();
		ForceDelay1ms(1);
		Set_gm_SCL();
		ForceDelay1ms(1);
		if (gm_SDAHi())
      			value|=BIT0;
      		Clr_gm_SCL();	
    	}
  	ForceDelay1ms(1);
	gm_stop();
	return value;

}

void readStatusHandler(void)
{
		BYTE status;
		//BYTE err;

	if (ReadStatusFlag)
	{
		//while(err--)
		//{
		status = gm_readByte();

		Gm_Status = status;
		//printData("the value of status is %d", status);

		Clr_ReadStatusFlag();
		//}
	

		if ((Gm_Status&0xc0) == 0xc0)
		{
		//Set_DoPowerHandlerFlag();
		//Set_InitShutdownCountFlag();
			#if DebugVersion
			printMsg("init power off counter");
			#endif
			if (DoPowerOnFlag)
			{
				cmd_Power_Handler = POWER_ON_SYSTEM;
				Clr_DoPowerOnFlag();
			}
			else	
				cmd_Power_Handler = INIT_POWER_OFF_COUNT;
		}
		else if ((Gm_Status&0xa0) == 0xa0)
		{
			#if DebugVersion
			printMsg("cancel power off counter");
			#endif
		//Set_DoPowerHandlerFlag();
		//Set_CancelShutdownCountFlag();
			cmd_Power_Handler = CANCEL_POWER_OFF_COUNT;
		}
		else if(Gm_Status&0x08)
		{
			Set_DoProtectionHandlerFlag();
			Pwd_Key_Count = 0;
			#if DebugVersion
			printMsg("Check Passwords");
			#endif
		}
	}
}

⌨️ 快捷键说明

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