|
|
楼主 |
发表于 2026-10-4 14:38:12
|
显示全部楼层
模拟SPI没问题,硬件的有问题,为啥?
//0xaf,0xa8,0x3f,0xd3,0x00,0x40,0xa1,0xc8,0xda,
//0x12,0x81,0xff,0xa4,0xa6,0xd5,0xf0,0x8d,0x14,
#include <STC8051U.H>
sbit DC=P3^6;
sbit CS1=P3^7;
bit SPI_busy;
void SPI_Isr() interrupt 9{
SPSTAT = 0xc0; //清中断标志
CS1 = 1; //拉高从机的SS管脚
SPI_busy = 0;
}
void OLED_Write(bit dc,unsigned char byte){
DC=dc;
while(SPI_busy);
SPI_busy=1;
CS1=0; //拉低从机SS管脚
SPDAT=byte;
}
void main(){
unsigned char p,c;
EAXFR=1;WTST=0x00;CKCON=0x00;
P3M0=0x00;P3M1=0x00;
CS1=1;
SPI_busy = 0;
P_SW1 |= 0x0c;
SPCTL = 0xd0; //使能SPI主机模式
SPSTAT = 0xc0; //清中断标志
IE2|=0x02; //使能SPI中断
EA = 1;
OLED_Write(0,0xaf);
OLED_Write(0,0xa8);
OLED_Write(0,0x3f);
OLED_Write(0,0xd3);
OLED_Write(0,0x00);
OLED_Write(0,0x40);
OLED_Write(0,0xa1);
OLED_Write(0,0xc8);
OLED_Write(0,0xda);
OLED_Write(0,0x12);
OLED_Write(0,0x81);
OLED_Write(0,0xff);
OLED_Write(0,0xa4);
OLED_Write(0,0xa6);
OLED_Write(0,0xd5);
OLED_Write(0,0xf0);
OLED_Write(0,0x8d);
OLED_Write(0,0x14);
for(p=0;p<8;p++){
OLED_Write(0,0xb0+p);
OLED_Write(0,0x10);
OLED_Write(0,0x02);
for(c=0;c<128;c++){
OLED_Write(1,0xFF);
}
}
while(1);
}
|
|