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的更多相关文章
随机推荐
- yii2-redis 扩展详解
安装yii2-redis composer require yiisoft/yii2-redis 修改config/web.php 的 components 配置 'cache' => [ / ...
- NIO学习笔记
零.前言 这里整理摘录了我了解NIO的一些笔记. 参考资料: 1.深入浅出NIO之Channel.Buffer 2.深入浅出NIO之Selector实现原理 3.Java NIO vs. IO 一.N ...
- HBase 数据迁移方案介绍
一.前言 HBase数据迁移是很常见的操作,目前业界主要的迁移方式主要分为以下几类: 图1.HBase数据迁移方案 从上面图中可看出,目前的方案主要有四类,Hadoop层有一类,HBase层有三类.下 ...
- ViewPager和Fragment中的View的点击事件冲突
ViewPager属于父布局,View属于子布局: 触摸事件是先到父View,再到子View,所以可以让ViewPager取消拦截事件: public class ComposeViewPager e ...
- 微信小程序记账本进度四
//index.wxml <view class="container"> <form catchsubmit="formSubmit" &g ...
- mysql学习5:数据库设计
mysql学习5:数据库设计 本文转载:https://blog.51cto.com/9291927/2087925:原创为天山老妖S 一.数据库设计简介 按照规范设计,将数据库的设计过程分为六个阶段 ...
- jsp请求java返回pdf、excel与word
1,返回pdf关键代码 /** * @todo * @param * @date 2019年3月8日 * @author yanan */ @RequestMapping("/getPdf& ...
- (一)java基础
注:本栏均为学习笔记 一.java标识符 标识符是用来命名的. 规则:字母数字下划线$组成,且不能以数字开头.不能使用java中的关键字. 一般:项目名.包名全部小写 变量名.方法名首字母小写,驼峰命 ...
- 多线程同步synchornized、volatile、Atomic、CountDownLatch示例
synchronized关键字 锁对象.synchronized(this)和synchronized方法都是锁当前对象. import java.util.concurrent.TimeUnit; ...
- opencv关于Mat类中的Scalar()---颜色赋值
这个 CvScalar就是一个可以用来存放4个double数值的数组(O'Reilly的书上写的是4个整型成员):一般用来存放像素值(不一定是灰度值哦)的,最多可以存放4个通道的. typedef s ...