#include "stm32f10x.h"
#define ILI932X_CTR_PORT GPIOC // 控制管脚
#define ILI932X_BL GPIO_Pin_10;
#define ILI932X_CS GPIO_Pin_9 //片选
#define ILI932X_RS GPIO_Pin_6 //寄存器选择
#define ILI932X_WR GPIO_Pin_7 //写
#define ILI932X_RD GPIO_Pin_8 //读
#define ILI932X_RST GPIO_Pin_11 //复位
#define ILI932X_DATA_PORT GPIOD //16根数据线
#define Set_Cs ILI932X_CTR_PORT->BSRR = ILI932X_CS;//数据 高
#define Clr_Cs ILI932X_CTR_PORT->BRR = ILI932X_CS;//数据 低
#define Set_Rs ILI932X_CTR_PORT->BSRR = ILI932X_RS;//数据 高
#define Clr_Rs ILI932X_CTR_PORT->BRR = ILI932X_RS;//数据 低
#define Set_nWr ILI932X_CTR_PORT->BSRR = ILI932X_WR;//数据 高
#define Clr_nWr ILI932X_CTR_PORT->BRR = ILI932X_WR;//数据 低
#define Set_nRd ILI932X_CTR_PORT->BSRR = ILI932X_RD;//数据 高
#define Clr_nRd ILI932X_CTR_PORT->BRR = ILI932X_RD;//数据 低
#define Set_Rst ILI932X_CTR_PORT->BSRR = ILI932X_RST;//数据 高
#define Clr_Rst ILI932X_CTR_PORT->BRR = ILI932X_RST;//数据 低
#define Set_bl ILI932X_CTR_PORT->BSRR = ILI932X_BL;//数据 高
#define Clr_bl ILI932X_CTR_PORT->BRR = ILI932X_BL;//数据 低
void delay_ms(u16 n)
{
u32 x,y;
for(x=n; x>0; x--)
for(y=14396; y>0; y--);
}
void GPIO_Config()
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = ILI932X_CS | ILI932X_RS | ILI932X_WR | ILI932X_RD | ILI932X_RST|ILI932X_BL;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(ILI932X_CTR_PORT, &GPIO_InitStructure);
}
void LCD_WR_COM(u16 Index)
{
Clr_Cs;
Clr_Rs;
GPIO_Write(ILI932X_DATA_PORT,Index);
Clr_nWr;
Set_nWr;
Set_Rs;
Set_Cs;
}
void LCD_WR_Data(u16 data)
{
Clr_Cs;
Set_Rs;
GPIO_Write(ILI932X_DATA_PORT,data);
Clr_nWr;
Set_nWr;
Set_Cs;
}
//读寄存器
u16 LCD_ReadReg(u8 LCD_Reg)
{
u16 t=0;
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(ILI932X_DATA_PORT, &GPIO_InitStructure);
// LCD_WR_Data(0xffff);
LCD_WR_COM(LCD_Reg); //写入要读的寄存器号
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;// 上拉输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(ILI932X_DATA_PORT, &GPIO_InitStructure);
Set_Rs;
Clr_Cs;
Clr_nRd;
Set_nRd;
t=GPIOD->IDR; //数据输入
Set_Cs;
return t;
}
int main(void)
{
//开启响应时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOC, ENABLE); //时钟使能
GPIO_Config();
Set_nRd;
Set_nWr;
Set_Rs;
Set_Cs;
Set_bl;
delay_ms(10);
LCD_ReadReg(00);
}
|