📄 6963c(090511).c
字号:
void DisplayDots(uchar DotByte,uchar n)
{
uchar i,j;
LocateXY(0,0,Graphic);
LcmWriteCommand(0xB0); //进入自动写
for(i=0;i<LcmWidthDots/n;i++)
{
for(j=0;j<LcmLengthDots/8*n;j++)
{
CheckAutoWrite();
LcmWriteData(DotByte);
}
DotByte=~DotByte;
}
LcmWriteCommand(0xB2); //退出自动写
}
//显示点阵子函数
void DisplayDots2(uchar DotByte)
{
uchar i,j;
LocateXY(0,0,Graphic);
LcmWriteCommand(0xB0); //进入自动写
for(i=0;i<LcmWidthDots/8;i++) //64/8=8LcmWidthDots
{
for(j=0;j<LcmLengthDots/8;j++) //240/8=30LcmLengthDots
{
CheckAutoWrite();
LcmWriteData(DotByte);
}
}
LcmWriteCommand(0xB2); //退出自动写
}
//显示一副图片函数
void DisplayOneBmp(const unsigned char *puts)
{
unsigned char i,j;
unsigned int X=0;
LocateXY(0,0,Graphic);
LcmWriteCommand(0xB0); //进入自动写
for(i=0;i<40;i++) //LcmWidthDots->30
{
for(j=0;j<64;j++)
{
CheckAutoWrite();
LcmWriteData(puts[X]);
X++;
}
}
LcmWriteCommand(0xB2); //退出自动写
}
//反显一副图片函数
void ReverseOneBmp( void )
{ //利用数据一次读写操作
unsigned char i,j,X; //只能对一段RAM取反
LocateXY(0,0,Graphic);
for(i=0;i<40;i++) //LcmWidthDots ->30//30
{
for(j=0;j<64;j++)//LcmLengthDots/8
{
LcmWriteCommand(0xC5); //读数据,地址不变
CheckRWCD();
X = LcmReadData();
X = ~X;
LcmWriteCommandWith1Par(X,0xC0);
}
}
}
void ShowChar(unsigned char lin,unsigned char column,unsigned int hzcode) //图形方式显示1个英文字符
{
unsigned char i;
unsigned int StartAddr;
StartAddr=0x800+lin*LineChar + column; //图形显示RAM区为0800开始
for(i=0;i<16;i++)
{
LcmWriteCommandWith2Par( (unsigned char)(StartAddr), (unsigned char)(StartAddr>>8), 0x24);
LcmWriteCommandWith1Par( CharTable[hzcode][i], 0xc4); //数据写地址不变
StartAddr=StartAddr + LineChar;
}
}
// GPIO_WriteBit(GPIOG,GPIO_Pin_12,(BitAction)(0)); // CS=0;
/*******************************************************************************
* Function Name : STM3210E_LCD_Init
* Description : Initializes the LCD.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void STM3210E_LCD_Init(void)
{
/* 配置LCD控制线 --------------------------------------------*/
LCD_CtrlLinesConfig();
/* 测试 control/data 的正确性 -------------------------————————------------*/
/* 配置FSMC外设 -------------------------————————------------*/
LCD_FSMCConfig();
/* 开始初始化LCD ----------------------------------------------------*/
LcmInit();
}
/*******************************************************************************
* Function Name : LCD_CtrlLinesConfig
* Description : Configures LCD Control lines (FSMC Pins) in alternate function
Push-Pull mode.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void LCD_CtrlLinesConfig(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* 使能 FSMC, GPIOD, GPIOE, GPIOF, GPIOG 和 AFIO 时钟 */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |
RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG |
RCC_APB2Periph_AFIO, ENABLE);
/* 设置 PD.00(D2), PD.01(D3) , PD.14(D0), PD.15(D1) 复用推挽输出 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // PD4--NOE PD5--NWE
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出 GPIO_Mode_AF/Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/* 设置 PD.04(FSMC_NOE), PD.05(FSMC_NWE), 推挽输出 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4| GPIO_Pin_5 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // PD4--NOE PD5--NWE
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出 GPIO_Mode_AF/Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
/* Set PE.07(D4), PE.08(D5), PE.09(D6), PE.10(D7) as alternate function push pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出 GPIO_Mode_AF/Out_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 ; //PE6 软件复位
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 复用推挽输出 GPIO_Mode_AF/Out_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure); //PE6 软件复位
/* Set PF.00(FSMC_A0 (RS)) as alt ernate function push pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PF0 数据/指令选择
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出 GPIO_Mode_AF/Out_PP;
GPIO_Init(GPIOF, &GPIO_InitStructure);
/* Set PG.12(FSMC_NE4 (LCD/CS)) as alternate function push pull - CE3(LCD /CS) */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //PG12 片选
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 复用推挽输出 GPIO_Mode_AF/Out_PP;
GPIO_Init(GPIOG, &GPIO_InitStructure);
/* Set PE.5((LCD/FS)) as alternate function push pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //PE5 字体选择
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 复用推挽输出 GPIO_Mode_AF/Out_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
}
/*******************************************************************************
* Function Name : LCD_FSMCConfig
* Description : Configures the Parallel interface (FSMC) for LCD(Parallel mode)
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void LCD_FSMCConfig(void)
{
FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
FSMC_NORSRAMTimingInitTypeDef p;
/*-- FSMC Configuration ------------------------------------------------------*/
/* FSMC_Bank1_NORSRAM4 timing configuration */
p.FSMC_AddressSetupTime = 1;
p.FSMC_AddressHoldTime = 0;
p.FSMC_DataSetupTime = 5;
p.FSMC_BusTurnAroundDuration = 0;
p.FSMC_CLKDivision = 0;
p.FSMC_DataLatency = 0;
p.FSMC_AccessMode = FSMC_AccessMode_B;
/* FSMC_Bank1_NORSRAM4 configured as follows:
- Data/Address MUX = Disable
- Memory Type = SRAM
- Data Width = 8bit
- Write Operation = Enable
- Extended Mode = Disable
- Asynchronous Wait = Disable */
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4; //bank1_4
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b; //8位数据线
FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;//禁止成组读取
FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable; //
FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
/* Enable FSMC_Bank1_NORSRAM4 */
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -