下面是io模拟spi的程序,如果用硬件spi要怎么实现?那位大神给我讲解一下
#define ROMIN_1 P1OUT|=BIT2 /*字库IC接口定义:Rom_IN就是字库IC的SI*/
#define ROMIN_0 P1OUT&=~BIT2
#define ROMOUT_1 P1OUT|=BIT1 /*字库IC接口定义:Rom_OUT就是字库IC的SO*/
#define ROMOUT_0 P1OUT&=~BIT1
#define ROMSCK_1 P1OUT|=BIT4 /*字库IC接口定义:Rom_SCK就是字库IC的SCK*/
#define ROMSCK_0 P1OUT&=~BIT4
#define ROMCS_1 P1OUT|=BIT0 /*字库IC接口定义Rom_CS就是字库IC的CS#*/
#define ROMCS_0 P1OUT&=~BIT0
/****送指令到字库IC***/
void send_command_to_ROM( uchar datu )
{
uchar i;
for(i=0;i<8;i++ )
{
if(datu&0x80)
ROMIN_1;
else
ROMIN_0;
datu = datu<<1;
ROMSCK_0;
ROMSCK_1;
}
}
/****从字库IC中取汉字或字符数据(1个字节)***/
static uchar get_data_from_ROM( )
{
uchar i;
uchar ret_data=0;
ROMSCK_1;
for(i=0;i<8;i++)
{
P1DIR|=BIT1;
ROMOUT_1;
//P2DIR&=~BIT1;
ROMSCK_0;
ret_data=ret_data<<1;
P1DIR&=~BIT1;
if(P1IN&BIT1)
ret_data=ret_data+1;
else
ret_data=ret_data+0;
//P2DIR|=BIT1;
ROMSCK_1;
}
return(ret_data);
}
/*从相关地址(addrHigh:地址高字节,addrMid:地址中字节,addrLow:地址低字节)中连续读出DataLen个字节的数据到 pBuff的地址*/
/*连续读取*/
void get_n_bytes_data_from_ROM(uchar addrHigh,uchar addrMid,uchar addrLow,uchar *pBuff,uchar DataLen )
{
uchar i;
ROMCS_0;
LCDCS_1;
ROMSCK_0;
send_command_to_ROM(0x03);
send_command_to_ROM(addrHigh);
send_command_to_ROM(addrMid);
send_command_to_ROM(addrLow);
for(i = 0; i < DataLen; i++ )
*(pBuff+i) =get_data_from_ROM();
ROMCS_1;
}
此帖出自
小平头技术问答
一周热门 更多>