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

📄 spl10.c

📁 凌阳MP3 spSPCA755yuanma
💻 C
字号:
/*============================================================================
Copyright (c) 2001 Sunplus Technology Co., Ltd.
Module Name:          Spl10.C
Abstract:             Module related to SPL10 routine
Environment:          Keil C51 Compiler
Revision History:     11/13/2002    XYQ    created
=============================================================================*/
#include "general.h"
#include "spl10.h"

extern xdata    UCHAR   G_LCDTMoutCnt;

//=============================================================================
/*void SPL10_ZERO(void)
{
	XBYTE[0x2103] = XBYTE[0x2103] | 0x10;
	SPL10_ACK = 0;
	SPL10_STB = 0;
	SPL10_DAT = 0;
}*/
BIT SPL10_WaitAck(BIT tbtAck)
{
	unsigned char SPL10TMout; //chchang add
	SPL10TMout=0xff;
	while( SPL10_ACK != tbtAck ) // wait for ack.
	{
		SPL10TMout--;
		if( SPL10TMout==0 ) // if timeout, resume SPL10
		{
			SPL10_STB = 1;
			SPL10_DAT = 1;
			if(G_LCDTMoutCnt<10) G_LCDTMoutCnt++;
			return FAIL;
		}
	}
	return SUCCESS;
}
//=============================================================================
bit SPL10_HandShake()
{
	XBYTE[0x2103] = XBYTE[0x2103] | 0x28;//set P3.3(STB) P3.5(DAT) output
	XBYTE[0x2103] = XBYTE[0x2103] & 0xef;//set P3.4(ACK) input

	SPL10_ACK = 1;

	// sync. starts
	SPL10_STB = 1;

	SPL10_DAT = 0; // sync. bit low
	// wait for ack. low
	if( SPL10_WaitAck(0) == FAIL ) { return FAIL; }

	SPL10_DAT = 1; // sync. bit high
	// wait for ack. high
	if( SPL10_WaitAck(1) == FAIL ) { return FAIL; }
	
	// sync. end
	return SUCCESS;
}
//=============================================================================
bit SPL10_WriteOneByte(unsigned char Data)
{
	unsigned char i;
	for( i=0; i<8; i++ )
	{
/*		if( Data&0x80 )
			SPL10_DAT = 1;
		else
			SPL10_DAT = 0;
		Data <<= 1;
*/
		Data <<= 1;
		SPL10_DAT=CY;

		SPL10_STB = 0; // info SPL10 that data is ready
		// wait for ack. low
		if( SPL10_WaitAck(0) == FAIL )
		{
			return FAIL;
		}
		SPL10_STB = 1; // host is ready for transmitting next bit
		// wait for ack. high
		if( SPL10_WaitAck(1) == FAIL )
		{
			return FAIL;
		}
	}
	return SUCCESS;
}
//=============================================================================
bit SPL10_WriteLCD(unsigned char Address, unsigned char Data)
{
	//sync
	if(SPL10_HandShake() == FAIL) goto SPL10Error;
	// start sending data
	//write address
	if(SPL10_WriteOneByte(0xa0+Address) == FAIL) goto SPL10Error;
	//write data
	if(SPL10_WriteOneByte(Data) == FAIL) goto SPL10Error;

	SPL10_STB = 1;
	SPL10_DAT = 1;
	return SUCCESS;
SPL10Error:
	SPL10_STB = 1;
	SPL10_DAT = 1;
	//DbgPrint("W f!\n");
	return FAIL;
}
//=============================================================================
unsigned char SPL10_ReadKey(void)
{
	unsigned char i;
	unsigned char mbKey = 0x00;
	//sync
	if(SPL10_HandShake() == FAIL) goto SPL10Error;
	//write read key command 0xc0
	if(SPL10_WriteOneByte(0xc0) == FAIL) goto SPL10Error;

	XBYTE[0x2103] = XBYTE[0x2103] & 0xcf;//set P3.4(ACK) input, set P3.5(DAT) input

	// start reading data
	for( i=0; i<8; i++ )
	{
		SPL10_STB = 0; // data read request
		// wait for ack. low
		if( SPL10_WaitAck(0) == FAIL )
		{
			goto SPL10Error;
		}
		mbKey <<= 1;
		SPL10_DAT = 1;
		if( SPL10_DAT ) mbKey |= 0x01;
		SPL10_STB = 1; // host is ready to receive next bit
		// wait for ack. high
		if( SPL10_WaitAck(1) == FAIL )
		{
			goto SPL10Error;
		}
	}
	G_LCDTMoutCnt=0;
	SPL10_STB = 1;
	SPL10_DAT = 1;
	return mbKey;
SPL10Error:
	SPL10_STB = 1;
	SPL10_DAT = 1;
	//DbgPrint("K f!\n");
	return 0;
}

⌨️ 快捷键说明

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