- 打卡等级:以坛为家I
- 打卡总天数:220
- 最近打卡:2025-05-01 18:20:12
金牌会员
- 积分
- 1132
|
38-3.5寸ILI9486驱动TFT显示屏实验程序.zip
(36.5 KB, 下载次数: 16)
大佬们,我把 AI8051U 的《38-3.5寸ILI9486驱动TFT显示屏实验程序》移到STC32G12K128 上,屏幕是全白的。有大佬试过吗?
修改的地方:
0.1 AI8051U.h
0.2 STC32G.h
1.1 #define MAIN_Fosc 40000000L //AI8051U
1.2 #define MAIN_Fosc 24000000L //STC32G12K128
2.1
#define LCD_DataPortH P2 //高8位数据口,8位模式下只使用高8位
#define LCD_DataPortL P6 //低8位数据口,8位模式下低8位可以不接线
sbit LCD_RS = P4^5; //数据/命令切换
sbit LCD_WR = P3^6; //写控制
sbit LCD_RD = P3^7; //读控制
sbit LCD_CS = P0^5; //片选
sbit LCD_RESET = P4^7; //复位
2.2
#define LCD_DataPortH P6 //高8位数据口,8位模式下只使用高8位
#define LCD_DataPortL P2 //低8位数据口,8位模式下低8位可以不接线
sbit LCD_RS = P4^5; //数据/命令切换
sbit LCD_WR = P4^2; //写控制
sbit LCD_RD = P4^4; //读控制
sbit LCD_CS = P0^5; //片选 P3^4
sbit LCD_RESET = P4^3; //复位
3.1
void LCD_ReadReg(u16 LCD_Reg, u8 *Rval, int n)
{
LCD_WR_REG(LCD_Reg);
LCD_DataPortH = 0xFF; //拉高P6
LCD_DataPortL = 0xFF; //拉高P2
//P2口设置成输入口
P2M0=0x00;
P2M1=0xFF;
while (n--)
{
*(Rval++) = LCD_RD_DATA();
}
//P2口设置成推挽输出
P2M0=0xFF;
P2M1=0x00;
LCD_DataPortH = 0xFF; //拉高P6
LCD_DataPortL = 0xFF; //拉高P2
}
3.2
void LCD_ReadReg(u16 LCD_Reg, u8 *Rval, int n)
{
LCD_WR_REG(LCD_Reg);
LCD_DataPortH = 0xFF; //拉高P6
LCD_DataPortL = 0xFF; //拉高P2
//P6口设置成输入口
P6M0=0x00;
P6M1=0xFF;
while (n--)
{
*(Rval++) = LCD_RD_DATA();
}
//P6口设置成推挽输出
P6M0=0xFF;
P6M1=0x00;
LCD_DataPortH = 0xFF; //拉高P6
LCD_DataPortL = 0xFF; //拉高P2
}
4.1
u16 LCD_ReadPoint(u16 x, u16 y)
{
u16 color;
if (x>=lcddev.width||y>=lcddev.height)
{
return 0; //超过了范围,直接返回
}
LCD_SetCursor(x, y); //设置光标位置
LCD_ReadRAM_Prepare();
LCD_DataPortH = 0xFF; //拉高P6
LCD_DataPortL = 0xFF; //拉高P2
//P2口设置成输入口
P2M0=0x00;
P2M1=0xFF;
color = Lcd_RD_DATA_16Bit();
//P2口设置成推挽输出
P2M0=0xFF;
P2M1=0x00;
LCD_DataPortH = 0xFF; //拉高P6
LCD_DataPortL = 0xFF; //拉高P2
return color;
}
4.2
u16 LCD_ReadPoint(u16 x, u16 y)
{
u16 color;
if (x>=lcddev.width||y>=lcddev.height)
{
return 0; //超过了范围,直接返回
}
LCD_SetCursor(x, y); //设置光标位置
LCD_ReadRAM_Prepare();
LCD_DataPortH = 0xFF; //拉高P6
LCD_DataPortL = 0xFF; //拉高P2
//P6口设置成输入口
P6M0=0x00;
P6M1=0xFF;
color = Lcd_RD_DATA_16Bit();
//P6口设置成推挽输出
P6M0=0xFF;
P6M1=0x00;
LCD_DataPortH = 0xFF; //拉高P6
LCD_DataPortL = 0xFF; //拉高P2
return color;
}
5.1
void LCD_Set_GPIO(void)
{
//P2口设置成推挽输出
P2M0=0xff;
P2M1=0x00;
//P0.4口设置成高阻输入,P0.5推挽输出
P0M0=0x20;
P0M1=0x10;
//P1.4,P1.5口设置成高阻输入
P1M0=0x00;
P1M1=0x30;
//P6口设置成高阻输入(8bit)
P6M0=0x00;
P6M1=0xff;
//P3.7,P3.6口设置成推挽输出
P3M0=0xc0;
P3M1=0x00;
//P4.7,P4.5口设置成推挽输出
P4M0=0xa0;
P4M1=0x00;
//P5.3口设置成推挽输出
P5M0=0x08;
P5M1=0x00;
}
5.2
void LCD_Set_GPIO(void)
{
//P6口设置成推挽输出
P6M0=0xff;
P6M1=0x00;
//P3^4
P3M0=0x00;
P3M1=0x10;
//P0.4口设置成高阻输入,P0.5推挽输出
P0M0=0x20;
P0M1=0x10;
//P1.4,P1.5口设置成高阻输入
P1M0=0x00;
P1M1=0x30;
//P6口设置成高阻输入(8bit)
P2M0=0x00;
P2M1=0xff;
//P4.4,P4.2口设置成推挽输出
// P4M0=0x14;
// P4M1=0x00;
//P4.3,P4.5口设置成推挽输出
// P4M0=0x28;
// P4M1=0x00;
P4M0=0x3C;
P4M1=0x00;
//P3.4口设置成推挽输出
//P3M0=0x10;
//P3M1=0x00;
}
|
|