📄 spl10.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 + -