moring 发表于 2026-2-7 17:51:32

AI8051U如何配置SPI通讯

诚心请教:
我现在想用AI8051U配置双向SPI通讯,驱动LCD显示
SPI通讯分为8Bite,和9Bite
现在需要实现:
1、如果多字节传输,第一字节为9bit,后面都是8Bite
2、如果单字节传输为9bit
如51板代码:
void write_comm(uint command)
{

      serial1=command;
      serial1=serial1<<8;//这是寄存数据位移,可以不能考虑此行
      CS1=0;
      SDA=0;SCL=0;SCL=1;//发送状态位SDA=0为command   SDA=1为DATA
      //开始发送8Bite
      SDA=db7;SCL=0;SCL=1;
      SDA=db6;SCL=0;SCL=1;
      SDA=db5;SCL=0;SCL=1;
      SDA=db4;SCL=0;SCL=1;
      SDA=db3;SCL=0;SCL=1;
      SDA=db2;SCL=0;SCL=1;
      SDA=db1;SCL=0;SCL=1;
      SDA=db0;SCL=0;SCL=1;
      SCL=0;
      CS1=1;

}
void write_data(uint data)
{
      serial1=data;
      serial1=serial1<<8;//这是寄存数据位移,可以不能考虑此行
      CS1=0;
      SDA=1;SCL=0;SCL=1;////发送状态位SDA=0为command   SDA=1为DATA
      //开始发送8位数据         
      SDA=db7;SCL=0;SCL=1;//开始发送8Bite
      SDA=db6;SCL=0;SCL=1;
      SDA=db5;SCL=0;SCL=1;
      SDA=db4;SCL=0;SCL=1;
      SDA=db3;SCL=0;SCL=1;
      SDA=db2;SCL=0;SCL=1;
      SDA=db1;SCL=0;SCL=1;
      SDA=db0;SCL=0;SCL=1;
      SCL=0;
      CS1=1;

}

void Dual_channel(uchar H_data,uchar L_data)
{      
      //      数据赋值
      serial2=H_data;
      serial1=L_data;
      serial2=serial2<<8;
      serial1=serial1<<8;
      //开始发送传输数据
      CS1=0;//
      SDA=1;SCL=0;SCL=1;      SCL=0;//发送状态位SDA=0为command   SDA=1为DATA
      
      //开始发送16位数据,SDA发送高8位,RS发送低8位         
      SDA=db15;RS=db7;SCL=0;SCL=1;
      SDA=db14;RS=db6;SCL=0;SCL=1;
      SDA=db13;RS=db5;SCL=0;SCL=1;
      SDA=db12;RS=db4;SCL=0;SCL=1;
      SDA=db11;RS=db3;SCL=0;SCL=1;
      SDA=db10;RS=db2;SCL=0;SCL=1;
      SDA=db9;RS=db1;SCL=0;SCL=1;
      SDA=db8;RS=db0;SCL=0;SCL=1;
      SCL=0;
      CS1=1;
}

哪位大神帮忙指导一下,谢谢!

乘风飞扬 发表于 2026-2-10 14:19:19

你是通过IO口模拟,纯软件实现SPI通讯。
那可以写一个传输9bit数据的函数,例如:void write_9bit(uint data)
其中data是16位数据,传输其中需要的9bit内容即可。
需要传输9bit数据时调用write_9bit函数,需要传输8bit数据时调用write_data函数。
页: [1]
查看完整版本: AI8051U如何配置SPI通讯