- 打卡等级:初来乍到
- 打卡总天数:5
- 最近打卡:2025-03-21 20:15:20
注册会员
- 积分
- 161
|
void GPIO_Config(void)
{
//BL - P33, LCD_RES - P34, 推挽输出
P3M1 &= Bin(11100111);
P3M0 |= Bin(00011000);
//RS - P17, 推挽输出
P1M1 &= Bin(01111111);
P1M0 |= Bin(10000000);
//MOSI - P13, MISO - P14, SCLK - 15, 准双向
P1M1 &= Bin(11000111);
P1M0 &= Bin(11000111);
//CS - P54 (SS), 推挽
P5M1 &= Bin(11011111);
P5M0 |= Bin(00100000);
LCD_CS = 1;
}
void SPI_Init(void)
{
P_SW2 |= 0x80; //使能访问XFR, 特殊功能寄存器访问需要打开
SPI_SSIG_None(); //忽略 SS 引脚功能, 使用 MSTR 确定器件是主机还是从机
SPI_Enable(); //使能 SPI 功能
SPI_MSB_First(); //先发送/接收数据的高位(MSB)
SPI_Master(); //设置主机模式
SPI_SCLK_NormalH(); //SCLK 空闲时为高电平,SCLK 的前时钟沿为下降沿,后时钟沿为上升沿
SPI_PhaseH(); //数据在SCLK 的前时钟沿驱动,后时钟沿采样
SPI_Speed(0); //SPI 时钟频率选择, 0: 4T, 1: 8T, 2: 16T, 3: 32T, 当前设置为40M/4=10M
SPI_USE_P12P13P14P15(); //IO口切换
LCD_SCL = 1; //设置初始状态
LCD_SDA = 0;
SPSTAT = SPIF + WCOL; //清0 SPIF和WCOL标志
}
void SPI_WriteByte(u8 out)
{
SPDAT = out;
while((SPSTAT & SPIF) == 0) ;
SPSTAT = SPIF + WCOL; //清0 SPIF和WCOL标志
}
static void LcdWrCmd( u8 cmd )
{
LCD_CS = 0;
LCD_RS = 0; //写命令,RS=0
SPI_WriteByte(cmd);
LCD_CS = 1;
}
static void LcdWrDat( u8 dat )
{
LCD_CS = 0;
LCD_RS = 1; //写数据,RS=1
SPI_WriteByte(dat);
LCD_CS = 1;
}
|
|