LCD_FSMC
/**************************************************************************
* 文件名:LCD_FSMC.h *
* 编写人:离逝的风 *
* 更新时间:2018.12.15 *
* 说明:此文件属于开源,所有权对任何人开放 *
* 如有问题请联系邮箱:1477153217@qq.com *
* 使用步骤: *
* 1.在主函数中调用LcdInit()函数对LCD初始化即可使用其他函数 *
* 说明:程序中采用的是ILI9325液晶控制器,若不是该控制器,则需要在初始化中 *
* 修改替换成相对应得控制器初始化程序 *
***************************************************************************/ #ifndef __LCD_FSMC_H_
#define __LCD_FSMC_H_ #include "stm32f10x.h"
/*################################FSMC引脚说明###############################################
FSMC_NOE-----PD4 FSMC_NE1/FSMC_NCE2-----PD7 FSMC_NE2/FSMC_NCE3----PG9
FSMC_NWE-----PD5 FSMC_NCE4_1/FSMC_NE3---PG10 FSMC_NCE4_2------PG11
FSMC_NE4-----PG12 FSMC_A0----PF0 FSMC_A1----PF1 FSMC_A2----PF2 FSMC_A3----PF3
FSMC_A4----PF4 FSMC_A5----PF5 FSMC_A6----PF12 FSMC_A7----PF13
FSMC_A8----PF14 FSMC_A9----PF15 FSMC_A10---PG0 FSMC_A11---PG1
FSMC_A12---PG2 FSMC_A13---PG3 FSMC_A14---PG4 FSMC_A15---PG5
FSMC_A16---PD11 FSMC_A17---PD12 FSMC_A18---PD13 FSMC_A19---PE3
FSMC_A20---PE4 FSMC_A21---PE5 FSMC_A22---PE6 FSMC_A23---PE2
FSMC_A24---PG13 FSMC_A25---PG14 FSMC_D0----PD14 FSMC_D1----PD15 FSMC_D2----PD0 FSMC_D3----PD1
FSMC_D4----PE7 FSMC_D5----PE8 FSMC_D6----PE9 FSMC_D7----PE10
FSMC_D8----PE11 FSMC_D9----PE12 FSMC_D10---PE13 FSMC_D11---PE14
FSMC_D12---PE15 FSMC_D13---PD8 FSMC_D14---PD9 FSMC_D15---PD10 FSMC_INT2--PG6 FSMC_INT3--PG77 FSMC_NIORD-PF6 FSMC_NREG--PF7
FSMC_NIOWR-PF8 FSMC_CD----PF9 FSMC_INTR--PF10 FSMC_NIOS16-PF11
FSMC_CLK---PD3 FSMC_NWAIT-PD6 FSMC_NBL0--PE0 FSMC_NBL1---PE1
*********************************************************************************************/ /*################################寄存器说明##################################################
BTCR[0]---FSMC_BCR1 BTCR[1]---FSMC_BTR1
BTCR[2]---FSMC_BCR2 BTCR[3]---FSMC_BTR2
BTCR[4]---FSMC_BCR3 BTCR[5]---FSMC_BTR3
BTCR[6]---FSMC_BCR4 BTCR[7]---FSMC_BTR4 BWTR[0]---FSMC_BWTR1 BWTR[2]---FSMC_BWTR2
BWTR[4]---FSMC_BWTR3 BWTR[6]---FSMC_BWTR4 BWTR[1] BWTR[3] BWTR[5]保留
*********************************************************************************************/
/*###################################下面是LCD的引脚连线#####################################*/
//片选线 1:连接在块1 2:连接在块2 3:连接在块3 4:连接在块4
#define LCD_CS 4
//数据和命令选择线 0-25:分别连接在A0-A25上
#define LCD_RS 10
//背光线
#define LCD_BLK RCC->APB2ENR|=(1<<3);GPIOB->CRL&=0xffffffF0;GPIOB->CRL|=0X00000003;
//背光控制
#define LCD_BLK_ON GPIOB->BRR|=(1<<0);
#define LCD_BLK_OFF GPIOB->BSRR|=(1<<0); /*###################################下面函数供用户调用#####################################*/
//液晶初始化函数
void LcdInit(void);
//液晶填充函数
void LcdFill(unsigned long color); #endif //FILE END
/**************************************************************************
* 文件名:LCD_FSMC.c *
* 编写人:离逝的风 *
* 更新时间:2018.12.15 *
* 说明:此文件属于开源,所有权对任何人开放 *
* 如有问题请联系邮箱:1477153217@qq.com *
* 使用步骤: *
* 1.在主函数中调用LcdInit()函数对LCD初始化即可使用其他函数 *
* 说明:程序中采用的是ILI9325液晶控制器,若不是该控制器,则需要在初始化中 *
* 修改替换成相对应得控制器初始化程序 *
***************************************************************************/ #include "LCD_FSMC.h" /************************************************************************************
函数:LcdDelay
参数:time时间长短
返回值:无
说明:初始化使用的延时函数
*************************************************************************************/
void LcdDelay(unsigned int time)
{
unsigned int x,y;
for(x=;x<time;x++)
for(y=;y<;y++);
} /************************************************************************************
函数:LcdWriteData
参数:Data:写入的数据
返回值:无
说明:液晶屏写数据函数
*************************************************************************************/
void LcdWriteData(unsigned int Data)
{
*(volatile unsigned long *)(0x6c000000+0X000007FE+(<<(LCD_RS+)))=Data;
}
/************************************************************************************
函数:LcdWriteCom
参数:Com:写入的指令
返回值:无
说明:液晶屏写指令函数
*************************************************************************************/
void LcdWriteCom(unsigned int Com)
{
*(volatile unsigned long *)(0x6c000000+0X000007FE)=Com;
} /************************************************************************************
函数:LcdWriteDatCom
参数:Com:写入的指令 Data:写入的数据
返回值:无
说明:液晶屏写指令和数据函数
*************************************************************************************/
void LcdWriteDatCom(unsigned int Com,unsigned int Data)
{
LcdWriteCom(Com);
LcdWriteData(Data);
} /************************************************************************************
函数:LcdInit
参数:无
返回值:无
说明:初始化液晶屏
*************************************************************************************/
void LcdInit(void)
{
RCC->AHBENR |= << ; //开启FSMC是时钟
RCC->APB2ENR |= << | << | << | << ; // 开启GPIO B,D,E,G引脚时钟
RCC->APB2ENR |= << ; //开启引脚复用时钟
//GPIOB配置为复用推完输出
GPIOB->CRL &= 0xfffffff0;
GPIOB->CRL |= 0x00000003;
//GPIOD配置为复用推完输出
GPIOD->CRL &= 0xff00ff00;
GPIOD->CRL |= 0x00bb00bb;
GPIOD->CRH &= 0x00fff000;
GPIOD->CRH |= 0xbb000bbb;
//GPIOE配置为复用推完输出
GPIOE->CRL &= 0x0fffffff;
GPIOE->CRL |= 0xb0000000;
GPIOE->CRH &= 0x00000000;
GPIOE->CRH |= 0xbbbbbbbb;
//GPIOG配置为复用推完输出
GPIOG->CRL &= 0xfffffff0;
GPIOG->CRL |= 0x0000000b;
GPIOG->CRH &= 0xfff0ffff;
GPIOG->CRH |= 0x000b0000; FSMC_Bank1->BTCR[(LCD_CS-)*] &= 0x00000000;
FSMC_Bank1->BTCR[(LCD_CS-)*] |= << | << | 0x01 << | 0x00 << | << ; FSMC_Bank1->BTCR[(LCD_CS-)*+] &= 0x00000000;
FSMC_Bank1->BTCR[(LCD_CS-)*+] |= 0x00 << | 0x0000 << | 0x0f << | 0x01; FSMC_Bank1E->BWTR[(LCD_CS-)*] &= 0x00000000;
FSMC_Bank1E->BWTR[(LCD_CS-)*] |= 0x00 << | 0x0000 << | 0x03 << | 0x00; /*******下面为LCD初始化**************/
LcdWriteDatCom(0xE5, 0x78f0); // set SRAM internal timing
LcdWriteDatCom(0x01, 0x0100); // set Driver Output Control
LcdWriteDatCom(0x02, 0x0700); // set 1 line inversion
LcdWriteDatCom(0x03, 0xe030); // set GRAM write direction and BGR=1.
LcdWriteDatCom(0x04, 0x0000); // Resize register
LcdWriteDatCom(0x08, 0x0207); // set the back porch and front porch
LcdWriteDatCom(0x09, 0x0000); // set non-display area refresh cycle ISC[3:0]
LcdWriteDatCom(0x0A, 0x0000); // FMARK function
LcdWriteDatCom(0x0C, 0x0001); // RGB interface setting
LcdWriteDatCom(0x0D, 0x0000); // Frame marker Position
LcdWriteDatCom(0x0F, 0x0000); // RGB interface polarity
//*************Power On sequence ****************//
LcdWriteDatCom(0x10, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB
LcdWriteDatCom(0x11, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
LcdWriteDatCom(0x12, 0x0000); // VREG1OUT voltage
LcdWriteDatCom(0x13, 0x0000); // VDV[4:0] for VCOM amplitude
LcdWriteDatCom(0x07, 0x0001);
LcdDelay(); // Dis-charge capacitor power voltage
LcdWriteDatCom(0x10, 0x1090); // SAP, BT[3:0], AP, DSTB, SLP, STB
LcdWriteDatCom(0x11, 0x0227); // Set DC1[2:0], DC0[2:0], VC[2:0]
LcdDelay(); // Delay 50ms
LcdWriteDatCom(0x12, 0x001F); // 0012
LcdDelay(); // Delay 50ms
LcdWriteDatCom(0x13, 0x1500); // VDV[4:0] for VCOM amplitude
LcdWriteDatCom(0x29, 0x0027); // 04 VCM[5:0] for VCOMH
LcdWriteDatCom(0x2B, 0x000D); // Set Frame Rate
LcdDelay(); // Delay 50ms
LcdWriteDatCom(0x20, 0x0000); // GRAM horizontal Address
LcdWriteDatCom(0x21, 0x0000); // GRAM Vertical Address
// ----------- Adjust the Gamma Curve ----------//
LcdWriteDatCom(0x30, 0x0000);
LcdWriteDatCom(0x31, 0x0707);
LcdWriteDatCom(0x32, 0x0307);
LcdWriteDatCom(0x35, 0x0200);
LcdWriteDatCom(0x36, 0x0008);
LcdWriteDatCom(0x37, 0x0004);
LcdWriteDatCom(0x38, 0x0000);
LcdWriteDatCom(0x39, 0x0707);
LcdWriteDatCom(0x3C, 0x0002);
LcdWriteDatCom(0x3D, 0x1D04);
//------------------ Set GRAM area ---------------//
LcdWriteDatCom(0x50, 0x0000); // Horizontal GRAM Start Address
LcdWriteDatCom(0x51, 0x00EF); // Horizontal GRAM End Address
LcdWriteDatCom(0x52, 0x0000); // Vertical GRAM Start Address
LcdWriteDatCom(0x53, 0x013F); // Vertical GRAM Start Address
LcdWriteDatCom(0x60, 0xA700); // Gate Scan Line
LcdWriteDatCom(0x61, 0x0001); // NDL,VLE, REV
LcdWriteDatCom(0x6A, 0x0000); // set scrolling line
//-------------- Partial Display Control ---------//
LcdWriteDatCom(0x80, 0x0000);
LcdWriteDatCom(0x81, 0x0000);
LcdWriteDatCom(0x82, 0x0000);
LcdWriteDatCom(0x83, 0x0000);
LcdWriteDatCom(0x84, 0x0000);
LcdWriteDatCom(0x85, 0x0000);
//-------------- Panel Control -------------------//
LcdWriteDatCom(0x90, 0x0010);
LcdWriteDatCom(0x92, 0x0600);
LcdWriteDatCom(0x07, 0x0133); // 262K color and display ON
LcdWriteDatCom(0x00,0x0022);//
LcdDelay(); } /************************************************************************************
函数:LcdFill
参数:color:颜色值,16bit
返回值:无
说明:整屏填充颜色
*************************************************************************************/
void LcdFill(unsigned long color)
{
unsigned int x,y;
LcdWriteDatCom(0x50, ); // Horizontal GRAM Start Address
LcdWriteDatCom(0x51, ); // Horizontal GRAM End Address
LcdWriteDatCom(0x52, ); // Vertical GRAM Start Address
LcdWriteDatCom(0x53, ); // Vertical GRAM Start Address
for(x=;x<;x++)
for(y=;y<;y++)
{
LcdWriteDatCom(0x22,color);
} } //FILE END
LCD_FSMC的更多相关文章
随机推荐
- 利用Access-Control-Allow-Origin响应头解决跨域请求原理
传统的跨域请求没有好的解决方案,无非就是jsonp和iframe,随着跨域请求的应用越来越多,W3C提供了跨域请求的标准方案(Cross-Origin Resource Sharing).IE8.Fi ...
- webpack多入口优化
最近接手的项目是公司之前搭的多页面应用脚手架,然后到现在入口页面大大小小超过半百了,然后每次更新完配置之后,重启页面就贼拉卡,实在太影响开发效率了,于是开始优化呗. 最开始发现如果你想要让加载速度变快 ...
- Python 解决命令行删除、退格乱码问题
安装了python 在命令行界面无法进行删除.退格 1 安装readline模块 两种方式:yum install -y readline-devel readline 或者 下载文件https:/ ...
- CSDN网站阅读更多:实现原理
一 设计案例 现在很多网站都增加了阅读更多功能.以CSDN为例,分析其实现原理. 二 设计原理 1 内容区的初始高度是固定的. 2 背景渐变的操作区,遮盖在内容区上面 3 点击按钮时,解除内容区的高度 ...
- 100-days: twenty-one
Title: Not so fantastic(<口>极好的,棒的): can Japan end its love affair(喜爱,热爱) with plastic(塑料)? A : ...
- vue的搭建项目
请求的封装,先在src下面创建一个utils的文件夹,文件夹里面有ajax.js loading.js index.js to 1 请求的封装 ajax文件 需要引入的文件在后面 /* * [page ...
- Ubuntu 16.04 安装的那点事
通常,Ubuntu都是与windows共存——安装成双系统的 如果在虚拟机上安装,请参照 https://blog.csdn.net/wyx100/article/details/51582617 U ...
- windows7 ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法
用PL/SQL连接虚拟机中的Oracle数据库,发现又报了“ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务”错误,帮其解决后,发现很多人遇到过这样的问题,因此写着这里. 也许你没 ...
- LINUX中printf与echo的区别
(1)首先echo是回显,即代表回车显示,是自带换行的:而printf只是打印出来,没有换行(2)echo只是回显没有变量替换功能:printf是有的举例:假如我们定义好变量a='hello worl ...
- Callable Future接口的设计原理
我们都知道Callable接口作为任务给线程池来执行,可以通过Future对象来获取返回值,他们背后的实现原理是什么?通过总结背后的实现原理有助于我们深入的理解相关技术,做到触类旁通和举一反三. 文章 ...