STM32F4_LCD12864串行并行驱动程序合集(5)

2019-03-27 20:23

}

LCD_Write_Byte(bmp[width * j + i],1); //开始写入数据 }

for(k = 0;k < width;k++) //下半屏 {

LCD_Write_Byte(bmp[width * (j + height) + k],1); //开始写入数据

} }

/******分开上半屏或者下半屏写******/ else { switch(x) //判断显示的横坐标,确定起始行 {

case 1: //上半屏 base_x = One_LineAddress; //起始地址为0x80 break; case 2: //下半屏 base_x = One_LineAddress; //起始地址为0x80 break;

case 3: //下半屏 base_x = Three_LineAddress; //起始地址为0x88 break; default: break; }

base_y = base_x + y; //x轴方向的偏移,基地址 + 偏移地址

LCD_Write_Byte(MPU_8bit_Expansion_Draw_Close,0); //扩充指令 LCD_Write_Byte(MPU_8bit_Expansion_Draw_Open,0); //打开绘图功能

if(x == 1 || x == 3) //直接在同一个半屏的,直接写完32位数据 {

for(i = 0;i < 32;i++) //写地址有讲究,先写垂直再写水平,详见“设定绘图RAM{ LCD_Write_Byte(One_LineAddress + i,0);

地址”说明 是下半屏

//写入垂直地址,不管上半屏还

LCD_Write_Byte(base_y,0); //写入水平地址

for(j = 0;j < 2;j++) //两组8bit数据,组成16bit {

}

}

}

}

LCD_Write_Byte(*bmp++,1); //写入数据

if(x == 2) //数据显示不在同一半屏上的,先写上半屏,在写下半屏 { for(i = 0;i < 16;i++) //上半屏16行点阵数据 { }

}

LCD_Write_Byte(Two_LineAddress + i,0); //写入垂直地址 LCD_Write_Byte(base_y,0); //写入水平地址

for(j = 0;j < 2;j++) //两组8bit数据,组成16bit { }

LCD_Write_Byte(*bmp++,1); //写入数据

for(i = 0;i < 16;i++) //下半屏16行点阵数据 { LCD_Write_Byte(Three_LineAddress + i,0); //写入垂直地址 LCD_Write_Byte(base_y + 8,0); //写入水平地址 }

for(j = 0;j < 2;j++) //两组8bit数据,组成16bit { }

LCD_Write_Byte(*bmp++,1); //写入数据

LCD_Write_Byte(MPU_8bit_Expansion_Draw_Open,0); //扩充指令,打开绘图功能 // LCD_Write_Byte(Instruct_Basic8,0); //Locked flag recovery LCD12864_LockedFlag = 0; }

/********************************************************** * 函数功能 ---> LCD12864清屏 * 入口参数 ---> none * 返回数值 ---> none * 功能说明 ---> none

**********************************************************/ void LCD_Clear(void) {

//Locked flag check

if(LCD12864_LockedFlag==1)return; else LCD12864_LockedFlag = 1;

LCD_Write_Byte(Clear_Display,0); //清屏 //Locked flag recovery LCD12864_LockedFlag = 0; }

/********************************************************** * 函数功能 ---> LCD12864GPIO初始化 * 入口参数 ---> none * 返回数值 ---> none * 功能说明 ---> none

**********************************************************/ void LCD_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure;

#ifdef Soft_PSB

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIO时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //普通输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉

GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIO #endif

#ifdef LCD_Work_Mode_Parallel

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIO时钟 GPIO_InitStructure.GPIO_Pin = DataBusPins|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //普通输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉

GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIO #else //硬件SPI

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOD, ENABLE);//使能GPIO时钟 //RST GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //普通输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉

GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIO //CS GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //普通输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉

GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIO //LCD_PWDN/LCD_BLK GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //普通输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉

GPIO_Init(GPIOD, &GPIO_InitStructure); //初始化GPIO LCD_PWDN = 0; LCD_BLK = 1; #ifdef LCD_Work_Mode_HardSPI //硬件SPI SPI1_Init();

#else//软件模拟SPI RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); //使能GPIO时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_5;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //普通输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉

GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIO #endif #endif }

/********************************************************** * 函数功能 ---> LCD12864初始化 * 入口参数 ---> none * 返回数值 ---> none * 功能说明 ---> none

**********************************************************/ void LCD_Init(void) {

/******PSB(串口并口通讯选择******/

#ifdef Soft_PSB //使用软件控制

#ifdef LCD_Work_Mode_Parallel //如果定义了,则使用并口工作模式 LCD_PSB = 1; //高电平为并口通讯模式 #else LCD_PSB = 0; //低电平为串口通讯模式 #endif

#endif /*********************************/ LCD_GPIO_Init(); /*********************************/

LCD_RST = 0; //显示屏复位 LCD_Delay(); LCD_Delay(); LCD_RST = 1;

LCD_CS = 0; //选中显示屏,高电平有效 LCD_Delay(); LCD_Delay();

LCD_CS = 1; //选中显示屏,高电平有效 //LCD_Write_Byte(Instruct_Expansion8,0); //指令0x34,拓展指令集,绘图关 LCD_Write_Byte(MPU_8bit_Expansion_Draw_Open,0); //指令0x36,拓展指令集,绘图开 LCD_Write_Byte(Open_Display,0); //整体显示开,光标关,显示反白关,0x0c LCD_Write_Byte(Clear_Display,0); //清屏,0x01 LCD_Write_Byte(Vernier_ShiftRight,0); //设定起点,光标右移,0x06 /*******************************/ LCD_Write_CGRAM_ALL(CGROM_Code); //写入自定义字符 LCD12864_LockedFlag = 0; }

void LCD_BLK_Manage(__IO uint16_t ADC_Result) { static u8 LCDBLKIcon = 0xff;//When the LCD backlight state does not change, //the repeated display of backlight icons is not


STM32F4_LCD12864串行并行驱动程序合集(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:如何挽救出轨的老婆老婆果然没有经受住“七年之痒”

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: