下面是我加工的程序,但始终得不到正确的值。请各位帮下忙。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
void SPI_EWDS(void);
sbit CS=P1^0;//片选端
sbit SK=P1^1;//时钟
sbit DI=P1^2;//数据输入
sbit DO=P1^3;//数据输出
uchar wdata=0x02;
uchar Rbyte;
uchar SendBuffer[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void SPI_EWDS()
{
CS=0;
SK=0;
CS=1;
DI=1;
SK=1;
SK=0;
DI=0;
SK=1;
SK=0;
SK=1;
SK=0;
SK=1;
SK=0;
SK=1;
SK=0;
CS=0;
}
bit SPI_Read(uint addr)
{
uchar i;//Rbyte=0;
CS=0;
SK=0;
CS=1;
DI=1;
SK=1;
SK=0;
SK=1;
SK=0;
DI=0;
SK=1;
SK=0;
for(i=0;i<9;i++)
{
SK=0;
DI=addr&0x0100;//addr&0000 0001 0000 0000
SK=1;
addr<<=1;
}
SK=0;
SK=1;
for(i=0;i<8;i++)
{
Rbyte<<=1;
SK=0;
if(DO) Rbyte|=0x01;
SK=1;
}
CS=0;
SPI_EWDS();
return 1;
}
void SPI_EWEN(void)
{
CS=0;
SK=0;
CS=1;
DI=1;
SK=1;
SK=0;
DI=0;
SK=1;
SK=0;
SK=1;
SK=0;
DI=1;
SK=1;
SK=0;
SK=1;
SK=0;
CS=0;
}
void SPI_WRITE(uint addr,uchar Wbyte)
{
uchar i;
CS=0;
SK=0;
CS=1;
DI=1;
SK=1;
SK=0;
DI=0;
SK=1;
SK=0;
DI=1;
SK=1;
for(i=0;i<9;i++)
{
SK=0;
DI=addr&0x0100;//addr&0000 0001 0000 0000
SK=1;
addr<<=1;
}
for(i=0;i<8;i++)
{
SK=0;
DI=Wbyte&0x80;
SK=1;
Wbyte<<=1;
}
SK=0;
CS=0;
SPI_EWDS();
}
/*void SPI_WRAL()
{
CS=0;
SK=0;
CS=1;
DI=1;
SK=1;
SK=0;
DI=0;
SK=1;
SK=0;
SK=1;
SK=0;
SK=1;
SK=0;
DI=1;
SK=1;
SK=0;
CS=0;
}*/
/*void SPI_ERASE(uint addr)
{
uchar i;
CS=0;
SK=0;
CS=1;
DI=1;
SK=1;
SK=0;
SK=1;
SK=0;
SK=1;
SK=0;
for(i=0;i<9;i++)
{
SK=1;
DI=addr&0x0100;
addr<<=1;
SK=0;
}
CS=0;
}*/
/*void SPI_TERAL()
{
CS=0;
SK=0;
CS=1;
DI=1;
SK=1;
SK=0;
DI=0;
SK=1;
SK=0;
SK=1;
SK=0;
DI=1;
SK=1;
SK=0
DI=0;
SK=1;
SK=0;
CS=0;
}*/
void main()
{
// unsigned char i;
// unsigned char temp[10];
SPI_WRITE(0x0046,wdata);
SPI_Read(0x0046);
while(1)
{
P2=0xf0; //4位全部选通
P0=SendBuffer[Rbyte]; //显示一样的数据
/* for(i=0;i<10;i++)
{
P2=0xf0; //4位全部选通
P0=temp[]; //显示一样的数据
delay10ms();
}*/
}
}
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
void SPI_EWDS(void);
sbit CS=P1^0;//片选端
sbit SK=P1^1;//时钟
sbit DI=P1^2;//数据输入
sbit DO=P1^3;//数据输出
uchar wdata=0x02;//0到9
uchar Rbyte;
uchar SendBuffer[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void SPI_EWDS()
{
CS=0;
SK=0;
CS=1;
DI=1;
SK=1;
SK=0;
DI=0;
SK=1;
SK=0;
SK=1;
SK=0;
SK=1;
SK=0;
SK=1;
SK=0;
CS=0;
}
bit SPI_Read(uint addr)
{
uchar i;//Rbyte=0;
CS=0;
SK=0;
CS=1;
DI=1;
SK=1;
SK=0;
SK=1;
SK=0;
DI=0;
SK=1;
SK=0;
for(i=0;i<9;i++)
{
SK=0;
DI=addr&0x0100;//addr&0000 0001 0000 0000
SK=1;
addr<<=1;
}
SK=0;
SK=1;
for(i=0;i<8;i++)
{
Rbyte<<=1;
SK=0;
if(DO) Rbyte|=0x01;
SK=1;
}
CS=0;
SPI_EWDS();
return 1;
}
void SPI_EWEN(void)
{
CS=0;
SK=0;
CS=1;
DI=1;
SK=1;
SK=0;
DI=0;
SK=1;
SK=0;
SK=1;
SK=0;
DI=1;
SK=1;
SK=0;
SK=1;
SK=0;
CS=0;
}
void SPI_WRITE(uint addr,uchar Wbyte)
{
uchar i;
CS=0;
SK=0;
CS=1;
DI=1;
SK=1;
SK=0;
DI=0;
SK=1;
SK=0;
DI=1;
SK=1;
for(i=0;i<9;i++)
{
SK=0;
DI=addr&0x0100;//addr&0000 0001 0000 0000
SK=1;
addr<<=1;
}
for(i=0;i<8;i++)
{
SK=0;
DI=Wbyte&0x80;
SK=1;
Wbyte<<=1;
}
SK=0;
CS=0;
SPI_EWDS();
}
/*void SPI_WRAL()
{
CS=0;
SK=0;
CS=1;
DI=1;
SK=1;
SK=0;
DI=0;
SK=1;
SK=0;
SK=1;
SK=0;
SK=1;
SK=0;
DI=1;
SK=1;
SK=0;
CS=0;
}*/
/*void SPI_ERASE(uint addr)
{
uchar i;
CS=0;
SK=0;
CS=1;
DI=1;
SK=1;
SK=0;
SK=1;
SK=0;
SK=1;
SK=0;
for(i=0;i<9;i++)
{
SK=1;
DI=addr&0x0100;
addr<<=1;
SK=0;
}
CS=0;
}*/
/*void SPI_TERAL()
{
CS=0;
SK=0;
CS=1;
DI=1;
SK=1;
SK=0;
DI=0;
SK=1;
SK=0;
SK=1;
SK=0;
DI=1;
SK=1;
SK=0
DI=0;
SK=1;
SK=0;
CS=0;
}*/
void main()
{
// unsigned char i;
// unsigned char temp[10];
SPI_WRITE(0x0046,wdata);
SPI_Read(0x0046);
while(1)
{
P2=0xf0; //4位全部选通
P0=SendBuffer[Rbyte]; //显示一样的数据
}
} |