- 打卡等级:常住居民I
- 打卡总天数:73
- 最近打卡:2025-07-31 23:57:42
已绑定手机
中级会员
- 积分
- 327
|
中景园的1.3寸屏怎么软件驱动成功点亮屏幕,改成硬件驱动.硬件驱动初始化赋值了多种模式均无法点亮屏幕
void SPI_Init(void)
{
SPDAT=0;//数据寄存器清0
SPCTL=0xDC; // 1101 11xx 主模式,使能,先传数据最高位,前时钟为下降沿,并在下降沿驱动数据,上升沿检测数据
/***************************************************************************************
SSIG:SS引脚功能控制位 D7
0:SS引脚确定器件是主机还是从机
1:忽略SS引脚功能,使用MSTR确定器件是主机还是从机
SPEN:SPI使能控制位 D6
0:关闭SPI功能
1:使能SPI功能
DORD:SPI数据位发送/接收的顺序 D5
0:先发送/接收数据的高位(MSB)
1:先发送/接收数据的低位(LSB)
MSTR:器件主/从模式选择位 设置主机模式: D4
若SSIG-0,则SS管脚必须为高电平且设置MSTR为1
若SSIG-1,则只需要设置MSTR为1(忽略SS管脚的电平)
设置从机模式: 若SSIG-0,则SS管脚必须为低电平(与MSTR位无关 若SSIG=1,则只需要设置MSTR为0(忽略SS管脚的电平)
CPOL:SPI时钟极性控制 D3
0:SCLK空闲时为低电平,SCLK的前时钟沿为上升沿,后时钟沿为下降沿
1:SCLK空闲时为高电平,SCLK的前时钟沿为下降沿,后时钟沿为上升沿
CPHA:SPI时钟相位控制 D2
0:数据SS管脚为低电平驱动第一位数据并在SCLK的后时钟沿改变数据,前时钟沿采样数据(必 须SSIG=0)
1:数据在SCLK的前时钟沿驱动,后时钟沿采样
SPR[1:0] SPI时钟频率选择 D1+D0
00 SYSCLK/4
01 SYSCLK/8
10 SYSCLK/16
11 SYSCLK/2
**************************************************************************************************************/
SPSTAT = 0xC0; // 清中断标志
P_SW1 = 0x04; // P_SW1 = 0x00;//SS_1/P1.2, MOSI/P1.3, MISO/P1.4, SCLK/P1.5
// P_SW1 = 0x04;//SS_2/P2.2, MOSI_2/P2.3, MISO_2/P2.4, SCLK_2/P2.5
// P_SW1 = 0x08;//SS_3/P7.4, MOSI_3/P7.5, MISO_3/P7.6, SCLK_3/P7.7
// P_SW1 = 0x0c;//SS_4/P3.5, MOSI_4/P3.4, MISO_4/P3.3, SCLK_4/P3.2
}
/******************************************************************************
函数说明:LCD串行数据写入函数
入口数据:dat 要写入的串行数据
返回值: 无
******************************************************************************/
void LCD_Writ_Bus(u8 dat)
{
LCD_CS_Clr(); // CS=0
SPDAT = dat;
while(!(SPSTAT & 0x80));
SPSTAT = 0xC0;
}
/******************************************************************************
函数说明:LCD写入数据
入口数据:dat 写入的数据
返回值: 无
******************************************************************************/
void LCD_WR_DATA8(u8 dat)
{
//LCD_DC_Set(); // DC =1
LCD_Writ_Bus(dat);
}
/******************************************************************************
函数说明:LCD写入数据
入口数据:dat 写入的数据
返回值: 无
******************************************************************************/
void LCD_WR_DATA(u16 dat)
{
//LCD_DC_Set(); // DC =1
LCD_Writ_Bus(dat>>8);
LCD_Writ_Bus(dat);
}
/******************************************************************************
函数说明:LCD写入命令
入口数据:dat 写入的命令
返回值: 无
******************************************************************************/
void LCD_WR_REG(u8 dat)
{
LCD_DC_Clr();//写命令
LCD_Writ_Bus(dat);
LCD_DC_Set();//写数据
}
以下是.H文件的部分
#define USE_HORIZONTAL 0 //设置横屏或者竖屏显示 0或1为竖屏 2或3为横屏
#define LCD_W 240
#define LCD_H 240
//sbit LCD_SCL=P2^5;//SCLK/scl
//sbit LCD_SDA=P2^4;//MOSI/sda
sbit LCD_RES=P2^0;//RES
sbit LCD_DC =P2^1;//DC
sbit LCD_CS =P2^2; //CS
sbit LCD_BLK=P1^4; //BLK
//-----------------LCD端口定义----------------
#define LCD_SCLK_Clr() LCD_SCL=0//SCL=SCLK
#define LCD_SCLK_Set() LCD_SCL=1
#define LCD_MOSI_Clr() LCD_SDA=0//SDA=MOSI
#define LCD_MOSI_Set() LCD_SDA=1
#define LCD_RES_Clr() LCD_RES=0//RES
#define LCD_RES_Set() LCD_RES=1
#define LCD_DC_Clr() LCD_DC=0//DC
#define LCD_DC_Set() LCD_DC=1
#define LCD_CS_Clr() LCD_CS=0//CS
#define LCD_CS_Set() LCD_CS=1
|
|