|
#include "240128.h" 部分定义文件
#define SET_T6963_RST GPIO_SetBits(GPIOA, GPIO_Pin_8)
#define CLR_T6963_RST GPIO_ResetBits(GPIOA, GPIO_Pin_8)
//H命令选择端 L数据选择端
define SET_T6963_CD GPIO_SetBits(GPIOC, GPIO_Pin_9)
#define CLR_T6963_CD GPIO_ResetBits(GPIOC, GPIO_Pin_9)
//写数据 上升沿锁存
#define SET_T6963_WR GPIO_SetBits(GPIOC, GPIO_Pin_6)
#define CLR_T6963_WR GPIO_ResetBits(GPIOC, GPIO_Pin_6)
//读数据 低电平有效
#define SET_T6963_RD GPIO_SetBits(GPIOC, GPIO_Pin_7)
#define CLR_T6963_RD GPIO_ResetBits(GPIOC, GPIO_Pin_7)
//CS 使能IC信号 低电平激活IC
#define SET_T6963_CE GPIO_SetBits(GPIOC, GPIO_Pin_8)
#define CLR_T6963_CE GPIO_ResetBits(GPIOC, GPIO_Pin_8)
#define T6963_RST_OUT PAout(8)
#define T6963_RST_IN PAin(8)
#define T6963_CD_OUT PCout(9)
#define T6963_WR_OUT PCout(6)
#define T6963_RD_OUT PCout(7)
#define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n)
#define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n)
#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n)
#define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n)
#define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n)
#define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n)
#define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n)
#define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n)
#define SETDATAPORT_IN Set_GPIOD_Input()
void Set_GPIOD_Input(void);
#define SETDATAPORT_OUT Set_GPIOD_Output()
void Set_GPIOD_Output(void);
#define READLCDDATA (u8)(((GPIO_ReadInputData(GPIOD))>>8) &0xFF) //读L240128数据
#define WRITELCDDATA(N) (GPIO_Write(GPIOD,(GPIO_ReadInputData(GPIOD)&0x0000ffff)|(N<<8)))//写数据 到L240128
"240128.C主要代码"
/************************************************************
设置GPIOD P.8-P.15为输入模式
*************************************************************/
void Set_GPIOD_Input(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 |GPIO_Pin_10 |GPIO_Pin_11 |GPIO_Pin_12 |GPIO_Pin_13 |GPIO_Pin_14 |GPIO_Pin_15;
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
/************************************************************
设置GPIOD P.8-P.15为输出模式
*************************************************************/
void Set_GPIOD_Output(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 |GPIO_Pin_10 |GPIO_Pin_11 |GPIO_Pin_12 |GPIO_Pin_13 |GPIO_Pin_14 |GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
/*******************************************************************************
*******************************************************************************/
void LCD_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable GPIOD and GPIOE clocks */
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD, ENABLE);
/PD.8(D0), PE.9(D1), PD.10(D2), PD.11(D3), PD.12(D4), PD.13(D5), PD.14(D6), PD.15(D7) */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 |GPIO_Pin_10 |GPIO_Pin_11 |GPIO_Pin_12 |GPIO_Pin_13 |GPIO_Pin_14 |GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/* PC.7(RD), PC.9(CD), PC.8(CE), PC.6(WR) */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/* PA.8(RST) */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/* 延时函数 */
static void delay(uint n)
{
while(n--);
}
/**T6963C初始化**/
extern void SysLCD240128_DefinePortDrictionProc(void)
{
//CLR_T6963_RST;
//delay_ms(20);
SET_T6963_RST;
//delay_ms(20);
if (LCD240128TYPE == 0)
{
T6963_RST_OUT;
}
else if (LCD240128TYPE == 1)
{
T6963_RST_IN;
}
T6963_CD_OUT;
T6963_RD_OUT;
T6963_WR_OUT;
WRITELCDDATA(0xFF);
SETDATAPORT_OUT;
}
extern void LCD_PortInit(void)
{
SysLCD240128_DefinePortDrictionProc();
if (LCD240128TYPE == 0)
{
CLR_T6963_RST;
delay_ms(50);
SET_T6963_RST;
delay_ms(20);
}
else if (LCD240128TYPE == 1)
{
delay_ms(25);
}
SET_T6963_CD; //L数据选择短 ,H命令选择端
SET_T6963_RD; //读数据 低电平有效
SET_T6963_WR; //写数据 上升沿 锁存
CLR_T6963_CE; //CEà-μí ê1ÄüICDÅoÅ μíμçƽ¼¤»îIC
}
/************************************************************
写数据
*************************************************************/
static void WriteData(BYTE nData)
{
WRITELCDDATA(0xFF);
SETDATAPORT_OUT; //数据口设置成输出口
WRITELCDDATA(0);
CLR_T6963_CD;//L数据选择短 ,H命令选择端
CLR_T6963_CE;
SET_T6963_RD;//读数据 低电平有效
delay(18);
CLR_T6963_WR;//写数据 上升沿 锁存
WRITELCDDATA(nData);
delay(20);//Ô-à′10
SET_T6963_WR;//写数据 上升沿 锁存
SET_T6963_CE ;//使能拉低 低电平拉低激活IC
//delay(3);
SET_T6963_CD;
}
/************************************************************
写命令
*************************************************************/
static void WriteCmdParamProc(BYTE nCmd)
{
SETDATAPORT_OUT; //数据口设置成输出口
WRITELCDDATA(0);
SET_T6963_CD; //L数据选择短 ,H命令选择端
CLR_T6963_CE;
SET_T6963_RD; //读数据 低电平有效
// delay(6);//Ô-à′2
CLR_T6963_WR; //写数据 上升沿 锁存
//delay(5);//
WRITELCDDATA(nCmd) ;
delay(4);//
SET_T6963_WR; //写数据 上升沿 锁存
SET_T6963_CE ;
//SET_T6963_RD ;
SET_T6963_CD; //L数据选择短 ,H命令选择端
}
/************************************************************
读状态
*************************************************************/
static BYTE ReadStatusProc(void)
{
BYTE nStatus;
WRITELCDDATA(0xff);
SETDATAPORT_IN; //数据口设置成输入口
SET_T6963_CD;//L数据选择短 ,H命令选择端
delay(2); //
//CLR_T6963_CE;
//SET_T6963_WR; //写数据 上升沿 锁存
SET_T6963_RD;//读数据 低电平有效
// CLR_T6963_RD;//读数据 低电平有效
delay(2); //Ô-à′10
nStatus = READLCDDATA;
// SET_T6963_RD;//读数据 低电平有效
CLR_T6963_RD;//读数据 低电平有效
return nStatus;
}
/************************************************************
读数据
*************************************************************/
static BYTE ReadDataCmd()
{
uchar nRdData;
if (CheckStatusBit01() == 0)
{
return 1; //获取状态 如果错返回1
}
//禁用上拉
WRITELCDDATA(0xff);
SETDATAPORT_IN; //数据口为输入
SET_T6963_CD;//L数据选择短 ,H命令选择端
delay(2); //Ô-à′10
CLR_T6963_RD;//读数据 低电平有效
delay(2); //Ô-à′10
nRdData = READLCDDATA;
//SET_T6963_WR;
SET_T6963_RD; //读数据 低电平有效
// SET_T6963_CD; //L数据选择短 ,H命令选择端
return nRdData; //返回数据
}
/************************************************************
测忙
*************************************************************/
static BYTE CheckStatusBit01(void)
{
uichar i, nLCM_CW;
SETDATAPORT_IN;
SET_T6963_RST ;
// CLR_T6963_RST;
SET_T6963_CD; //H命令选择端,L数据选择端
delay(4); //
CLR_T6963_CE;
// SET_T6963_WR; //写数据 上升沿 锁存
//delay(6); //Ô-à′2
CLR_T6963_RD; //读数据 低电平有效
delay(4); //
for (i=CHECKSTATUSCOUNT; i>0; i--) 连续查询10次
{
nLCM_CW = ReadStatusProc();
if ((nLCM_CW & 0x03) == 0x03) // 读取状态S1, S0
break;
}
SET_T6963_RD; //读数据 低电平有效
return i;//加入返回0, Err
}
|
|